700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 剑指offer40 最小的k个数

剑指offer40 最小的k个数

时间:2023-04-19 07:25:43

相关推荐

剑指offer40 最小的k个数

这个题目最坑的是 这个输入的k是几 那么输出的个数就是几 如果全是重复的 比如[1,1,1,1,1,1,1]

如果k=2 那么只能输出[1,1] 题目给的这两个样例完全不能体现这一点啊! 而且第一个样例这个[1,2] [2,1]

完全是误导我输出一个有序数列啊 最过分的是 这道题给的错误样例也是一个有序数组啊,但其实根本不需要输出的数组是有序的!只有数字全都有就行了啊 能不能严谨一些啊

/*** 输入整数数组 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]** 限制:* 0 <= k <= arr.length <= 10000* 0 <= arr[i] <= 10000** 来源:力扣(LeetCode)* 链接:https://leetcode-/problems/zui-xiao-de-kge-shu-lcof* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/import java.util.Arrays;import java.util.Random;class Solution {public int[] getLeastNumbers(int[] arr, int k) {Random rnd = new Random();if (k == 0)return Arrays.copyOf(arr, 0);Sort(arr, 0, arr.length-1, rnd, k);return Arrays.copyOf(arr, k);}private static int Sort(int[] arr, int l, int r, Random rnd, int k) {int p = l + rnd.nextInt(r-l+1);swap(arr, l, p);// arr[l+1, lt] < 0 || arr[lt+1, i-1] =0 || arr[gt, r] > 0int lt = l, gt = r+1, i = l+1;while (i < gt) {if (arr[i] < arr[l]) {lt++;swap(arr, lt, i);i++;} else if (arr[i] == arr[l]) {i++;} else {gt--;swap(arr, gt, i);}}// 将l与lt交换swap(arr, l, lt);// 数组变为 arr[l, lt-1] < 0 || arr[lt, gt-1] = 0 || arr[gt, r] > 0if (lt <= k-1 && k-1 <= gt-1)return gt-1;else if (gt-1 < k-1) {return Sort(arr, gt, r, rnd, k);} else {return Sort(arr, l, lt-1, rnd, k);}}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String[] args) {int[] arr = {1,1,1,1,1,1};int[] res = new Solution().getLeastNumbers(arr,2);for (int a :res) {System.out.print(a + " ");}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。