排序
排序
qxlxi
21届本,后端工程师 (专注于Java、Go、数据库、缓存、消息队列、网络、OS、算法、软件设计、DevOps、云原生、大数据、分布式系统架构设计等)
展开
-
【每日一题-leetcode】493. 翻转对
493. 翻转对难度困难118给定一个数组 nums ,如果 i < j 且 nums[i] > 2nums[j] 我们就将 (i, j) 称作一个重要翻转对*。你需要返回给定数组中的重要翻转对的数量。示例 1:输入: [1,3,2,3,1]输出: 2示例 2:输入: [2,4,3,5,1]输出: 3 //归并排序中进行统计 public int reversePairs(int[] nums) { if(nums =原创 2020-08-10 19:50:07 · 696 阅读 · 0 评论 -
【左神算法】给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。
1.题目给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。2.实现2.1 思路 问题: * 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的 排序。 * 比如 数组[1,2,9,4,6] sort后 [1,2,4,6,9] 6-9之间间隙最大值就为3. * 思路: * 我们可以基于桶排序的思想来解决这个问题。data[1,2,3,4,5,7,原创 2020-05-09 20:57:18 · 814 阅读 · 2 评论 -
【算法】堆排序
堆排序思路思路:堆排序是比较重要的排序,主要是基于堆结构。而堆结构就是完全二叉排序树。因为二叉排序树的结构特点。 * 我们可以用数组进行模拟二叉树的左右子节点, 关系就是 root节点的左子节点为 2*i + 1 root节点的右子节点为 2*i+2 * 而左子节点或者右子节点的父节点为 (i-1)/2 ,通过上述关系就可以通过数组来实现堆结构。 * 而堆结构中比较重要的两个操作就是 一个是节点的生成 也就是heapInsert 比如添加一个节点3 需要父节点比较大小原创 2020-05-08 17:52:03 · 305 阅读 · 1 评论 -
【左神算法】随机+荷兰国旗优化版快排
随机+荷兰国旗优化版快排思路: 快速排序 time O(NlogN) space : O(logN) * 实现思路: * 经典快排,分区是按照数组的最后一个元素进行分区,而在分区的过程中,每次只能确定一个元素的位置。因此,当出现 极端情况 * [1,2,3,4,5,6] or [9,8,5,3,1] 这种已经排序好的情况,time 为...原创 2020-05-08 17:01:59 · 679 阅读 · 1 评论 -
【剑指offer】40.最小的K个数
40.最小的K个数面试题40. 最小的k个数难度简单76输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]Top(k) 问题...原创 2020-04-28 19:06:49 · 315 阅读 · 0 评论