一、解法:双指针——快慢指针
- Leetcode 26 删除排序数组中的重复项
解题思路:
两个指针都指向数组的一个数,一个指针用来顺序遍历,一个指针用来更新数组。 - 初始化指针。
- 遍历,如果当前项大于更新数组的指针指向的项就更新数组,让更新指针向下走一位。
- 返回数组长度
var removeDuplicates = function(nums) {
if(nums.length === 0) return 0; // 边界
let fast = 0, slow = 0; // 两个指针
for(let fast=0; fast < nums.length; fast++) {
if (nums[i] > nums[j]) {
slow++;
nums[j] = nums[i];
}
}
return slow + 1;
};
二、解法:贪心 - Leetcode 122 卖股票的最佳时机
解题思路:
贪心即局部最优,见好就收,在每次子问题的时候都取最优解以期待整体最优。 - 新建 1个变量用来统计总记录
- 遍历价格数组,如果当前价格比昨天高就在昨天买今天卖,否则就不进行交易。
- 返回利润之和
var maxProfit = function(prices) {
let profit = 0;
for (let i = 1; i < prices.length; i+=1) {
if (prices[i] > prices[i - 1]) {
profit += prices[i] - prices[i-1]
}
}
return profit;
};
三、解法:纯数组转换 - Leetcode 189 旋转数组
解题思路:把数组末尾的数截去后放到首部
注意要把截取数字跟数组的长度取余
var rotate = function(nums, k) {
const length = nums.length
k = k % nums.length;
let addArr = nums.splice(length - k, k);
return nums.unshift(...addArr)
};
四、解法:哈希表 - Leetcode 217 存在重复元素
解题思路:
用空间换时间,遍历数组如果数组中存在就返回 true,如果不存在就把当前值挂到数组里。
var containsDuplicate = function(nums) {
let map = new Map();
for(let i of nums){
if(map.has(i)){
return true;
}else{
map.set(i, 1);
}
}
return false;
};
网友评论