题目出自LeetCodehttps://leetcode-cn.com
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
- 按照字典序排序,比较是否相等
- 数数字出现的次数 用一个哈希表 最后比较这两个哈希表是否相同
第一种
/** * @param {string} s * @param {string} t * @return {boolean} */ var isAnagram = function(s, t) { let sArr = s.split('').sort().join('') let tArr = t.split('').sort().join('') return sArr == tArr };
两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
- 暴力两重循环
var twoSum = function(nums, target) { for(var i = 0;i<nums.length;i++){ for(var j = 0;j<nums.length;j++){ if(i!==j){ if(nums[i]+nums[j]==target){ var a = []; a.push(i,j); return a; } } } } };
- 建立一个哈希表 循环一个 x 判断target是否在哈希表中
const map = {} const len = nums.length for (let i = 0; i < len; i++) { const targetNum = target - nums[i]; if (targetNum in map) return [map[targetNum], i] map[nums[i]] = i }
- 也可以用排序+左右指针 不过哈希表应该是最优解 只有O(n)
三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
] - 暴力解法三重循环
- 两重循环 枚举a、b c在hash里面找
- 先排序 以升序为例 枚举a 如果b、c在剩下的数组里找,b从最左端,c从最右段 如果a+b+c>0 则c向左移,如果a+b+c<0 则b向右移动