以下代码显示错误输出:
这是我的代码:
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);
答案 0 :(得分:0)
要获得 Unknown column teams.id in where clause
最小的元素,请尝试以下操作:
使用 Kth
对数组进行排序,或者如果您必须自己进行排序,请使用简单的排序算法,例如 bubble sort;
将 Arrays.sort
变量初始化为 1;
遍历数组从count
直到i = i = 0;
,比较当前元素和下一个元素,如果不相等就加一,否则不加;
停止直到计数器 == N - 1
元素
之后,您可以改进代码以处理极端情况,例如数组没有 Kth
元素等。
使用上述输入算法
Kth
;
找到第四小的。
排序数组 'x' -> int[] x = {7, 10, 10, 4, 20, 15}
计数 = 1;
遍历数组 4 != 7 Count = 2;
7 != 10 -> 计数 = 3;
10 == 10 -> 计数 = 3;
10 != 15 -> 计数 = 4;
停止,{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 并且算法会失败。