11.二進制中1的個數
public class Solution {
public int NumberOf1(int n) {
return Integer.toBinaryString(n).replaceAll("0","").length();
}
}
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n!= 0){
count++;
n = n & (n - 1);
}
return count;
}
}
**分析一下代碼:** **這段小小的代碼,很是巧妙。**
**如果一個整數不為0,那么這個整數至少有一位是1。
如果我們把這個整數減1,那么原來處在整數最右邊的1就會變為0,
原來在1后面的所有的0都會變成1(如果最右邊的1后面還有0的話)。
其余所有位將不會受到影響。**
#舉個例子:
一個二進制數1100,從右邊數起第三位是處于最右邊的一個1。
減去1后,第三位變成0,它后面的兩位0變成了1,而前面的1保持不變,因此得到的結果是1011.
我們發現減1的結果是把最右邊的一個1開始的所有位都取反了。
這個時候如果我們再把原來的整數和減去1之后的結果做與運算,從原來整數最右邊一個1那一位開始所有位都會變成0。
如1100&1011=1000.也就是說,把一個整數減去1,再和原整數做與運算,
會把該整數最右邊一個1變成0.那么一個整數的二進制有多少個1,就可以進行多少次這樣的操作。
12.數值的整數次方
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
1.要考慮到負數方
2.結果一定要存為Double 類型
public class Solution {
public double Power(double base, int exponent) {
Double sum=1.0;
if(exponent>=0){
for(int i=0;i<exponent;i++){
sum *= base;
}
}else{
exponent=0-exponent;
for(int i=0;i< exponent;i++){
sum /= base;
}
}
return sum;
}
}
13.調整數組順序使奇數位于偶數前面
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位于數組的前半部分,所有的偶數位于位于數組的后半部分,并保證奇數和奇數,偶數和偶數之間的相對位置不變。
public class Solution {
public void reOrderArray(int [] array) {
int len = array.length;
int start = len;
int end = len;
for(int i=len-1;i>=0;i--){
int tmp=array[i];
if(tmp%2 ==1){
if(end==len){
end=i;
}
}else{
if(end !=len){
for(int j =i;j<end;j++){
array[j]=array[j+1];
}
array[end] = tmp;
end--;
}
}
}
}
}
14.鏈表中倒數第k個結點
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null){
return null;
}
ListNode tmp=head;
int count=1;
while(head.next!=null){
if(count==k){
tmp=tmp.next;
head=head.next;
}else{
head=head.next;
count++;
}
}
if(count==k)
return tmp;
else
return null;
}
}