摘要: 首先是堆的概念。 堆就是完全二叉树,即叶子节点只可能在最大的两层上出现,且只允许最大的一层上有空缺,且空缺的节点必须是从左到右连续的。 堆可以分为大根堆和小根堆,其中大根堆就是每个子树的根节点都是最大的,而小根堆中的每个子树都是根节点中最小的。 堆排序中可以利用数组来实现大根堆,父节点在i位置上,则 阅读全文
posted @ 2020-04-23 16:28 肉松松松松 阅读(136) 评论(0) 推荐(0)
摘要: 经典快速排序思想:找到一个数组的最后一个元素当作标准值,大于小于这个数的元素排在数组的左边,大于这个数的元素排在数组的右边,最后把大于数组的第一个元素和这个标准值进行交换。这时候算法的复杂度基于数据的有无序性,因为每次排序只能排好一个标准值的顺序,如果这个数据本来就是顺序或者逆序的就会导致O(n^2 阅读全文
posted @ 2020-04-23 13:56 肉松松松松 阅读(135) 评论(0) 推荐(0)
摘要: 题目一:给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(n)。 解题思路:定义一个less区域,这个区域里的数字一定小于等于num,所以less指针一开始指向数组的前一个位置上,cur指针指在当前数组的 阅读全文
posted @ 2020-04-23 11:43 肉松松松松 阅读(108) 评论(0) 推荐(0)
摘要: https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/题目链接 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4 阅读全文
posted @ 2020-04-22 11:12 肉松松松松 阅读(125) 评论(0) 推荐(0)
摘要: 描述在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。 例子[1,3,4,2,5]1左边比1小的数:没有3左边比3小的数:14左边比4小的数:1,32左边比2小的数:15左边比5小的数:1,3,4,2所以小和为1+1+3+1+1+3+4+2=16 首先想到的方法 阅读全文
posted @ 2020-04-21 16:55 肉松松松松 阅读(343) 评论(0) 推荐(0)
摘要: 归并排序基于递归的思想,递归将一个数组分别等量的两个数组,最后再根据大小顺序插入help数组中保证help数组是有序的,将数组赋值到原数组。此方法基于分而治之的思想。根据Master公式: T [n] = aT[n/b] + f (n)(直接记为T [n] = aT[n/b] + T (N^d)) 阅读全文
posted @ 2020-04-21 13:45 肉松松松松 阅读(195) 评论(0) 推荐(0)
摘要: 冒泡排序过程:在每一次循环中,将该次循环中遍历的最大数字通过交换放到数组的最后,之后让循环范围减1,最终完成排序。其中时间复杂度为O(n^2),空间额外复杂度O(1)。 void BubbleSort(int* &arr,int n) { if( arr == NULL|| n<=1 ) retur 阅读全文
posted @ 2020-04-21 12:29 肉松松松松 阅读(174) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2020-04-19 22:12 肉松松松松 阅读(130) 评论(0) 推荐(0)
摘要: long long quick_mod(long long a,long long b,long long Mod){ long long ans = 1; a %= Mod; //对刚进来的a进行取模运算,避免后面第一次求平方运算溢出 while(b) { if(b&1) //对二进制下的 b 进 阅读全文
posted @ 2019-12-27 20:18 肉松松松松 阅读(114) 评论(0) 推荐(0)
摘要: 恢复内容开始 https://blog.csdn.net/u012469987/article/details/50897291 利用二分法求最小化最大值和最大化最小值 https://www.cnblogs.com/Sunnie69/p/5423817.html 思路从单点最大值到总和之间二分,保 阅读全文
posted @ 2019-12-27 19:49 肉松松松松 阅读(142) 评论(0) 推荐(0)