![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 83
紫菜花油菜花
这个作者很懒,什么都没留下…
展开
-
【排序算法】☆☆快速排序+堆排序
数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。❤❤基于快排的快速选择思路快速排序为典型的分治算法,对a[l...r]排序的过程可以分解如下:分解:取任意下标pivot,并将数组划分成两个子数组,a[l...pivot-1](元素均<=a[pivot])和a[pivot+1...r](元素均>a[pivot])。解决:对子数组a[l...pivot-1]和a[pivot+1...r原创 2021-04-07 17:17:34 · 196 阅读 · 0 评论 -
【排序算法】归并排序——算法详解,题型举例,链表,数组
「归并排序」是分治思想的典型应用,它包含这样三个步骤:分解:待排序的区间为[l,r],令m=l+((r-l)>>1),将区间分为[l,m],[m+1,r]解决:使用归并排序递归地排序两个子序列合并:把两个已经排好序的子序列[l,m]和[m+1,r]合并起来在带排序序列长度为1的时候,递归开始【回升】,即默认长度为1时,序列时排好的。☆☆☆剑指 Offer 51. 数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这原创 2021-04-04 17:32:27 · 327 阅读 · 0 评论 -
【算法】异或算法巧用——数字出现次数
性质:a^b=b^aa^b^c=a^(b^c)a^0=aa^a=0;在刷题上主要应用的是【异或】的自反省,即A^B^B=A,依此性质出现的题目层>出不穷应用1:交换a与bt=a^b;a=a^t;b=b^t;应用2:在一列数组中,其中数字均成双出现,仅有一个数字仅出现一次,求该【单身狗】。直接将整个数组异或求解,解便是该 【单身狗】剑指 Offer 56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这.原创 2021-03-31 16:40:16 · 286 阅读 · 0 评论 -
【算法】记忆化回溯+状态压缩+分治
// 优化四:指令集优化,让CPU使用POPCNT指令,从而加速__builtin_popcount#pragma GCC target ("sse4.2")__builtin_popcount(state) == sz; 该指令计算state中二进制1的个数5619. 最小不兼容性给你一个整数数组 nums 和一个整数 k 。你需要将这个数组划分到 k 个相同大小的子集中,使得同一个子集里面没有两个相同的元素。一个子集的 不兼容性 是该子集里面最大值和最小值的差。请你返回将数组分成 k原创 2021-03-30 14:50:07 · 217 阅读 · 0 评论 -
【算法】无序整数数组查找第k个最大的数(包含内存缺乏情况)
文章目录速览算法详解内存足够快排算法思想伪代码二分按数值区间二分按位二分内存不足小根堆当K个数维护的根堆可存入内存时当K个数维护的根堆不能存入内存时(K过大,10亿)速览无序整数数组查找第k个最大的数对于无序整数数组查找第k个最大的数,主要分为如下两种情况内存足够快排二分按数值区间二分按位二分内存不足堆排序(维护一个堆)数据范围取值不大键值索引算法详解内存足够快排算法思想避免对所有数进行排序,采用快速排序分堆,并递归其中一半,直到所原创 2021-03-30 14:33:03 · 746 阅读 · 0 评论