两数之和 链接用一个对象存储遍历过的值键存具体数字值存索引如果存在就取到返回没有就把当前遍历的对象存进去接着遍历var twoSum function(nums, target) { let len nums.length; let obj {} for(let i 0;ilen;i){ let otherNum target - nums[i]; let index obj[otherNum] if(index ! undefined){ return [index,i] } else { obj[nums[i]] i } } };三数之和 链接// 解题思路先将给定数据排序然后默认第一个数一定小于0,不然三数之和不能为0然后从第一个数开始i1为第二个数最后一个为第三个数如果三个数字加起来小于0则将第二个数往后移如果大于0则将第三个数往后移如果等于0则将三个数加入结果数组然后继续移动第三个数直到两个指针相遇然后移动第一个数重复以上步骤直到第一个数遍历完 // 遍历数组如果当前数字大于0则跳出循环如果当前数字小于等于前一个数字则跳过当前数字避免重复 // 遍历数组如果当前数字大于0则跳出循环如果当前数字小于等于前一个数字则跳过当前数字避免重复var threeSum function(nums) { let result [] let len nums.length; if(!nums || len 3) return [] nums.sort((a,b)a-b); for(let i 0; i len;i){ if(nums[i]0) break; if(i0 nums[i-1] nums[i]) continue; let L i 1; let R len - 1; while(L R){ const sum nums[i] nums[L] nums[R] if(sum 0){ result.push([nums[i],nums[L],nums[R]]); while(L R nums[L] nums[L1]) L while(LR nums[R] nums[R-1]) R-- L; R--; } else if(sum 0) L; else if(sum 0)R--; } } return result };反转字符串 链接// 双指针法 var reverseString function(s) { let len s.length; for(let i 0,j len -1 ;i j; i , j--){ [s[i],s[j]] [s[j],s[i]] } return s }; // 内置方法 s.reverse()有效括号链接var isValid function(s) { let len s.length; if(len % 2 !0 ){ return false; } let length len / 2; for (let i 0; i length; i) { s s.replace((), ); s s.replace({}, ); s s.replace([], ); } return s.length 0; };// 利用栈的思想 var isValid function(s) { let len s.length; if(len % 2 !0 ){ return false } let stack [] let map{asdas (:), [:], {:} } for(const x of s){ if(x in map){ stack.push(x) continue; } if(map[stack.pop()] ! x) return false } return !stack.length };最长回文子串合并两个有序链表无重复字符的最长子串单词搜索最小路径和https://leetcode.cn/company/synapsor/?favoriteSlugsynapsor-all