面試之js演算法類

2021-10-10 01:16:51 字數 4733 閱讀 4676

計算字串**現次數最多的字元及其次數

給定兩個陣列,找出第二個陣列沒有的數字

陣列的去重

利用math求最大值

9 * 9 乘法表

寫乙個千位分隔符新增函式,千位分隔符可以手動設定,預設文逗號

如何讓 nodelist 使用array中的map方法

不知道大小,設定,如果是長的就橫向排列,短的就縱向排列,怎麼實現?

演算法題:有乙個長度為n一1的陣列,包含1一n中不重複的亂序的數,求尋找範圍內不在陣列中的數,考慮空間占用,效能優化,溢位等情況,至少寫兩個演算法

編寫乙個方法去掉乙個陣列的重複元素

function

getdata()

})return

"星期"

+ res;

} console.

log(

getdata()

);

let arr =[1

,4,88

,22,444,2

,9]for

(let i =

0; i < arr.length -

1; i++)}

} console.

log(

"arr"

, arr)

;// [1, 2, 4, 9, 22, 88, 444]

var example =[8

,94,15

,88,55

,76,21

,39];

function

selectsort

(arr)

} temp = arr[i]

; arr[i]

= arr[minindex]

; arr[minindex]

= temp;

} console.

timeend

('選擇排序耗時');

return arr;

} console.

log(

selectsort

(example)

);

03:遍歷物件,得到字元出現的次數!

// 計算字串**現次數最多的字元及其次數

let str =

"aafskjhafaxaf"

;let obj =

//用於儲存這個出現的字元 出現的話 就是裡面的屬性+1 否則的話 就新增該屬性

// 字串中的某個字元是否存在 物件之中! 存在就+1 不存在就新增該字元屬性!

let arr = str.

split(""

) arr.

reduce

(function

(pre, cur)

else})

for(

var k in obj)

// 給定兩個陣列,找出第二個陣列沒有的數字

let arr1 =[1

,3,4

,6,0

]let arr2 =[0

,3,5

,1]//也就是拿陣列2 去陣列1之中查詢是否存在這個數字 過濾

let newarr = arr1.

filter

(item => arr2.

indexof

(item)

===-1)

console.

log(newarr)

;//[4,6]

//陣列的去重

let arr =[1

,2,34

,55,22

,2,1

,3,22

,66,2

]let

set=

newset

(arr)

console.

log(

[...

set]);

//[1, 2, 34, 55, 22, 3, 66]

//方法2

let newarr =

for(

let i =

0; i < arr.length; i++)}

console.

log(newarr)

;//[1, 2, 34, 55, 22, 3, 66]

//最大值

let arr =[1

,2,3

,2,7

,999,2

];let max = math.max.

(null

, arr)

; console.

log(max)

;//999

let start =

""for

(let i =

1; i <

10; i++

) * $ = $`);

start +=`$

* $= $

` +"\t";}

start +=

"\n"

} console.

log(start)

;

let str =

2589.65

function

joinq

(str, operate)

)+(?!\d))/g

, operate)

res = res +

"."+ arr[1]

;return res

}console.

log(

joinq

(str,

"-"));

console.

log(

joinq

(str,

",")

);

>

>

我是li

>

>

我是li

>

>

我是li

>

ul>

>

let lis = document.

queryselectorall

("ul li"

)// console.log(lis); //nodelist(3)

//方法1 把這個節點集合 轉化為陣列

let res = array.

from

(lis)

res.

map(item => console.

log(item)

)//方法2:

let newarr =

for(

let i =

0; i < lis.length; i++

) newarr.

map(item => console.

log(item)

)script

>

方式2:

當n不太大時,可以考慮求和。先算出1~n的所有數的和,然後減去陣列**現的所有自然數的和。時間複雜度為o(n),空間複雜度o(1)。這種方法的缺點是n不能太大,n比較大時,求和容易溢位。

用位圖。從頭到尾的掃瞄整個陣列,把出現的數相應的位設定為1.然後再掃瞄位圖,找出不為1的那一位,即為要找的數。這種方法的時間複雜度為o(n),空間複雜度為o(n)。

異或有個很巧妙的地方:同一變數和該變數與另一變數的異或值的異或等於這個變數自身。所以我們可以把1~n的所有數異或,再把陣列**現的所有數異或,然後再把這兩個異或的結果異或,最後得到的值即為我們要找的值。這樣時間複雜度為o(n),空間複雜度為o(1)。在空間上比第二種方法要好,而且不會出現第一種方法中所說的溢位問題。

最簡單的去重方法, 實現思路:新建一新陣列,遍歷傳入陣列,值不在新陣列就加入該新陣列中;注意點:判斷值是否在陣列的方法「indexof」是ecmascript5 方法,ie8以下不支援,需多寫一些相容低版本瀏覽器**,原始碼如下:

// 最簡單陣列去重法

function

unique1

(array)

return n;

}// 判斷瀏覽器是否支援indexof ,indexof 為ecmascript5新方法 ie8以下(包括ie8, ie8只支援部分ecma5)不支援if(

!array.prototype.indexof)

for(

var i =

0, len =

this

.length; i < len; i++)}

return result;

}}

// 速度最快, 佔空間最多(空間換時間)

function

unique2

(array)

, r =

, len = array.length, val, type;

for(

var i =

0; i < array.length; i++

)else

if(n[val]

.indexof

(type)

<0)

}return r;

}

JS面試常見演算法題

學習資料結構與演算法對於工程師去理解和分析問題都是有幫助的。如果將來當我們面對較為複雜的問題,這些基礎知識的積累可以幫助我們更好的優化解決思路。下面羅列在前端面試中經常撞見的幾個問題吧。1.統計乙個字串出現最多的字母和出現的次數 第一種方法 var str abcdeddd var n for va...

JS面試常見演算法題

1.統計乙個字串出現最多的字母和出現的次數 第一種方法 var str abcdeddd var n for var i 0 i str.length i else console.log n var max 0 var maxchar null for var key in n var mores...

面試之css和js

function.prototype.mycall function context 當傳入的context為基礎型別時,直接掛載fn會報錯,因為基礎型別沒有屬性這一說 if typeof context object context new object context context conte...