当前位置: 首页 > news >正文

【手撕】快排-分治

 1. 颜色分类

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/sort-colors/description/

代码

class Solution {public void sortColors(int[] nums) {int left = -1 ,  right = nums.length;int i = 0;while( i < right){if(nums[i] == 0){swap(nums,++left , i++);}else if( nums[i] == 1){i++;}else{swap(nums,--right ,i);}}}private static void swap(int[] arr , int left , int right){int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;}
}

2. 快排

. - 力扣(LeetCode)

代码

class Solution {public int[] sortArray(int[] nums) {qsort(nums,0 , nums.length -1);return nums;}private static void qsort(int[] arr, int l , int r){if(l >= r) return ;int left = l - 1 , right = r + 1;//随机选择一个基准元素int povit = arr[new Random().nextInt( r - l + 1) + l];int i = l;//按照基准元素将数组划分成3块while( i < right){if(arr[i] < povit) swap(arr , ++left , i++);else if(arr[i] == povit) i++;else swap(arr , --right , i);}//继续划分qsort(arr, l , left);qsort(arr , right , r);}private static void swap(int[] arr , int a , int b){int tmp = arr[a];arr[a] = arr[b];arr[b] = tmp;}
}

3. 第 K 大

代码

class Solution {public int findKthLargest(int[] nums, int k) {return quickselect(nums, 0, nums.length - 1, k);}public static int quickselect(int[] nums, int l, int r, int k) {if( l == r) return nums[l];int povit = nums[new Random().nextInt(r - l + 1) + l];int left = l - 1 , right = r + 1 , i = l;int a = 0 , b = 0, c = 0;while(i < right){if(nums[i] < povit) {swap(nums , ++left , i++);a++;}else if(nums[i] == povit){i++;b++;}else{swap(nums , --right , i);c++;}}//划分后根据数量决定继续去哪里找TOP Kif(c >= k) return quickselect(nums , right , r, k) ;else if(b+c >= k) return povit;else return quickselect(nums, l , left, k - b -c) ;}public static  void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

4. 返回最小的 K 个数

. - 力扣(LeetCode)

class Solution {public int[] inventoryManagement(int[] nums, int k) {qsort(nums, 0 , nums.length - 1, k);int[] ret = new int[k];for(int i = 0 ; i < k; i++){ret[i] = nums[i];}return ret;}private static void qsort(int[] nums, int l, int r, int k){while(l >= r) return;int povit = nums[new Random().nextInt(r - l + 1) + l];int left = l - 1, right = r + 1, i = l;int a , b ,c ; a = 0; b= 0; c = 0;while(i < right){if(nums[i] < povit) {swap(nums, ++left , i++); a++;}else if(nums[i] == povit){ i++; b++;}else{ swap(nums, --right , i); c++;}}//划分完毕 根据情况决定去哪一部分继续寻找if(a >= k) qsort(nums, l, left, k);else if(a + b >= k) return;else qsort(nums, right, r, k - a - b);}private static void swap(int[] nums, int a, int b){int tmp = nums[a];nums[a] = nums[b];nums[b] = tmp;}
}


http://www.mrgr.cn/news/28204.html

相关文章:

  • stm32——通用定时器时钟知识点
  • PCL算法汇总
  • STM32+AI语音识别智能家居系统
  • Excel模板下载\数据导出
  • linux c 语言回调函数学习
  • 对接钉钉审批详情
  • 【ESP32】ESP-IDF开发 | 中断矩阵+按键输入中断例程
  • 【23-24年】年度总结与迎新引荐
  • mtk7628 网口灯问题
  • 【数据结构】十大经典排序算法总结与分析
  • STM32—I2C
  • Andrej Karpathy谈AI未来:自动驾驶、Transformer与人机融合
  • 嵌入式Linux:向进程发送信号
  • 大模型笔记03--快速体验dify
  • dedecms靶场(四种webshell姿势)
  • 【Go】Go语言中的数组基本语法与应用实战
  • 建模杂谈系列256 规则函数化改造
  • 速通汇编(五)认识段地址与偏移地址,CS、IP寄存器和jmp指令,DS寄存器
  • 【C++】多态
  • dedecms(四种webshell姿势)aspcms webshell漏洞复现
  • 从冯唐的成事心法 看SAP协助企业战略落地到信息化
  • kubernetes中pause容器的作用与源码详解
  • 神经网络_使用tensorflow对fashion mnist衣服数据集分类
  • OpenGL笔记二十一之几何类设计
  • 数组学习内容
  • 基于深度学习,通过病理切片直接预测HPV状态|文献速递·24-09-16