Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Hackerrank:哈希表-赎金说明_Javascript_Algorithm_Hashtable - Fatal编程技术网

Javascript Hackerrank:哈希表-赎金说明

Javascript Hackerrank:哈希表-赎金说明,javascript,algorithm,hashtable,Javascript,Algorithm,Hashtable,试图用Javascript解决黑客等级上的此问题: 我希望得到一些帮助,因为我没有通过所有测试用例,我的代码是: function main() { var m_temp = readLine().split(' '); var m = parseInt(m_temp[0]); var n = parseInt(m_temp[1]); magazine = readLine().split(' '); ransom = readLine().split(

试图用Javascript解决黑客等级上的此问题:

我希望得到一些帮助,因为我没有通过所有测试用例,我的代码是:

function main() {
    var m_temp = readLine().split(' ');
    var m = parseInt(m_temp[0]);
    var n = parseInt(m_temp[1]);
    magazine = readLine().split(' ');
    ransom = readLine().split(' ');
    var hashTable = {};
    var counter = 0;
    for (var i = 0; i < ransom.length; i++) {
        hashTable[i] = ransom[i];
    }
    for (keys in hashTable) {
        if (magazine.hasOwnProperty(keys)) {
            counter +=1;
        } else { 
            counter -=1;
        }
    }
    console.log(counter >= n ? "Yes" : "No");
}

非常感谢

这是我做过的一个版本,它也在检查,以确保你不会多次使用这个词,它不在规范中,但我也无法像从纸上剪下这个词那样多次使用这个词

此外,还要对参数进行一次小范围的健全性检查,以确保计数正确

变量行=[ 6 4, 今天晚上给我一千块, 今天给一千块 ]; 函数读取线{ 返回线。移位; } 主要功能{ var m_temp=readLine.split'; var m=parseIntm_temp[0]; var n=parseIntm_temp[1]; var i; 杂志=读线。拆分“”; ransom=读线。拆分“”; //健康检查。。 如果刀库长度!==m 抛出新错误“弹匣计数错误”; 如果ransem.length!==n 抛出新错误“赎金计数错误”; //把杂志上的所有单词都拼凑成一个散列 var hashTable={}; fori=0;i=n?是:否; }
主要的 您的代码存在以下问题:

你没有逻辑去计算一个词在杂志中出现的次数,这是一个巨大的缺陷

考虑一个例子,杂志:给这个和赎金:给。您的代码将返回Yes,而答案是No,因为杂志中只有一个give

我认为在这里使用自有财产不合适。你只想知道一个词是否出现在杂志上。您可以使用magazine.IncludeHashTable[keys]代替magazine.hasOwnPropertykeys

最后,您应该散列杂志的单词,而不是ransom的单词,并记录每个杂志单词出现的次数

尝试纠正这些问题,您的代码肯定会运行。你可以阅读@Keith的代码


希望对你有帮助

了解测试如何失败是很有用的。除非你想要随机修正,可能正确,也可能不正确。如果问题是这段代码是否正确,答案是否定的。其中一个测试用例有以下输入:17 15 avtq ekpvq z rdvzf m zu bof pfkzl ekpvq pfkzl bof zu ekpvq ekpvq z mz z avtq ekpvq z bof pfkzl pfkzl rdvzf rdvzf avtq ekpvq rdvzf avtq,预期的输出是no,我已经测试过,我也得到了no,但它说它错了。@Keith如果你没有有价值的话。@Keith添加为什么评论的输入?@LeChiffre我正在澄清他的问题..console.logcounter>=n?是:不是;我不认为有任何机会使用计数器>=n。请将其更改为计数器==n@User_Targaryen你认为这样做有什么好处?。。同样,如果我要做一个相等的比较,我自然会使用一个严格的变量==。虽然性能在这里不是问题,但值得指出的是>=比==快,如果略快于==,我认为这将取决于CPU是否能够短路>=逻辑,如果数字改为浮点,相等性检查也会有奇怪的问题。因此,在我看来,如果a==可以被使用,我会选择>=..@User\u Targaryen事实上,编码风格是个性化的,我个人认为>=看起来更好,更符合逻辑&我也认为它也不太可能犯错误=for==。除此之外,这就是OP所拥有的,我正试图尽可能少的改变:一切都被接受!!根据您的代码,计数器永远不可能大于n。所以这绝对不是逻辑。@User\u Targaryen这取决于你选择什么,我可以看出你来自哪里,但我喜欢>=,的安全网,
try to use below code to check for correctness

static void checkMagazine(string[] magazine, string[] note)
        {
            Boolean isCorrect = true;
            for (int i = 0; i < note.Length; i++)
            {

                if (magazine.Contains(note[i]))
                {
                    if (magazine.Count(f => f == note[i]) != note.Count(f => f == note[i]))
                    {
                        isCorrect = false;
                        break;
                    }
                }
                else
                {
                    isCorrect = false;
                    break;
                }

            }
            if (isCorrect)
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }
        }