题解 | #第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;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务