从前往后循环每一个元素
for循环
for (let i=0;i<arr.length;i++) {
console.log(arr[i]);
}
// arr = [1,2,3,4] => 1,2,3,4
从后往前循环每一个元素
while 循环
let len = arr.length;
while(len--) {
console.log(arr[len])
}
// arr = [1,2,3,4] => 4,3,2,1
left,right 双指针
从前往后循环每一个元素,并且同时从后往前循环每一个元素
let left = 0,right = arr.length-1;
while(left < right) {
console.log(arr[left],arr[right])
left++;
right--;
}
// arr [1,2,3,4,5,6] => 1 6, 2 5, 3 4
单指针
使用单指针记录为元素位置
let index=0;
for (let i=0;i<arr.length;i++) {
if (arr[i] === 0) {
index = i
}
}
使用map对象
只要有关需要记录元素重复出现次数的题,都可使用map对象来处理。例如记录每个元素出现的次数,或者去重。
// 记录每个元素出现的次数
let map = new Map();
for(let i=0;i<arr.length;i++) {
if (map.has(arr[i])) {
map.set(arr[i],map.get(arr[i])+1)
} else {
map.set(arr[i],1)
}
}
返回原地数组
不改变原数组引用地址,所以只能对原数组进行操作,不能对数组重新赋值。
- 可以使用可直接改变原数组方法 splice、push、pop、unshift、shift
- 可以调整元素位置,例如两个元素位置互换
递归
当下一次计算需要使用到上一次的计算结果时,使用递归。将复杂问题简单化,先写出一次递归方法,然后再考虑递归条件。
算法本质
算法本质是将复杂问题简单化的过程,最终是需要将复杂问题还原到简单的for循环以及,加减法运算。不要一开始就将一个问题往复杂了想。