算不了1比0和0没有比较

时间:2015-04-17 08:11:06

标签: arrays algorithm data-structures

在一个只有1和0的数组中你怎么算不。 1和0没有比较,然后修改为3s和5s的数组 我的方法是使用累积数组,使累积[i] = array [i] +累积[i-1]。否一个=累积[n]个零数= n-cumulative [n]; 这种方法是否正确?或者建议一些其他方法? 我们可以将其转换为3和5的数组而不进行比较吗?

6 个答案:

答案 0 :(得分:3)

我认为您可以在不使用比较的情况下执行此操作,依赖于0在大多数语言中被视为False1被视为True的事实。 示例:C,Python。

因此,不是比较值是0还是1,而是直接将其用作条件,并且您应该能够在不进行比较的情况下完成工作。您可以使用相同的方法来计算10

的出现次数

在Python中,这将转换为以下代码

>>> original_list = [0, 1, 1, 1, 0, 1, 0]
>>> altered_list = [3 if item else 5 for item in original_list]
>>> print altered_list
[5, 3, 3, 3, 5, 3, 5]

答案 1 :(得分:2)

你接近是正确的。我也不认为它可以改进很多 - 毕竟你需要遍历所有数组元素。

答案 2 :(得分:1)

您必须使用具有1和0的事实,并且对于任何项目,项目加上"一个减去项目"收益"一个" 。所以要计算每个可以使用的数量:

numOfOnes += item[i];
numOfZeroes += (1 - item[i]);

然后你的下一个问题是你必须以某种方式将零转换成5s和1转换成3s。使用与上面相同的技巧 - 数字一个减去数字的加权和,使得它分别产生3s和5s。你必须找出合适的体重值。

积极地没有比较。作为奖励,您可以在一次通过中完成所有这些操作 - 转换值并即时计算它们。

答案 3 :(得分:1)

您可以使用计数排序方法技术:创建另一个大小为2的数组,比如b [2]。然后这样做:

for(int i=0; i < n; i++) {
b[a[i]]++;
}

最后,b [0]将具有零个数,而b [1]将具有1个数。

答案 4 :(得分:0)

//To find the count of 0 & 1 we can do below 
public void findZeroOneCount(int [] arr){
        int len=arr.length;
        System.out.println(len);
        int sum=0;
        for(int i=0;i<len;i++){
            sum=sum+arr[i];
        }

        System.out.println("Count of Zero:"+(len-sum%len));
        System.out.println("Count of One:"+sum%len);
}

答案 5 :(得分:-1)

要转换0-&gt; 3和1-> 5,您可以使用查找表

const int lookup[]={3,5};

forloop {
   array[i] = lookup[array[i]];
}