從前往后循環(huán)每一個(gè)元素
for循環(huán)
for (let i=0;i<arr.length;i++) {
console.log(arr[i]);
}
// arr = [1,2,3,4] => 1,2,3,4
從后往前循環(huán)每一個(gè)元素
while 循環(huán)
let len = arr.length;
while(len--) {
console.log(arr[len])
}
// arr = [1,2,3,4] => 4,3,2,1
left,right 雙指針
從前往后循環(huán)每一個(gè)元素,并且同時(shí)從后往前循環(huán)每一個(gè)元素
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對(duì)象
只要有關(guān)需要記錄元素重復(fù)出現(xiàn)次數(shù)的題,都可使用map對(duì)象來處理。例如記錄每個(gè)元素出現(xiàn)的次數(shù),或者去重。
// 記錄每個(gè)元素出現(xiàn)的次數(shù)
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)
}
}
返回原地?cái)?shù)組
不改變?cè)瓟?shù)組引用地址,所以只能對(duì)原數(shù)組進(jìn)行操作,不能對(duì)數(shù)組重新賦值。
- 可以使用可直接改變?cè)瓟?shù)組方法 splice、push、pop、unshift、shift
- 可以調(diào)整元素位置,例如兩個(gè)元素位置互換
遞歸
當(dāng)下一次計(jì)算需要使用到上一次的計(jì)算結(jié)果時(shí),使用遞歸。將復(fù)雜問題簡單化,先寫出一次遞歸方法,然后再考慮遞歸條件。
算法本質(zhì)
算法本質(zhì)是將復(fù)雜問題簡單化的過程,最終是需要將復(fù)雜問題還原到簡單的for循環(huán)以及,加減法運(yùn)算。不要一開始就將一個(gè)問題往復(fù)雜了想。