您的位置:首页 > 房产 > 建筑 > 易点科技网站建设_上海模板建站源码_今日全国最新疫情通报_长沙市seo百度关键词

易点科技网站建设_上海模板建站源码_今日全国最新疫情通报_长沙市seo百度关键词

2025/7/29 14:33:16 来源:https://blog.csdn.net/weixin_42670471/article/details/146381772  浏览:    关键词:易点科技网站建设_上海模板建站源码_今日全国最新疫情通报_长沙市seo百度关键词
易点科技网站建设_上海模板建站源码_今日全国最新疫情通报_长沙市seo百度关键词

在数组中查找唯一出现一次的数字

在数组中查找唯一出现一次的数字

在班级活动中,每位同学都拿到一张写有整数的卡片。其中,除了一个数字外,其余数字都恰好出现两次。现在,班长小 C 需要快速找出那张写有独特数字的卡片。本文将介绍一种时间复杂度为 O (n) 且额外空间使用极少的高效算法来解决此问题。

算法思路

为了在满足时间复杂度要求的同时减少额外空间的使用,我们利用异或运算的特性来设计算法。异或运算(用符号 “^” 表示)具有以下两个重要性质:​
任何数与 0 进行异或运算,结果为该数本身,即 a ^ 0 = a。​
任何数与自身进行异或运算,结果为 0,即 a ^ a = 0。​
基于这两个性质,我们可以遍历数组中的每个元素,将结果变量初始化为 0,然后依次与数组中的元素进行异或运算。由于相同的数字出现两次,它们异或后结果为 0,而唯一出现一次的数字与 0 异或后就是其本身。最终,异或运算的结果就是我们要找的那个独特的数字。

下面是使用 Java 语言实现上述算法的代码:

代码片.

public class Main {public static int solution(int[] cards) {// 初始化结果变量为0int result = 0;// 遍历数组中的每一个元素for (int card : cards) {// 将结果与当前元素进行异或运算result ^= card;}// 返回最终结果return result;}public static void main(String[] args) {// 添加测试用例System.out.println(solution(new int[]{1, 1, 2, 2, 3, 3, 4, 5, 5}) == 4);System.out.println(solution(new int[]{0, 1, 0, 1, 2}) == 2);}
};

在上述代码中,solution 方法接收一个整数数组 cards 作为参数。首先,初始化 result 为 0,然后通过 for-each 循环遍历数组中的每个元素,将 result 与当前元素进行异或运算。最后,返回 result,即为数组中唯一出现一次的数字。​
main 方法用于测试 solution 方法的正确性,通过输出两个测试用例的结果来验证算法的有效性。​
测试验证​
通过运行 main 方法中的测试用例,可以验证算法的正确性。在第一个测试用例中,数组 {1, 1, 2, 2, 3, 3, 4, 5, 5} 中唯一出现一次的数字是 4,算法返回结果与预期相符。在第二个测试用例中,数组 {0, 1, 0, 1, 2} 中唯一出现一次的数字是 2,算法同样返回了正确的结果。​
通过这种方式,我们利用异或运算的特性,高效地解决了在数组中查找唯一出现一次数字的问题,同时满足了时间复杂度和空间复杂度的要求。希望本文的内容对你理解和解决类似问题有所帮助。
.js/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com