我以两种方式实现了一个简单的算法。一种使用 indexOf,另一种使用哈希表。
问题:给定一个任意的赎金票据字符串和另一个包含所有杂志字母的字符串,编写一个函数,如果赎金票据可以从杂志中构造出来,该函数将返回 true;否则,它将返回 false。
第一。时间复杂度为 O(N^2) 是因为我在 ransomNote 中有 N 个字母并且我可以在 indexOf 中进行 N 次搜索吗?
var canConstruct = function(ransomNote, magazine) {
if(magazine.length < ransomNote.length) return false;
const arr = magazine.split("");
for(let i=0; i<ransomNote.length; i++) {
if(arr.indexOf(ransomNote[i]) < 0)
return false;
const index = arr.indexOf(ransomNote[i]);
arr.splice(index, 1);
}
return true;
};
第二个。时间复杂度是多少?哈希表是否使其成为 O(N)?
var canConstruct = function(ransomNote, magazine) {
if(magazine.length < ransomNote.length) return false;
const map = new Map();
for(let i =0; i<magazine.length; i++) {
if(map.has(magazine[i]))
map.set(magazine[i], map.get(magazine[i])+1);
else
map.set(magazine[i], 1);
}
for(let i=0; i<ransomNote.length; i++) {
if(!map.has(ransomNote[i]))
return false;
else {
const x = map.get(ransomNote[i]) - 1;
if(x > 0)
map.set(ransomNote[i], x)
else
map.delete(ransomNote[i]);
}
}
return true;
};
慕妹3146593
相关分类