打印数组的第 k 个最小数字

时间:2021-03-09 06:01:37

标签: java arrays

以下代码显示错误输出:

这是我的代码:

int[] x = {7, 10, 4, 20, 15};
int n = x.length; 
int k = 4; 
int ctr = 0;              
                            
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (x[i] > x[j]) {
            ctr++;
        }
        if ((ctr + 1) == k){
            ans = x[i];
            break;
        }
    }
}
System.out.println(ans);

2 个答案:

答案 0 :(得分:0)

要获得 Unknown column teams.id in where clause 最小的元素,请尝试以下操作:

  1. 使用 Kth 对数组进行排序,或者如果您必须自己进行排序,请使用简单的排序算法,例如 bubble sort;

  2. Arrays.sort 变量初始化为 1;

  3. 遍历数组从count直到i = i = 0;,比较当前元素和下一个元素,如果不相等就加一,否则不加;

  4. 停止直到计数器 == N - 1 元素

之后,您可以改进代码以处理极端情况,例如数组没有 Kth 元素等。

使用上述输入算法

Kth;

找到第四小的。

  1. 排序数组 'x' -> int[] x = {7, 10, 10, 4, 20, 15}

  2. 计数 = 1;

  3. 遍历数组 4 != 7 Count = 2;

  4. 7 != 10 -> 计数 = 3;

  5. 10 == 10 -> 计数 = 3;

  6. 10 != 15 -> 计数 = 4;

  7. 停止,{4, 7, 10, 10, 15, 20} 是第四小的元素

答案 1 :(得分:0)

如果你想坚持你的算法试试这个,但我同意其他人的观点,array.sorted 的解决方案更好

int[] x = {7, 10, 4, 20, 15};
int n = x.length; 
int k = 4; 
int ctr = 0; 
int ans = 0             
                            
for (int i = 0; i < n; i++) {
    ctr = 0;
    for (int j = 0; j < n; j++){
        if (x[i] > x[j]) {
            ctr++;
        }
    }

    if ((ctr + 1) == k){
        ans = x[i];
        break;
    }

}
System.out.println(ans);

此方法正在寻找“一个大于数组中其他 k 个数字的数字”,而不是像您所说的“取第 k 个数字”

例如,这种方法在以下情况下会失败:{4,2,2,2,2,2} 并且您被要求选择第 3 个

没有比其他2大的数:4比5大,2比0大 所以在你的提案中 ctr 变量永远不会 = 3 并且算法会失败。

相关问题