1.两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]
var twoSum = function(nums, target) {
for(var i = 0;i<nums.length;i++){
for(var j = i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
return [i,j]
}
}
}
return [-1,-1]
};
2.字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
var groupAnagrams = function(strs) {
//创建一个Map实例
var m = new Map();
for (var str of strs) {
var k = str.split("").sort().join(",");
if (!m.has(k)) {
m.set(k, []);
}
m.get(k).push(str);
}
//return Array.from(m.values());
return [...m.values()];
};
3.最长连续序列
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1] 输出:9
var a = (nums) => {
var maxlength = 1;
var start = 0;
///nums = Array.from(new Set(nums)).sort();
nums = [...new Set(nums)].sort((a, b) => {
return a - b;
});
for (var i = 0; i < nums.length; i++) {
if (nums[i] - nums[i - 1] === 1) {
maxlength = Math.max(maxlength, i - start + 1);
} else {
start = i;
}
}
return maxlength;
};
var nums = [100, 4, 200, 1, 3, 2];
console.log(a(nums));
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 【LeetCode热题100】哈希
发表评论 取消回复