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...