小编Pha*_*rus的帖子

按位XOR运算符查找缺少的唯一ID

我有一个正整数的数组.除了此数组中的一个元素之外的所有元素都没有重复.找到唯一元素的方法是使用XOR按位运算符,仅当元素之一为1时返回1,否则返回false.

以下是代码:

public class Bitter {

    public static void main(String[] args) {
        int[] deliveryIds = {34, 40, 2, 21, 50, 40, 34, 2, 50};
        System.out.println(new Bitter().findUniqueDeliveryId(deliveryIds));
    }

    public int findUniqueDeliveryId(int[] deliveryIds) {
        int uniqueDeliveryId = 0;

        for(int i = 0; i < deliveryIds.length; i++) {
            uniqueDeliveryId ^= deliveryIds[i];
        }

        return uniqueDeliveryId;
    }

}
Run Code Online (Sandbox Code Playgroud)

在循环中,数组中的每个整数与从0开始的uniqueId进行异或.然后,0与34进行异或.结果然后与数组40中的下一个整数进行异或运算,我们将完成整个过程.阵列.

即使在设置断点并且一次遍历整个流程之后我仍然无法理解,如何使用uniqueId(从它的值0开始)进行异常可以帮助我们找到数组中的非重复整数?

不应该像40个XOR一样的数字(导致值0),以确认它是重复的.与此不同的是,我们与数组中的第一个整数进行异或,并且结果与数组中的后续数字相对应.我缺少什么/

java bitwise-operators

3
推荐指数
2
解决办法
1675
查看次数

了解位向量在查找字符串中的唯一字符时的用法

我有以下代码使用位向量在字符串中查找唯一字符。我们假设它是仅包含小写字母的ASCII字符集。

我很难理解下面的位向量的用法。即使在通过程序调试并遵循更改之后,变量也会在每个循环之后通过。

// assuming that the characters range from a-z
static boolean isUniqueBitVector(String str) {
    int checker = 0;

    for(int i = 0; i < str.length(); i++) {
        int val = str.charAt(i) - 'a';

        if((checker & (1 << val)) > 0) {
            return false;
        } else {
            checker |= (1 << val);
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

将val(字符串中每个字符的int表示形式)左移1,然后用checker(初始化为0)对其进行AND'运算,然后在else块中对其进行OR'运算的目的是什么。

java string bit

2
推荐指数
1
解决办法
694
查看次数

标签 统计

java ×2

bit ×1

bitwise-operators ×1

string ×1