java - 打印数组的第 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);
解决方案
如果你想坚持你的算法试试这个,但我同意其他人的观点,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,算法将失败。
推荐阅读
- python - 使用 Python 子进程避免 OOM(内存未在循环中释放)?
- javascript - 我们可以使用切换而不是 if/else 和隐藏/显示逻辑吗
- ios - Swift:移动后恢复 UIView 中心
- javascript - 如何让服务器模拟用户连接到网站并在 js 中执行一些操作?
- python - 从各个方向随机生成玩家周围的敌人
- java - 使用 SnakeYAML 将包含一些代码的文本转储到 yaml 文档
- uwp - Windows 10 - PlayReady - DRM - ProtectionManager 未在 UWP 应用程序中触发
- r - 合并不同长度(间隙)的时间序列数据
- excel - 根据第一列中的信息复制行
- c++ - 犰狳函数的不同最小二乘误差