1.题目
https://leetcode.cn/problems/single-number/
考察点
- 位运算,即对二进制数进行的运算,比如与、或、非、异或等。
- 异或运算,即按位比较两个数,如果不同则为1,相同则为0。异或运算的符号是^。
- 异或运算的性质和应用,比如:任何数和0异或,结果还是原来的数;任何数和自己异或,结果是0;异或运算满足交换律和结合律;异或运算可以用来找出数组中只出现一次的数字。
- 这道题也可以用哈希表或排序的方法来解决,但是会增加空间复杂度或时间复杂度。
2.解法
这道题的解题思路是使用异或运算,
因为异或运算满足交换律和结合律,且任何数和0异或等于自身,任何数和自身异或等于0。
这道题的目标是找到一个数组中只出现一次的数字,其他数字都出现两次。一个简单的方法是使用异或运算符,因为异或运算符有以下性质:
- 任何数和0异或,结果仍然是原来的数,即a^0=a。
- 任何数和自身异或,结果是0,即a^a=0。
- 异或运算满足交换律和结合律,即abc=a(bc)=(ab)c。
所以,我们可以遍历数组中的所有数字,用一个变量result来保存异或的结果。初始时,result为0。每次遍历一个数字num,就将result和num
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public int singleNumber( int [] nums) { // 初始化result为0 int result = 0 ; // 遍历数组中的所有数字 for ( int num : nums) { // 将result和num异或,更新result的值 result ^= num; } // 返回result return result; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2019-04-10 web.xml中<load-on-start>n</load-on-satrt>作用
2019-04-10 JavaWeb中filter的详解及应用案例
2019-04-10 Tomcat的简单归纳总结
2019-04-10 Tomcat 配置详解和优化
2019-04-10 深入理解Tomcat
2019-04-10 Tomcat启动过程原理详解
2019-04-10 Tomcat的目录结构详细介绍(超全)