数组
👉 【LeetCode 直通车】:674 最长连续递增序列(简单)
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var findLengthOfLCIS = function(nums) {
let max = 1, l = 0, r = 1;
const len = nums.length
while(l < r && r < len) {
if(nums[r] > nums[r - 1]) {
max = Math.max(max, r - l + 1);
r++;
} else {
l = r;
r++;
}
}
return max;
};
👉 【LeetCode 直通车】:26 删除有序数组中的重复项(简单)
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
let cur = new Set();
let j = 0
while(j < nums.length) {
let val = nums[j]
if(!cur.has(val)) {
cur.add(val)
j++
} else {
nums.splice(j, 1)
}
}
};
👉 【LeetCode 直通车】:1 两数之和(简单)
javascript
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let hash = {};
for(let i = 0; i < nums.length; i++) {
let res = target - nums[i];
if(hash[nums[i]] !== undefined) return [hash[nums[i]], i];
hash[res] = i;
}
};
👉 【LeetCode 直通车】:167 两数之和 II - 输入有序数组(简单)
同上
👉 【LeetCode 直通车】:15 三数之和(中等)
javascript
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
nums.sort((a, b) => a-b);
let res = [];
let len = nums.length;
for(let i =0; i < len - 2; i++) {
if(i> 0 &&nums[i] ===nums[i-1]) {
continue
}
let target = 0 - nums[i];
let j = i+1, k = len -1
while( j < k) {
if( j > i+1 && nums[j] === nums[j-1]) {
j++;
continue
}
if( k < len-1 && nums[k] === nums[k+1]) {
k--;
continue
}
if(nums[j] + nums[k] === target) {
res.push([nums[i], nums[j], nums[k]])
j++;
k--;
} else {
if(nums[j] + nums[k] < target) {
j++
} else {
k--
}
}
}
}
return res;
};
👉 【LeetCode 直通车】:18 四数之和(中等)
👉 【LeetCode 直通车】:55 跳跃游戏(中等)
javascript
/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function(nums) {
const len = nums.length;
let cur =len -1;
for(let i = len -2; i >= 0; i--) {
if(nums[i] >= cur - i) {
cur = i
}
}
return cur === 0
};
👉 【LeetCode 直通车】:45 跳跃游戏 II(中等)
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var jump = function(nums) {
const len = nums.length;
let setp = 0;
let end = 0;
let max = 0;
// 遍历每个节点,记录 max 为上次步数所能到达的下一个节点的最远,增加一步并更新 end 为 max
for(let i = 0; i < len-1; i++) {
max = Math.max(max, i + nums[i]);
if(i === end) {
end = max;
setp++
}
}
return setp
};
👉 【LeetCode 直通车】:11 盛最多水的容器(中等)
javascript
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
let max = 0, len = height.length, l = 0, r = len -1;
while(l < r) {
let h = height[l] > height[r] ? height[r] : height[l];
let w = r - l;
max = Math.max(max, h * w);
// 移动小的面积可能增大 移动大的面积一定不会增大
if(height[l] < height[r]) {
l++
} else {
r--
}
}
return max
};
👉 【LeetCode 直通车】:4 寻找两个正序数组的中位数(困难)
👉 【LeetCode 直通车】:354 俄罗斯套娃信封问题(困难)