【问题标题】:10 Days of Javascript - Day 3: Arrays - HackerRank [duplicate]Javascript 10 天 - 第 3 天:数组 - HackerRank [重复]
【发布时间】:2020-10-10 08:47:04
【问题描述】:

好的,我正在使用 HackerRank 的 10 天 Javascript 学习 Javascript,我在第 3 天:其中包括数组问题。 当前的问题包括从两个输入返回第二高的值,第一个是数组上的项目数量,第二个是将保存在“nums”数组中的值的数量。 我使用下面的代码完成了它,但仅使用以下输入案例,如果我为不同的输入尝试相同的代码(见最后),它会返回给我“错误答案”。 您可以在此处阅读有关该问题的更多信息: https://www.hackerrank.com/challenges/js10-arrays/problem

'use strict';

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', inputStdin => {
    inputString += inputStdin;
});

process.stdin.on('end', _ => {
    inputString = inputString.trim().split('\n').map(string => {
        return string.trim();
    });

    main();    
});

function readLine() {
    return inputString[currentLine++];
}

/* This is the code that I wrote */
function getSecondLargest(nums) {
    nums.sort();
    let maxValue = Math.max(...nums);
    let count = 0;
    for (let i=0;i<nums.length;i++){
        if (nums[i]==maxValue){
            count++;
        }
    }
    let secondMaxValue = nums[(nums.lastIndexOf(maxValue)-count)];
    return secondMaxValue;
}


function main() {
    const n = +(readLine());
    const nums = readLine().split(' ').map(Number);

    console.log(getSecondLargest(nums));
}
5

2 3 6 6 5

但是当我尝试使用以下输入的相同代码时,我得到“错误答案”

10

1 2 3 4 5 6 7 8 9 10

有什么解释或建议吗?

【问题讨论】:

  • 请查看minimal reproducible example 发布代码指南和edit 相应问题。理想情况下,您从示例中删除所有与输入相关的代码,并通过硬编码输入显示失败。此外,显示的代码中绝对没有任何内容可以打印“错误答案”文本 - 最好确保您看到的输出/错误消息与帖子中代码的输出匹配。
  • stackoverflow.com/a/68708045/12401517 访问此链接了解此问题

标签: javascript node.js


【解决方案1】:

问题是sort() 函数。 javascript 的sort() 方法将按以下方式对整数数组进行排序。

[1,10,2,3,4,5,6,7,8,9]

您需要使用以下方法对其进行排序,

nums = nums.sort(function(a,b) {
       return (+a) - (+b);
    });

已经问过的排序问题 here

【讨论】:

  • 您好,我遇到了同样的问题,但我使用了不同的技术。我首先对数组进行排序,然后使用 Set 使数组具有唯一元素。然后我记录了倒数第二个元素。从逻辑上讲,它应该可以工作。这是我的代码的小提琴链接:jsfiddle.net/geomukkath/b3ov1yje/21我在hackerrank中得到未定义但它在小提琴中正常工作。在hackerrank中,我得到了结果并且未定义。
【解决方案2】:

您只需要对数字进行排序并获得第二个索引。 按照代码。

function getSecondLargest(nums) {
   nums.sort((a, b) => {
     return b - a;
   }); 
   return nums[1]  
}

function getSecondLargest(nums) {
  nums.sort((a, b) => Math.sign(b - a));
  return nums[1]  
}

console.log(getSecondLargest([1,2,3,4,5,6,7,8,9,10]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多