1. 两数之和
let twoSum = (nums, target) => {
let targetMap = new Map()
for (let i = 0; i < nums.length; i++) {
const key = target - nums[i]
if (targetMap.has(key)) {
return [targetMap.get(key), i]
}
targetMap.set(nums[i], i)
}
2. 两数相加
var addTwoNumbers = function (l1, l2) {
let head = new ListNode(0);
let carry = 0;
let curr = head;
while (l1 || l2) {
let x = (l1) ? l1.val : 0;
let y = (l2) ? l2.val : 0;
let sum = x + y + carry;
carry = (sum >= 10) ? 1 : 0;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (l1) l1 = l1.next;
if (l2) l2 = l2.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return head.next;
};
3. 无重复字符的最长子串
var lengthOfLongestSubstring = function(s) {
let res = []
let max = 0
for (let str of s) {
while (res.includes(str)) {
res.shift()
}
res.push(str)
max = Math.max(max,res.length)
}
return max
};
4. 寻找两个正序数组的中位数
var findMedianSortedArrays = function(nums1, nums2) {
let result = []
result = nums1.concat(nums2)
if(result.length == 1){
return result[0]
}
result.sort((a,b) => a-b)
if( result.length%2 != 0){
return result[Math.floor(result.length/2)]
}
else{
return (result[result.length/2]+result[result.length/2-1])/2
}
}
5. 最长回文子串
var longestPalindrome = function(s) {
if (s.length<2){
return s
}
let res = ''
for (let i = 0; i < s.length; i++) {
helper(i, i)
helper(i, i + 1)
}
function helper(m, n) {
while (m >= 0 && n < s.length && s[m] == s[n]) {
m--
n++
}
if (n - m - 1 > res.length) {
res = s.slice(m + 1, n)
}
}
return res
};