背景
时间复杂度
算法的执行时间与输入值之间的关系。
参考:算法中七种常见的时间复杂度 - 掘金
参考视频:1. 算法的时间复杂度_哔哩哔哩_bilibili
空间复杂度
算法的存储空间与输入值之间的关系。
参考:2. 算法的空间复杂度_哔哩哔哩_bilibili
二、数据结构
2.1 数组
练习题:485、283、27
var findMaxConsecutiveOnes = function(nums) {
let maxCount = 0, count = 0;
const n = nums.length;
for (let i = 0; i < n; i++) {
if (nums[i] === 1) {
count++;
} else {
maxCount = Math.max(maxCount, count);
count = 0;
}
}
maxCount = Math.max(maxCount, count);
return maxCount;
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/max-consecutive-ones/solution/zui-da-lian-xu-1de-ge-shu-by-leetcode-so-252a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第一种方法:一行代码
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
nums.sort((a,b) => b? 0: -1)
};
作者:Slow_sheep
链接:https://leetcode.cn/problems/move-zeroes/solution/jsyi-xing-dai-ma-by-prefixa-4bfu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第二种方法:
var moveZeroes = function(nums) {
//获取数组长度
let len = nums.length;
//循环遍历数组
for(let i =0;i<len;i++){
//当数组哪个位置是0 ,就删除这个这个位置的元素,然后在末尾补 0
//从而就达到了 把所有0移动到数组末尾的要求且保持的非零元素的相对顺序
if(nums[i]==0){
nums.splice(i,1)
nums.push(0)
//当为0的元素删除后,下一个元素就会前进一位占据该位置,所以要从该位置在进行判断
i--
//当移动到末尾的元素,就不用再一次进行遍历了,所以遍历的长度要减去1位
len--
}
}
return nums
}
作者:ZGLRunnning
链接:https://leetcode.cn/problems/move-zeroes/solution/by-zglrunnning-hq0c/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第一种方法:
var removeElement = function(nums, val) {
for(let i=0;i<nums.length;i++){
if(nums[i] == val){
nums.splice(i,1);
i--;
}
}
return nums.length;
};
作者:intelligent-i3ouman4ad
链接:https://leetcode.cn/problems/remove-element/solution/jsjie-ti-si-lu-qing-xi-ming-liao-by-inte-6v04/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第二种:双指针算法
var removeElement = function(nums, val) {
const n = nums.length;
let left = 0;
for (let right = 0; right < n; right++) {
if (nums[right] !== val) {
nums[left] = nums[right];
left++;
}
}
return left;
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/remove-element/solution/yi-chu-yuan-su-by-leetcode-solution-svxi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2 链表
2.3 队列
2.4 栈
2.5 哈希表
2.6 集合
2.7 树
1、两数之和
解题代码:
var twoSum = function(nums, target) {
const map = new Map();
for(let i = 0, len = nums.length;i < len;i++) {
if(map.has(target - nums[i])) {
return [map.get(target - nums[i]), i];
}
map.set(nums[i], i);
}
return [];
};
作者:jplusztx
链接:https://leetcode.cn/problems/two-sum/solution/javascript-by-jplusztx-fbb9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2、两数相加
力扣
3、20. 有效的括号
4、21. 合并两个有序链表
var mergeTwoLists = function(l1, l2) {
if (l1 === null) {
return l2;
} else if (l2 === null) {
return l1;
} else if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
5、53. 最大子数组和
function Status(l, r, m, i) {
this.lSum = l;
this.rSum = r;
this.mSum = m;
this.iSum = i;
}
const pushUp = (l, r) => {
const iSum = l.iSum + r.iSum;
const lSum = Math.max(l.lSum, l.iSum + r.lSum);
const rSum = Math.max(r.rSum, r.iSum + l.rSum);
const mSum = Math.max(Math.max(l.mSum, r.mSum), l.rSum + r.lSum);
return new Status(lSum, rSum, mSum, iSum);
}
const getInfo = (a, l, r) => {
if (l === r) {
return new Status(a[l], a[l], a[l], a[l]);
}
const m = (l + r) >> 1;
const lSub = getInfo(a, l, m);
const rSub = getInfo(a, m + 1, r);
return pushUp(lSub, rSub);
}
var maxSubArray = function(nums) {
return getInfo(nums, 0, nums.length - 1).mSum;
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/maximum-subarray/solution/zui-da-zi-xu-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
其他解法:
6、66. 加一
7、爬楼梯
8、
9、
10、
11、
解法:
12、环形链表
13、相交链表
14、打家劫舍
解法:
15、反转链表
16、 存在重复元素
18、 存在重复元素2
19、移动零
20、
21、
以上参考链接地址:Leetcode刷题 704. 二分查找 Binary Search_哔哩哔哩_bilibili
有专门js的部分