蓝桥 第三周 分治 排序

3.1 分治法介绍及关键点解析_哔哩哔哩_bilibili

分治:分解 解决 合并

快速排序

        单向扫描分区法

public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = {1,6,3,6,2,8,6,1,0,7};quickSort1(arr,0,arr.length-1);for(int i:arr) {System.out.println(i);}}public static void quickSort1(int[] arr,int idx1,int idx2) {if(idx1<idx2) {int q = partition(arr,idx1,idx2);quickSort1(arr,idx1,q-1);quickSort1(arr,q+1,idx2);}	}public static int partition(int[] arr,int idx1,int idx2) {int pivot = arr[idx1];int l = idx1+1;int r = idx2;int temp;while(l<=r) {if(arr[l]<pivot)l++;else{temp = arr[l];arr[l]=arr[r];arr[r]=temp;r--;}			}temp = arr[idx1];arr[idx1] = arr[r];arr[r] = temp;return r;}

        双向扫描分区法

public static int partition2(int[] arr,int idx1,int idx2) {int pivot = arr[idx1];int l = idx1+1;int r = idx2;int temp;while(l<=r) {while(l<=r&&arr[l]<=pivot)l++;while(l<=r&&arr[r]>pivot)r--;if(l<r) {temp = arr[l];arr[l] = arr[r];arr[r] = temp;}			}temp = arr[idx1];arr[idx1] = arr[r];arr[r] = temp;return r;}

快速排序的优化

        三点中值法 (在p r mid之间,选一个中间值作为pivot)

        绝对中值法

        待排序列表较短时,用插入排序

归并排序 Merge Sort

public class Solution3_1 {private static int[] helper;public static void main(String[] args) {int[] arr = {10,2,7,3,19,11,1,6,8,4,13};sort(arr);for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}public static void sort(int[] arr){helper = new int[arr.length];mergeSort(arr,0,arr.length-1);}private static void mergeSort(int[] arr,int low, int high){if(low<high){int mid = low + ((high - low)>>1);mergeSort(arr,low,mid);mergeSort(arr,mid+1,high);merge(arr,low,mid,high);}}public static void merge(int[] arr, int low,int mid,int high){System.arraycopy(arr,low,helper,low,high-low+1);int left = low,right = mid +1;int cur = low;while(left<=mid&&right<=high){if(helper[left]<=helper[right]){arr[cur++]=helper[left++];}else{arr[cur++]=helper[right++];}}while(left<=mid){arr[cur++]=helper[left++];}}
}

题1:调整数组顺序使奇数位于偶数前面(O(n))

public static void main(String[] args) {int[] arr={1,2,3,4,5,6,7,8,9,10};int[] helper = new int[arr.length];System.arraycopy(arr,0,helper,0,arr.length-1);int p=0;for(int i=0;i<arr.length;i++){if(helper[i]%2==1){arr[p++]=helper[i];}}for(int i=0;i<arr.length;i++){if(helper[i]%2==0){arr[p++]=helper[i];}}for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}

  题2:第k个元素(第k大的元素)

public class Solution3_3 {public static void main(String[] args) {int[] arr = {1,5,2,4,3,6,9,8,7};int k = 7;System.out.println(getK(arr,k,0,arr.length-1));}public static int getK(int[] arr,int k,int idx1,int idx2){int q = partition(arr,idx1,idx2);int qK = q-idx1+1;//pivot是第几个元素if(qK==k) {return arr[q];}else if(qK>k){return getK(arr,k,idx1,q-1);}else{return getK(arr,k-qK,q+1,idx2);}}public static int partition(int[] arr,int idx1,int idx2){int pivot = arr[idx1];int l = idx1+1;int r = idx2;int temp;while(l<=r) {while(l<=r&&arr[l]<=pivot)l++;while(l<=r&&arr[r]>pivot)r--;if(l<r) {temp = arr[l];arr[l] = arr[r];arr[r] = temp;}}temp = arr[idx1];arr[idx1] = arr[r];arr[r] = temp;return r;}
}

题3:超过一半的数字

        排序后位置在下标n/2的元素

public static void main(String[] args) {int[] arr = {6,7,7,7,8,8,8,8,8,8};Arrays.sort(arr);System.out.println(arr[arr.length/2]);}

题3扩展:寻找发帖水王

public static int getCandidate(int[] arr){int candidate = arr[0];int nTimes = 1;for(int i=0;i<arr.length;i++){if(nTimes==0){candidate = arr[i];nTimes = 1;continue;}if(arr[i]==candidate){nTimes++;}else{nTimes--;}}return candidate;}

  题4:最小可用id

public class Solution3_5 {public static void main(String[] args) {int[] arr = {10,2,3,4,6,7,8,1};System.out.println(getMinId(arr,0,arr.length-1));}public static int getMinId(int[] arr,int low,int high){if(low>=high)return Math.max(low,high)+1;int q = partition(arr,low,high);if(arr[q]==q+1){return getMinId(arr,q+1,high);}else{return getMinId(arr,low,q);}}public static int partition(int[] arr,int low,int high){int pivot = arr[low];int l = low+1;int r = high;int temp;while(l<=r){if(arr[l]<pivot){l++;}else{temp = arr[l];arr[l] = arr[r];arr[r--] = temp;}}temp = arr[low];arr[low] = arr[r];arr[r] = temp;return r;}
}

题5:合并有序数组

题6:逆序对个数

树和二叉树

        树的遍历 先序遍历 中序遍历 后序遍历

        数组的先序遍历

    public static void preOrder(int[] arr,int i){if(i>=arr.length){return;}System.out.println(arr[i]);preOrder(arr,i*2+1);preOrder(arr,i*2+2);}

堆 

        完全二叉树 近似完全二叉树

        大顶堆 小顶堆

堆排序

        堆化 反向调整使得每个子树都是大顶堆或者小顶堆

        按序输出元素 把堆顶和最末元素对调 然后调整堆顶元素

计数排序

        用辅助数组对数组中出现的数字计数 元素转下标 下标转元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本初始化mysql密码

如果你想在shell脚本中初始化MySQL的密码&#xff0c;你可以使用以下的方法。首先&#xff0c;你需要知道MySQL的root用户密码。在初始化过程中&#xff0c;你可以设置一个新的密码。 以下是一个简单的例子&#xff0c;说明如何在shell脚本中初始化MySQL的root密码&#xff1a…

Open3d计算点云法向量,可视化(代码)

Open3d使用estimate_normals函数来计算法向量。其参数设置Open3d提供了3中参数搜索的方法&#xff08;所有计算的法向量模长为1&#xff09;&#xff1a; open3d.geometry.KDTreeSearchParamKNN(knn20) # 计算近邻的20个点 open3d.geometry.KDTreeSearc…

Linux下qemu的安装并搭建虚拟arm环境(带helloworld测试)【超详细】

qemu的安装并搭建虚拟arm环境 1、准备工作1.1 安装交叉汇编工具1.2 编译内核kernel1.3 u-boot编译1.4 制作根文件系统-busybox 2、启动qemu&#xff08;arm&#xff09;3、helloworld测试 1、准备工作 1.1 安装交叉汇编工具 交叉编译器的作用就不需要详细解释了&#xff0c;因…

MySQL原理(四)索引(3)索引失效与索引区分度

一、索引失效&#xff1a; 首先未使用索引列作为查询条件索引是肯定会生效的&#xff0c;还有其他的情况&#xff0c;索引列做为了查询条件也失效了&#xff1a; ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(NAME, age, pos); 1、select 语句、order by语句&#xf…

来了来了,5000个红包封面免费领

今年公众号很慷慨&#xff0c;给长期运营的作者免费发放了6w个红包封面&#xff0c;感谢公众号平台。 往年还是自己花钱找别人设计&#xff0c;平台审核通过后才能正常发放给大家&#xff0c;自从AI绘画工具问世后&#xff0c;自己也能设计了。 下面的两个封面都是我用AI工具St…

2024.1.30报错记录

今天想调通一套github上的U-net代码&#xff0c;把报错记录一下 第一章 ModuleNotFoundError: No module named skimage 没有这个模块 pip install scikit-image 第二章 TypeError: (‘Keyword argument not understood:‘, ‘input‘) TypeError: (‘Keyword argument …

从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践

原文来源&#xff1a; https://tidb.net/blog/a38c72a4 本文作者&#xff1a;骏伯网络 唐帆&#xff0c;PingCAP 贺美存 骏伯网络简介 广州骏伯网络是一家以数据驱动的科技公司&#xff0c;聚焦移动互联网营销服务&#xff0c;坚持以客户为中心&#xff0c;深耕 APP、运营…

政安晨:示例演绎Python的列表

列表和你可以用它们做的事&#xff1a;包括索引、切片和对象变动 (变异-Mutation) 。 列表 在Python中&#xff0c;列表表示有序的值序列。以下是如何创建列表的示例&#xff1a; primes [2, 3, 5, 7] 我们可以将其他类型的元素放在列表中&#xff1a; planets [Mercury…

【C++】拷贝构造函数和赋值运算符重载详解

目录 拷贝构造函数 概念 特征 赋值运算符重载 运算符重载 赋值运算符重载 ​编辑前置和后置重载 ⭐拷贝构造函数 ⭐概念 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存 在的类类型对象创建新…

【Java程序设计】【C00248】基于Springboot的摄影跟拍预定管理系统(有论文)

基于Springboot的摄影跟拍预定管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的摄影跟拍预定管理系统 本系统分为系统功能模块、管理员功能模块、摄影师功能模块以及用户功能模块。 系统功能模块&#xf…

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测&#xff08;SE注…

【考研408】操作系统笔记

文章目录 [toc] 计算机系统概述操作系统的基本概念操作系统的概念和特征操作系统的目标和功能&#xff08;**处理器管理、存储器管理、设备管理、文件管理、向用户提供接口、扩充机器**&#xff09; 操作系统的发展与分类操作系统的运行环境操作系统的运行机制 操作系统的体系结…

Python(SQLite)executescript用法

SQLite 数据库模块的游标对象还包含了一个 executescript() 方法&#xff0c;这不是一个标准的 API 方法&#xff0c;这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用&#xff0c;它可以执行一段 SQL 脚本。 例如&#xff0c;如下程序使用 executescr…

CVEMap:用于查询、浏览和搜索 CVE 的开源工具

CVEMap 是一个开源命令行界面 (CLI) 工具&#xff0c;可让您探索常见漏洞和暴露 (CVE)。它旨在提供一个简化且用户友好的界面来导航漏洞数据库。 尽管 CVE 对于查明和讨论安全漏洞至关重要&#xff0c;但它们的快速增长和偶尔夸大的严重性往往会导致误导性信息。 安全专家必须…

13:Session机制实现用户登录与注销功能-Java Web

在Java Web开发中&#xff0c;Session作为服务器端的会话管理技术&#xff0c;对于处理用户登录、状态维护及注销等场景具有至关重要的作用。本文将从理论和实践两方面出发&#xff0c;详细剖析如何使用Session机制实现用户登录与注销功能&#xff0c;并提供前后端代码示例&…

kafka排除zookeeper使用kraft的最新部署方案

kafka在新版本中已经可以不使用zookeeper进行服务部署&#xff0c;排除zookeeper的部署方案可以节省一些服务资源&#xff0c;这里使用 kafka_2.13-3.6.1.tgz 版本进行服务部署。 测试部署分为三个服务器&#xff1a; 服务器名称服务器IP地址test01192.168.56.101test02192.1…

(bean配置类的注解开发)学习Spring的第十三天

bean配置类的注解开发 问题提出 用类充当配置文件 applicationcontext.xml : Configuration注解标识此类为配置类,替代原有xml文件 看原配置文件applicationcontext.xml代码 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http:/…

EasyCVR视频融合平台如何助力执法记录仪高效使用

旭帆科技的EasyCVR平台可接入的设备除了常见的智能分析网关与摄像头以外 &#xff0c;还可通过GB28181协议接入执法记录仪&#xff0c;实现对执法过程的全称监控与录像&#xff0c;并对执法轨迹与路径进行调阅回看。那么&#xff0c;如何做到执法记录仪高效使用呢&#xff1f; …

MMDB是什么

MMDB (MaxMind DB) 是一种专为地理位置服务和其他网络相关数据设计的二进制文件格式。这种格式主要被用于存储如 IP 地址定位数据之类的信息&#xff0c;使得应用程序可以快速且高效地查询 IP 地址的地理位置、自治系统信息、网络提供商信息等。MMDB 格式由 MaxMind 公司开发&a…

react 使用react-seamless-scroll实现无缝滚动

文章目录 1. 实现无缝滚动效果2. react-seamless-scroll 无缝滚动案例介绍3. react 项目集成3.1 项目引入 cssSeamlessScroll 滚动组件3.2 完整代码3.2.1 newBet.tsx 代码3.2.2 index.module.scss 1. 实现无缝滚动效果 实现单步向下滚动点击更多展开&#xff0c;收起&#xff0…