我有两个任务 - 在O(n)和O(log n)的时间复杂度内统计二进制表示中1的数量。由于第一个任务比较简单,我不知道如何在没有排序等情况下以O(log n)的时间复杂度统计它们的数量。这是否可能呢? 目前我的代码:
public class CountOnes {
public static void main(String[] args)
{
System.out.println("Program to count ones");
countOnesInLinearTime("110");
countOnesInlogarithmicTime("110");
}
private static void countOnesInlogarithmicTime(String binaryRepresentationOfLong) {
//TODO
}
private static void countOnesInLinearTime(String binaryRepresentationOfLong) {
int numberOfOnes = 0;
for(int i = 0; i < binaryRepresentationOfLong.length(); i++)
{
if(binaryRepresentationOfLong.charAt(i) == '1')
{
numberOfOnes++;
}
}
System.out.println(numberOfOnes);
}
}
我发现了这个链接: 二进制表示中1的数量 不过有些不同。
int
、long
等类型的数据做这个操作,也就是说需要支持移位? - Willem Van Onsem