我是新来的:)
如果有人可以帮我解决问题,我会很高兴:我试图从nums数组中删除当前的最大数字,我无法完成它。 我的代码:
function getNthLargestNum(nums , nth) {
debugger;
var maxNums = [];
for (var i = 0; i < nth; i++) {
var nthMax = 0;
var maxTemp = 0;
for (var j = 0; j < nums.length; j++) {
if (maxTemp < nums[j]) {
maxTemp = nums[j];
//splice();
}
}
nums.splice(maxTemp , maxTemp[j]);
maxNums.push(maxTemp);
}
nthMax = maxTemp;
return nthMax;
}
var nums = [4 , 5 , 6 , 8 , 40 , 60 , 54 , 32 , 8 , 1];
//var nums = [4 , 5 , 6 , 8 , 40 , 3 , 8 , 1];
var res = getNthLargestNum(nums ,3);``
console.log(res);
答案 0 :(得分:0)
splice()
的参数是要开始删除的数组索引,以及要删除的元素数。 maxTemp
是数组值,而不是索引,因为maxTemp[j]
不是数组,所以maxTemp
完全没有意义。
您需要使用另一个变量来保存找到最大元素的索引。每次更新maxTemp
时,您还会使用当前索引更新maxIndex
。然后在拼接中使用它。
似乎不需要maxNums
数组;你推它,但从来没有用它做任何事情。 nthMax
在您返回之前只保留maxTemp
的最后一个值 - 您只需返回maxTemp
本身。
function getNthLargestNum(nums, nth) {
debugger;
var nthMax;
for (var i = 0; i < nth; i++) {
var maxTemp = nums[0];
var maxIndex = 0;
for (var j = 1; j < nums.length; j++) {
if (maxTemp < nums[j]) {
maxTemp = nums[j];
maxIndex = j;
}
}
nums.splice(maxIndex, 1);
}
return maxTemp;
}
var nums = [4, 5, 6, 8, 40, 60, 54, 32, 8, 1];
//var nums = [4 , 5 , 6 , 8 , 40 , 3 , 8 , 1];
var res = getNthLargestNum(nums, 3);
console.log(res);
答案 1 :(得分:0)
如果您只想返回第n个最大数字中的第一个,您可以直接执行此操作:
function getNthLargestNum(nums, nth) {
return nums.slice(0).sort((a, b) => b - a)[nth - 1];
}
var nums = [4, 5, 6, 8, 40, 60, 54, 32, 8, 1];
getNthLargestNum(nums, 3); // 40