🔥 LeetCode 热题 HOT 100 JS版本
var twoSum = function (nums, target) {
let map = new Map();
for (let i = 0; i < nums.length; i++) {
if (map.has(nums[i])) {
return [i, map.get(nums[i])]
} else {
map.set(target - nums[i], i)
}
}
return []
};
var addTwoNumbers = function (l1, l2) {
let newList = new ListNode(0);
let p1 = l1, p2 = l2, cur = newList;
let isExtra = 0;
while (p1 || p2) {
let val1 = p1 ? p1.val : 0
let val2 = p2 ? p2.val : 0
let val = (val1 + val2 + isExtra) % 10
cur.next = new ListNode(val)
isExtra = ((val1 + val2 + isExtra) / 10) >> 0
p1 && (p1 = p1.next)
p2 && (p2 = p2.next)
cur = cur.next
}
if (isExtra > 0) {
cur.next = new ListNode(isExtra)
}
return newList.next
};
var lengthOfLongestSubstring = function (s) {
if (s.length <= 1) return s.length;
let left = 0, right = 1, temp = '', max = 0;
while (right < s.length) {
temp = s.slice(left, right)
if (temp.indexOf(s[right]) > -1) {
left++
continue
} else {
right++
}
max = Math.max(max, right - left)
}
return max
};
var findMedianSortedArrays = function (nums1, nums2) {
nums1.length > nums2.length && ([nums1, nums2] = [nums2, nums1]);
const m = nums1.length, n = nums2.length;
let low = 0, high = m;
while (low <= high) {
const i = low + Math.floor((high - low) / 2),
j = Math.floor((m + n + 1) / 2) - i;
const maxLeftA = i === 0 ? -Infinity : nums1[i - 1],
minRightA = i === m ? Infinity : nums1[i];
const maxLeftB = j === 0 ? -Infinity : nums2[j - 1],
minRightB = j === n ? Infinity : nums2[j];
if (maxLeftA <= minRightB && maxLeftB <= minRightA) {
return(m + n) & 1
? Math.max(maxLeftA, maxLeftB)
: (Math.max(maxLeftA, maxLeftB) + Math.min(minRightA, minRightB)) / 2
} else if (maxLeftA > minRightB) {
high = i - 1
} else {
low = low + 1
}
}
};
5. 最长回文子串
var isPalindromic = function (s) {
let len = s.length;
for (let i = 0; i < len / 2; i++) {
if (s.charAt(i) != s.charAt(len - i - 1)) {
return false;
}
}
return true;
};
const longestPalindrome = (s) => {
let max = 0, len = s.length, ans = '';
for (let i = 0; i < len; i++) {
for (let j = i + 1; j <= len; j++) {
let test = s.substring(i, j);
if (isPalindromic(test) && test.length > max) {
ans = s.substring(i, j);
max = Math.max(max, ans.length)
}
}
}
return ans;
}
const longestPalindrome = (s) => {
let res = ''
for (let i = 0; i < s.length; i++) {
const s1 = palindrome(s, i, i)
const s2 = palindrome(s, i, i + 1)
res = res.length <= s1.length ? s1 : res
res = res.length <= s2.length ? s2 : res
}
return res
}
const palindrome = (s, l, r) => {
while (l >= 0 && r < s.length && s[l] === s[r]) {
l--;
r++
}
return s.slice(l + 1, r)
}
const longestPalindrome = (s) => {
let n = s.length, res = '';
let dp = Array.from(new Array(n), () => new Array(n).fill(0))
for (let i = n - 1; i >= 0; i--) {
for (let j = i; j < n; j++) {
dp[i][j] = s[i] == s[j] && (j - i < 2 || dp[i + 1][j - 1])
if (dp[i][j] && j - i + 1 > res.length) {
res = s.substring(i, j + 1)
}
}
}
return res
}