每日一记之21414

每日一记之21414

四月 14, 2021 本文共计: 330 字 预计阅读时长: 1分钟

简要回顾

昨天的leetcode 350,市面上的解法各有千秋,但是时空复杂度以及内存消耗极高。

下面简单再介绍下,我琢磨出来的思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* [1,2,2,1]
* [1,2]
*/

const intersect = (nums1, nums2) => {
let mark = {};
nums1.forEach(item => {
if (mark[item]) {
mark[item] +=1;
} else {
mark[item] = 1
}
})

return nums2.filter(item => {
if (mark[item]) {
mark[item]--
return true
}
});
}

console.log(intersect([1,2,2,1], [2, 2]))

上面的代码应该比较直观!

新的题目

1
2
3
4
5
6
7
8
9
10
11
12
13
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

# 示例 1
输入:strs = ["flower","flow","flight"]
输出:"fl"

# 示例 2
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var longestCommonPrefix = function(strs) {
if(!strs.length) {
return '';
}
if (strs.length === 1) {
return strs[0];
}
strs.sort((a, b) => a.length - b.length);
let minStr = strs.shift();
for (let i = 0; i< strs.length; i++) {
let point = 0;
if (!minStr) {
break;
}
for (; point <= minStr.length; point++) {
if(minStr.charAt(point) !== strs[i].charAt(point)) { break;}
}

minStr = minStr.substring(0,point);
}

return minStr;
};

谈不上最优解,但是处理边界和大体量数据处理上应该是比较具有优势的。