????1二進制中1的個數
【題目】輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。
【考察點】位運算
【思路】把這個數逐次右移,然后和1與,就得到最低位的情況,其他位都為0,如果最低位是0和1與之后依舊 是0,如果是1,與之后還是1。對于32位的整數,這樣移動32次,就記錄了這個數二進制中1的個數了。?
【出錯】與之后的結果是int型數據,我們不能直接把它當boolean型數據來判斷它是否為真,而是判斷它是否==1。
【代碼】
? ? 2數值的整數次方
【題目】給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
【考察點】代碼的完整性
【思路】兩種情況,exponent>=0或者exponent<0。
1)exponent>=0
exponent=0,return 1
exponent=1,return base
其余做計算
2)exponent<0
exponent=-1,return 1/base
其余做計算
【錯誤】我在做計算的時候直接用base*=base這樣會報錯,后來就int了一個b,b*=base這樣就可以了。
【代碼】
????3調整數組順序使奇數位于偶數前面
【題目】輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位于數組的前半部分,所有的偶數位于數組的后半部分,并保證奇數和奇數,偶數和偶數之間的相對位置不變。
【考察點】代碼的完整性
【思路】使用冒泡排序的思想,只是內層循環中交換的判斷條件變成了:當前位置元素為偶數,當前位置的下一個位置的元素為奇數。
【錯誤】犯了手誤型錯誤,嗚嗚。
比如把“==”寫成了“=”,把內層循環的j全寫成了i,把array全寫了a.....打打~
【代碼】
????4鏈表中倒數第k個結點
【題目】輸入一個鏈表,輸出該鏈表中倒數第k個結點。
【考察點】代碼的魯棒性
【思路】一種比較短小精悍的解法,設置兩個指針,一快一慢,快指針先走k步,然后慢指針和快指針一起走,當快指針到達末尾(==null)的時候,慢指針所指的就是第k個結點。另外設置了一個變量i,這個i的值最后就是該鏈表的長度(包括結尾的空指針)。所以最后return的時候判斷i和k的大小,若i小于k則超出范圍返回null,否則的話返回慢指針所指的結點。
【注意】1)判斷到達末尾的條件是(快指針==null)。2)i小于k說明k值超出了這個鏈表長度的范圍,其中也包括了鏈表為null這種情況(此時i=0)。
【錯誤1】是.next而不是->next,切記。
【錯誤2】誤把最后一個語句中的i<k寫成i>k了。
【代碼】
????5反轉鏈表
【題目】輸入一個鏈表,反轉鏈表后,輸出新鏈表的表頭。
【考察點】代碼的魯棒性
【思路】另外設置了兩個指針,newHead是我們未來要返回的新表頭,next用來暫存舊的鏈表的當前元素的下一位。head一直在向后移動,移動的到的位置就是next所指的位置,newHead緊跟著head移動,但比head慢一步,因為它每次都要等當前元素的next指向變換后才能移動。當head為null時,newHead所指位置就是鏈表的最后一個結點,此時所有結點的next指向都反轉了,newHead也就是新表頭。
【錯誤】手誤把head=next那一句寫成了head=head.next。
【代碼】
? ? 6合并兩個排序的鏈表
【題目】輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。
【考察點】代碼的魯棒性
【思路】順序分別比較兩個鏈表的頭結點,小的那個加入新鏈表。遍歷完其中一個之后,另一個剩余部分加入新鏈表尾部即可。
【錯誤1】出現了中文的“!”
【錯誤2】不小心把ListNode寫成listNode了。
【錯誤3】沒有考慮到list1或者list2為空的情況。
【錯誤4】沒有設置一個臨時結點來作為新鏈表的移動結點。(頭結點確定后它要停在原位,否則新鏈表建好之后它還要再一步一步找回來多麻煩呀,這個時候臨時結點就可以代替它往后移動啦)
【代碼】