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));

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部