题解 | #第k轻的牛牛#
第k轻的牛牛
https://www.nowcoder.com/practice/7676478b46794456b145e8e48b0e2763
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param weights int整型一维数组 * @param k int整型 * @return int整型 */ // Random random = new Random(); public int findKthSmallest (int[] weights, int k) { // write code here int left = 0, right = weights.length - 1; int p; while(left <= right){ p = partation(weights, left, right); if(p == k - 1) return weights[p]; if(p > k - 1){right = p - 1;} if(p < k - 1){left = p + 1;} } return - 1; } private int partation(int[] nums, int left, int right) { // int index = random.nextInt(right - left + 1) + left; int val = nums[left]; int l = left+1, r = right; while(true){ while(l <= r && nums[l] < val)l++; while(l <= r && nums[r] > val)r--; if(l >= r)break;//r是val的位置 else{ swap(nums, l, r); l++; r--; } } swap(nums,left, r); return r; } private void swap(int[] nums, int i, int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }