算法练习——(1)找数组中唯一成对的那个数(异或)

简介: ——如何找数组中唯一成对的那个数(数组特殊)1-1000这一千个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。 每个数组元素只能访问一次,设计一个算法,将他找出来;不用辅助储存空间,设计一个算法实现.

异或


——如何找数组中唯一成对的那个数(数组特殊)

1-1000这一千个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。 每个数组元素只能访问一次,设计一个算法,将他找出来;不用辅助储存空间,设计一个算法实现.


package LanQiao;
import java.util.Random;
/**
 * @Author: Mo
 * @Date: 2021/1/18 21:11
 */
public class FindD {
    public static void main(String[] args) {
        int N = 1000;
        int []arr = new int[N];
        for (int i = 0;i< arr.length-1;i++){
            arr[i]=i+1;
            System.out.print(arr[i]+" ");
        }
        //最后一个数,是随机数
        arr[arr.length-1]=new Random().nextInt(N-1);
        System.out.println(arr[arr.length-1]);
        int x1 = 0;
        for (int i = 0; i < N; i++) {
        x1 = x1^arr[i];
        }
        for (int i = 1; i < N; i++) {
            x1 = x1^i;
        }
        System.out.println(x1);
    }
}

原理

A^A=0

B^0=B

A ^ A ^ B ^ C ^ C:即可消除重复的,保留单个的

(1 ^ 2 ^ 3 ^ … ^ K ^ … ^ 1000 ^ K) ^ (1 ^ 2 ^ 3 ^ … ^ 999 ^ 1000) = K


如果数组中其他数无法确定或方便的表示,则需要辅助储存空间暴力破解


int[] arry = new int[N];
        for (int i = 0; i < N; i++) {
            arry [arr[i]]++;
        }
        System.out.println();
        for (int i = 0; i < N;i++){
            if (arry[i] ==2) {
                System.out.println(i);
            }


相关文章
|
6天前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
6天前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
4天前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
6天前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
6天前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积
|
6天前
|
算法
【算法】前缀和——寻找数组的中心下标
【算法】前缀和——寻找数组的中心下标
|
11天前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
21 0
|
11天前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
10 0
|
2月前
|
存储 算法 调度
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
|
1月前
|
机器学习/深度学习 存储 算法
数据结构与算法:数组的操作
数据结构与算法:数组的操作

热门文章

最新文章