共计 4150 个字符,预计需要花费 11 分钟才能阅读完成。
背景
记录一下,工作之所刷的 leetcode 题目。
01.twoSum
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {for (var i = 1; i < nums.length; i++) {const idx = nums.indexOf(target - nums[i]);
if (idx > -1 && idx !== i) {return [i, idx];
}
}
return [];};
15.threeSum
/**
* @param {number[]} nums
* @return {number[][]}
*/
// Given array nums = [-1, 0, 1, 2, -1, -4],
// A solution set is:
// [// [-1, 0, 1],
// [-1, -1, 2]
// ]
var threeSum = function (nums) {const result = [];
const length = nums.length;
if (length === 3) return [nums];
var sortedNums = num.sort((a, b) => a - b);
for (let i = 0; i < l; i++) {if (i !== 0 && sortedNums[i] === sortedNums[i - 1]) continue;
var j = i + 1;
var k = l - 1;
while (j < k) {var sum = temp[i] + temp[j] + temp[k];
if (sum === 0) {res.push([temp[i], temp[j], temp[k]]);
while (j++ < k && temp[j - 1] === temp[j]) {/* do nothing*/}
while (k-- > j && temp[k] === temp[k + 1]) {/* do nothing*/}
} else if (sum < 0) {j++;} else {k--;}
}
}
return result;
};
70.climbStairs
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function (n) {const array = [0, 1, 2];
for (var i = 3; i <= n; i++) {array[i] = array[i - 1] + array[i - 2];
}
return array[n];
};
283.moveZeroes
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
var validNumberCount = 0;
for (var i = 0; i < nums.length; i++) {if (nums[i] !== 0) {nums[validNumberCount] = nums[i];
validNumberCount++;
}
}
for (var j = validNumberCount; j < nums.length; j++) {nums[j] = 0;
}
return nums;
};
11.maxArea
/**
* @param {number[]} height
* @return {number}
*/
// solution 1: 暴力双循环
var maxArea = function (height) {
var max = 0;
for (var i = 0; i < height.length; i++) {for (var j = i + 1; j < height.length; j++) {max = Math.max(max, (j - i) * Math.min(height[i], height[j]));
}
}
return max;
};
// solution 1: 双指针
var maxArea = function (height) {
var max = 0;
var left = 0, right = height.length - 1;
while (left < right) {var area = (right - left) * Math.min(height[left], height[right]);
max = Math.max(max, area);
if (height[left] < height[right]) {left++;} else {right--;}
}
return max;
};
84.largestRectangleArea
/**
* @param {number[]} heights
* @return {number}
*/
// ## 柱状图中最大的矩形
// solution1: 暴力循环
var largestRectangleArea = function (heights) {
var maxArea = 0;
for (var i = 0; i < heights.length; i++) {for (j = i; j < heights.length; j++) {
var minHeight = Number.MAX_VALUE;
for (var k = i; k <= j; k++) {minHeight += Math.min(minHeight, heights[k]);
}
maxArea = Math.max(maxArea, minHeight * (j - i + 1));
}
}
return maxArea;
};
// solution2: 最小栈
// TODO
239.maxSlidingWindow
/*
* @lc app=leetcode.cn id=239 lang=javascript
*
* [239] 滑动窗口最大值
*/
// @lc code=start
/**
* @param {number[]} nums
* @param {number} k
* @return {number[]}
*/
// 解法 1: 暴力
var maxSlidingWindow = function (nums, k) {
var length = nums.length;
if (!length) return [];
var res = [];
for (var i = 0; i < length - (k - 1); i++) {
let max = Number.MIN_SAFE_INTEGER;
for (j = i; j < i + k; j++) {max = Math.max(max, nums[j]);
}
res.push(max);
}
return res;
};
// @lc code=end
289.rotateArray
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
// solution 1: 暴力, 每次移动一个
var rotate = function (nums, k) {
let previous;
for (var i = 0; i < k; i++) {previous = nums[nums.length - 1];
for (var j = 0; j < nums.length; j++) {[previous, nums[j]] = [nums[j], previous];
}
}
};
88.mergeTwoArray
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
// 解法 1: 合并后排序
var merge = function (nums1, m, nums2, n) {for (var i = 0; i < nums2.length; i++) {nums1[m + i] = nums2[i];
}
nums1.sort((a, b) => a - b);
};
// 解法 2: 判断元素大小, 直接插入
var merge = function (nums1, m, nums2, n) {
let length = m + n;
while(n > 0) {if(m <= 0) { // num1 中的元素已经排完,剩下的 nums 直接放进来
nums1[--length] = nums2[--n];
continue;
}
nums1[--length] = nums1[m-1] > nums2[n-1] ? nums1[--m] : nums2[--n];
}
};
21.mergeTwoLists
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function (l1, l2) {if (l1 === null) return l2;
if (l2 === null) return l1;
if (l1.val < l2.val) {l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {l2.next = mergeTwoLists(l2.next, l1);
return l2;
}
};
42.trap 接雨水
/**
* @param {number[]} height
* @return {number}
*/
var trap = function (height) {
let capacity = 0;
const stack = [];
for (let i = 0; i < height.length; i++) {while (stack.length !== 0 && height[stack[stack.length - 1]] < height[i]) {let cur = stack[stack.length - 1];
stack.pop();
if (stack.length === 0) {break;}
let l = stack[stack.length - 1];
let r = i;
capacity += (Math.min(height[l], height[r]) - height[cur]) * (r - l - 1);
}
stack.push(i);
}
return capacity;
};
正文完