javascript - 在给定的一组数字中以最小的时间复杂度找到第三小的数字
问题描述
这是一个工作算法,可以在给定的一组数字中找到第三小的数字。
我一直在寻找时间复杂度较低的给定要求的另一种解决方案。
这是工作代码:
Numbers = [3,2,55,-10,-55,5,3,2,1,-5,33,9,-1,4,5];
var x = 0;
var y = 0;
function FindThirdSmallestNumber() {
for(var i=0;i<Numbers.length;i++) {
if (Numbers[i] > Numbers[i+1]) {
x = Numbers[i];
y = Numbers[i+1];
Numbers[i] = y;
Numbers[i+1] = x;
i=-1;
} else {
//
}
}
console.log(Numbers[2]);
}
FindThirdSmallestNumber();
解决方案
这个应该简单很多。也不确定这是否更快,但在最简单/最明显的情况下,更少的代码 = 更好的性能。
我只是对数组进行升序排序并根据索引获取值。因此,使用此代码,您可以到达任何地方;只要您的索引没有超出范围,最低,第二低,第三低等。
const input = [3,2,55,-10,-55,5,3,2,1,-5,33,9,-1,4,5];
function getLowestByRank(data, rank) {
data.sort(function(a, b){ return a - b });
return data[rank - 1];
}
console.log(getLowestByRank(input, 3))
console.log(getLowestByRank(input, 2))
console.log(getLowestByRank(input, 4))
推荐阅读
- next.js - 在 NextJS 中导入使用“文档”的 CSS 辅助函数
- laravel - 在刀片模板文件中转义原始 html
- apple-watch - 在 watchOS 7 中的后台 URLSession 中下载数据
- javascript - 我无法使用 JavaScript 获得 Html.TextBoxFor 值
- sql - 在 SQL Server 2019 中编译本机存储过程时操作数类型冲突
- excel - 将公式粘贴到单元格时如何避免Excel VBA中的@字符
- python - 以 Django 形式传递用户名(并在 html 中查看为不可编辑)
- flutter - 如何使用从 API 调用返回的列表数据
- c++ - 有没有一种通用的方法可以从所有类属性中创建一个元组?
- c# - 超越文化的最佳方式