美文网首页
剑指offer-11~14

剑指offer-11~14

作者: IAmWhoAmI | 来源:发表于2016-07-05 16:24 被阅读4次

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;
        
    }
}

相关文章

  • 剑指offer-11~14

    11.二进制中1的个数 12.数值的整数次方给定一个double类型的浮点数base和int类型的整数expone...

  • 【剑指14】剪绳子

    一.题目描述 给你一个长度为n的绳子,请把绳子剪成m段(m,n都是整数,且都大于1)每段绳子的长度即为K[0],K...

  • 剑指offer14

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结...

  • 读书笔记| 剑指offer

    date: 2016-06-02 14:00 剑指 offer 何海涛blog: http://zhedahht....

  • 剑指offer--algorithm14

    题28--连续子数组的最大和 本题需要注意一点就是连续,而不是随机从数组中选取几个数来进行累加书中介绍了两种解题的...

  • 动态规划 && 贪婪算法

    动态规划 && 贪婪算法 1· 剪绳子(14 剑指offer ) 需要先从 base case 开始寻找规律 ,...

  • 剑指

    遥望中原九点烟,风云直上七重天。 今朝再向江湖去,一剑流星谁比肩? 2011.10(1488)

  • 剑指

    1. 二维数组中查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照...

  • 全网最全剑指offer题目解答

    【剑指offer】Java版代码(完整版) 【剑指offer】1-10题 【剑指offer】11-20题 【剑指o...

  • 每日一练(14):合并两个排序的链表

    title: 每日一练(14):合并两个排序的链表 categories:[剑指offer] tags:[每日一练...

网友评论

      本文标题:剑指offer-11~14

      本文链接:https://www.haomeiwen.com/subject/civhjttx.html