Kth Smallest Numbers in Unsorted Array(分别使用快排、归并、快选三种方法)
来源:互联网 发布:excel 数据收集 编辑:程序博客网 时间:2024/06/06 03:32
Find the kth smallest numbers in an unsorted integer array.
Have you met this question in a real interview? Yes
Example
Given [3, 4, 1, 2, 5], k = 3, the 3rd smallest numbers are [1, 2, 3].
快排
public class Solution { /* * @param k: An integer * @param nums: An integer array * @return: kth smallest element */ public int kthSmallest(int k, int[] nums) { // write your code here if (nums == null || nums.length == 0 || nums.length < k) { return -1; } quickSort(nums, 0, nums.length - 1); return nums[k - 1]; } private void quickSort(int[] nums, int start, int end) { if (start >= end) { return; } int left = start; int right = end; int pivot = nums[(left + right) / 2]; while (left <= right) { while (left <= right && nums[left] < pivot) { left++; } while (left <= right && nums[right] > pivot) { right--; } if (left <= right) { int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; left++; right--; } } quickSort(nums, start, right); quickSort(nums, left, end); }}
归并
public class Solution { /* * @param k: An integer * @param nums: An integer array * @return: kth smallest element */ public int kthSmallest(int k, int[] nums) { // write your code here if (nums == null || nums.length == 0 || nums.length < k || k <= 0) { return -1; } int[] val = new int[nums.length]; mergeSort(nums, val, 0, nums.length - 1); return nums[k - 1]; } private void mergeSort(int[] nums, int[] val, int start, int end) { if (start >= end) { return; } int mid = (start + end) / 2; mergeSort(nums, val, start, mid); mergeSort(nums, val, mid + 1, end); merge(nums, val, start, mid, end); } private void merge(int[] nums, int[] val, int start, int mid, int end) { int left = start; int right = mid + 1; int index = start; while (left <= mid && right <= end) { if (nums[left] < nums[right]) { val[index++] = nums[left++]; } else { val[index++] = nums[right++]; } } while (left <= mid) { val[index++] = nums[left++]; } while (right <= end) { val[index++] = nums[right++]; } for (int i = start; i <= end; i++) { nums[i] = val[i]; } }}
快选(最优解)
public class Solution { /* * @param k: An integer * @param nums: An integer array * @return: kth smallest element */ public int kthSmallest(int k, int[] nums) { // write your code here if (nums == null || nums.length == 0 || nums.length < k) { return -1; } quickSelect(nums, 0, nums.length - 1, k - 1); return nums[k - 1]; } private void quickSelect(int[] nums, int start, int end, int k) { if (start >= end) { return; } int left = start; int right = end; int pivot = nums[(left + right) / 2]; while (left <= right) { while (left <= right && nums[left] < pivot) { left++; } while (left <= right && nums[right] > pivot) { right--; } if (left <= right) { int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; left++; right--; } } if (right >= k) { quickSelect(nums, start, right, k); } else { quickSelect(nums, left, end, k); } }}
阅读全文
0 0
- Kth Smallest Numbers in Unsorted Array(分别使用快排、归并、快选三种方法)
- LintCode Kth Smallest Number in A Unsorted Array
- Kth small numbers in unsorted array java solution
- leetcode--- Kth Largest Element in an Array---快排
- [leetcode]Kth Smallest Element in an Array
- Find the kth largest element in an unsorted array
- the kth largest element in an unsorted array.
- LeetCode 215 Kth Largest Element in an Array 含有各种快排对比
- 215. Kth Largest Element in an Array(快排的分治思想)
- quick select to find the kth smallest element in array
- 【特别重要!!!快排的partition思想】【leetcode题解】【M】【71】Kth Largest Element in an Array
- 排序(快排,归并,堆排)
- 一些排序方法(堆排,归并,快排,计数排)
- Kth smallest element (in a sorted matrix ; In a BST tree ; In two sorted array)
- 148. Sort List(快排、归并)
- 分治、归并、快排
- good article————K’th Smallest/Largest Element in Unsorted Array | Set 2 (Expected Linear Time)
- leetcode378:Kth Smallest Element in a Sorted Matrix(medium)
- 参数化-excel(ADO方式)
- Swift学习笔记(15)——属性
- DataURL, Blob, File, Image之间的关系与转换
- Ajax页面缓存问题分析与解决办法
- Vue 报错 Failed to resolve filter
- Kth Smallest Numbers in Unsorted Array(分别使用快排、归并、快选三种方法)
- React bind selcet
- XML技术(一)
- deepmind_lab Lua for Windows 5.1.4-46---LuaForWindows.rar 的下载地址
- 初识Calcite——使用实例
- vue的计算属性的set方法--几乎不用,了解就行
- PHP中常用的函数
- 排序—冒泡
- c++crash的原因