Javascript Hackerrank:哈希表-赎金说明
试图用Javascript解决黑客等级上的此问题: 我希望得到一些帮助,因为我没有通过所有测试用例,我的代码是: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(
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
主要的 您的代码存在以下问题: 你没有逻辑去计算一个词在杂志中出现的次数,这是一个巨大的缺陷 考虑一个例子,杂志:给这个和赎金:给。您的代码将返回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");
}
}