首页 > 解决方案 > 打印数组的第 k 个最小数

问题描述

下面的代码显示错误的输出:

这是我的代码:

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);

标签: javaarrays

解决方案


如果你想坚持你的算法试试这个,但我同意其他人的观点,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,算法将失败。


推荐阅读