如何找到数字数组的xor值

时间:2017-06-28 14:30:46

标签: java arrays xor

我想查找数字中所有数字的频率是否相同。我使用了一个大小为10(数字0-9)的数字数组,并用每个数字的频率初始化它。

eg: 221133
dig[] = {0,2,2,2,0,0,0,0,0,0};
and 
ans = dig[0];
for(a=1;a<10;a++)
{
    if(dig[a]!=0)
        ans = ans ^ dig[a];
}

如何找到xor值? 它应该返回0表示所有非零元素都相等。

3 个答案:

答案 0 :(得分:2)

如果您想要查找数字中所有数字的频率是否相同&#34;,那么您应该比较这些元素,而不是对它们进行异或...

public boolean isAllTheSame(int[] dig)
{
  int ans = dig[0];
  for ( int a = 1; a < 10; ++a )
  {
    if ( dig[a] != 0 )
    {
      if ( dig[a] != ans )
        return false;
      ans = dig[a];
    }
  }
  return true;
}

答案 1 :(得分:2)

正如在评论中所提到的,XOR不适用于此;但是,您可以使用HashSet来解决此问题:

示例

int [] dig = {0,2,2,2,0,0,0,0,0,0};

Set<Integer> set = new HashSet<>();

for (int d : dig)
{
    if (d != 0)
        set.add(d);
}

// check for less than 2 since 1=only 1 val, and 0=no values other than 0
if (set.size() < 2)
    System.out.println("All values are the same");
else
    System.out.println("Not all values are the same");

答案 2 :(得分:1)

这将解决您的第一个问题“检查相同的频率”:

int value = 2241133;
String[] digits = String.valueOf(value).split("");
boolean res = true;
int initFreq = Collections.frequency(Arrays.asList(digits), digits[0]);
for (String i : digits) {
    res = res && (Collections.frequency(Arrays.asList(digits), i) == initFreq);
    if (!res) {
        break;
    }
}
System.out.println(res);