11.二進制中1的個數(shù)
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;
}
}
**分析一下代碼:** **這段小小的代碼熔恢,很是巧妙弛秋。**
**如果一個整數(shù)不為0,那么這個整數(shù)至少有一位是1些己。
如果我們把這個整數(shù)減1诲侮,那么原來處在整數(shù)最右邊的1就會變?yōu)?,
原來在1后面的所有的0都會變成1(如果最右邊的1后面還有0的話)屹培。
其余所有位將不會受到影響默穴。**
#舉個例子:
一個二進制數(shù)1100,從右邊數(shù)起第三位是處于最右邊的一個1褪秀。
減去1后蓄诽,第三位變成0,它后面的兩位0變成了1媒吗,而前面的1保持不變仑氛,因此得到的結(jié)果是1011.
我們發(fā)現(xiàn)減1的結(jié)果是把最右邊的一個1開始的所有位都取反了。
這個時候如果我們再把原來的整數(shù)和減去1之后的結(jié)果做與運算闸英,從原來整數(shù)最右邊一個1那一位開始所有位都會變成0锯岖。
如1100&1011=1000.也就是說,把一個整數(shù)減去1甫何,再和原整數(shù)做與運算出吹,
會把該整數(shù)最右邊一個1變成0.那么一個整數(shù)的二進制有多少個1,就可以進行多少次這樣的操作辙喂。
12.數(shù)值的整數(shù)次方
給定一個double類型的浮點數(shù)base和int類型的整數(shù)exponent捶牢。求base的exponent次方鸠珠。
1.要考慮到負數(shù)方
2.結(jié)果一定要存為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.調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面
輸入一個整數(shù)數(shù)組,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序秋麸,使得所有的奇數(shù)位于數(shù)組的前半部分渐排,所有的偶數(shù)位于位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù)灸蟆,偶數(shù)和偶數(shù)之間的相對位置不變驯耻。
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.鏈表中倒數(shù)第k個結(jié)點
輸入一個鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點炒考。
/*
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;
}
}