BinaryGap的有效方法

时间:2019-06-24 17:09:38

标签: java

正整数N内的二进制间隙是连续的零的任何最大序列,在N的二进制表示形式的两端都被一个1包围。

例如,数字9的二进制表示形式为1001,并且包含长度为2的二进制间隙。数字529的二进制表示形式为1000010001,并且包含两个二进制间隙:长度为4的一个长度为3。数字20为二进制表示的。 10100,包含一个长度为1的二进制间隙。数字15具有二进制表示1111,没有二进制间隙。数字32的二进制表示形式为100000,没有二进制间隔。

编写函数:

class Solution {public int solution(int N); }

给出正整数N的

返回其最长二进制间隙的长度。如果N不包含二进制间隔,则函数应返回0。

例如,给定N = 1041,该函数应返回5,因为N具有二进制表示形式10000010001,因此其最长二进制间隙为长度5。给定N = 32,该函数应返回0,因为N具有二进制表示形式'100000 ',因此没有二进制间隙。

为以下假设写出有效的算法:

N是[1..2,147,483,647]范围内的整数。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Solution s = new Solution();
        int x = s.solution(1041);

        System.out.println(x);
    }


}

class Solution { 

    public int solution(int N) 
    {
        int countZero = 0;
        Integer maxCountZeroList = 0;

        List<Integer> countZeroList = new ArrayList<Integer>();

        String nBin = Integer.toBinaryString(N);
        for (int i=1;i<nBin.length();i++) {

            if(nBin.charAt(i) == '1')
            {
                countZeroList.add(countZero);
                countZero = 0;
            }
            else
            {
                countZero++;
            }

        }

        if(countZeroList.size() > 0) 
        {
            maxCountZeroList = Collections.max(countZeroList);
        }
        return maxCountZeroList;
    } 
}

我正在寻找解决此问题的更有效方法

0 个答案:

没有答案