劍指offer js 其中10題

2021-10-07 06:47:15 字數 3288 閱讀 9046

11.(進製位運算)輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

function

numberof1

(n)return count;

}

12.(正負數迴圈)給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

保證base和exponent不同時為0

(js是弱型別語言,沒有double、int之分)

function

power

(base, exponent)

return x;

}else

return x;

}}

13.(陣列)輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

(暴力解法,新建乙個空陣列,先把技奇數的push進去,再把偶數push進去)

var

exchange

=function

(nums)

}for

(let i=

0;ireturn arrb

};

14.(鍊錶)輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

var

getkthfromend

=function

(head, k)

while

(p)return q

};

var

getleastnumbers

=function

(arr, k)

if(k>=arr.length)

for(

let i=

0;i)return arr1;

};

15.(陣列重複數字)在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

方法一:雙迴圈(時間複雜度高)

var

findrepeatnumber

=function

(nums)}}

return

null;}

;/* 法二:陣列排完序後,相等的數就會相鄰。 此方法最好

於是迴圈直接比較就好,遇到相等的就返回該值。*/

nums.

sort()

;for

(var i=

0;i1;i++

)return

null

;//方法三:使用set(),自動忽略重複元素,若長度不增加,說明此番輸入的是重複元素

let _set=

newset()

;for

(var i in nums)

return

null

;}

16.(鍊錶,陣列倒序arr.reverse())輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。

var

reverseprint

=function

(head)

return

(arr.

reverse()

)};//方法二:棧實現

var res =

while

(head)

return res

17.(字串重複)請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。

var

lengthoflongestsubstring

=function

(s)else

}return maxlen;

};

18.(number轉string)請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。

var

hammingweight

=function

(n)// }

// return flag;

};

18.(冪次方math.pow(x,y))輸入數字 n,按順序列印出從 1 到最大的 n 位十進位制數。比如輸入 3,則列印出 1、2、3 一直到最大的 3 位數 999。

var

printnumbers

=function

(n)// var flag=1;

// for(let i=0;i

// flag=flag*10; //10^n

// }

var flag=math.

pow(

10,n)

;//用時與上述暴力方法差不多

for(

let i=

1;i)return nums;

};

19.(刪除節點)給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。

var

deletenode

=function

(head, val)

var p=head;

var q=head;

while

(p) q=p;

p=p.next;

}return head;

//有乙個很好的思路,在head前面加入乙個哨兵節點pre,則只需要乙個指標就能遍歷

};

20.(陣列累乘)給定乙個陣列 a[0,1,…,n-1],請構建乙個陣列 b[0,1,…,n-1],其中 b 中的元素 b[i]=a[0]×a[1]×…×a[i-1]×a[i+1]×…×a[n-1]。不能使用除法。

var

constructarr

=function

(a)var b=

; b[0]

=1;var c=

; c[len-1]

=1;for

(let i=

1;i)for

(let i=

0;i)return b;

};

劍指offer JS題解 10 矩形覆蓋

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?n 3時,2 3的矩形塊有3種覆蓋方法。依然是斐波那契數列,首先考慮起始的情況 當n 1時,只有一種覆蓋方法 當n 2時,可以全橫或者全豎,有兩種覆蓋方法 當n 2時,無非...

劍指offer js編寫 樹

1 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 思路 首先找到a中結點的值與b相等的結點,然後從這兩個相同的結點出發,判斷是否存在重合,若是返回true。否則,在樹a的左右子樹中尋找與b結點值相同的結點,以這些結點出發遞迴判斷是否是a的子樹。functio...

劍指offer js實現剪繩子

題目 給你一根長度為n的繩子,請剪成m段n 1,m 1,使剩下的繩子乘積為最大值.例 8 2 3 3 18 思路 動態規劃,比如8,第一次切割可以分成8 1種切法,將最優解儲存起來。let n 8 function cut if res n return res n let max 0 for le...