在一个只有1和0的数组中你怎么算不。 1和0没有比较,然后修改为3s和5s的数组 我的方法是使用累积数组,使累积[i] = array [i] +累积[i-1]。否一个=累积[n]个零数= n-cumulative [n]; 这种方法是否正确?或者建议一些其他方法? 我们可以将其转换为3和5的数组而不进行比较吗?
答案 0 :(得分:3)
我认为您可以在不使用比较的情况下执行此操作,依赖于0
在大多数语言中被视为False
且1
被视为True
的事实。
示例:C,Python。
因此,不是比较值是0还是1,而是直接将其用作条件,并且您应该能够在不进行比较的情况下完成工作。您可以使用相同的方法来计算1
和0
。
在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]];
}