| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【算法】136. 只出现一次的数字 -> 正文阅读 |
|
[数据结构与算法]【算法】136. 只出现一次的数字 |
这是来自力扣的第136道算法题,题目是: 看到这道题,我第一想法是来个双重for循环,一个一个做比较......?先不说能不能行(小声bb:我没试过),这样做太消耗时间了。 仔细审题后,我看到下面相关标签写着“位运算”,于是乎我就在想位运算怎么做这道题呢??!!不清楚位运算的小伙伴,可以看下咱之前的文章【Java | 运算符】。 经过我看了一会题解和思考后,知道了怎么做 首先,先来了解一下位运算的异或(^)运算: 异或(xor)?是在Java中是一个位运算符。如果两位一个为0,一个为1,结果为1,否则为0。也就是说
而异或运算有几个运算法则: 1. 归零律:a ^ a =?0 2. 恒等律:a ^?0 = a 3. 交换律:a ^ b = b ^ a 4. 结合律:a ^ b ^ c = a ^ ( b ^ c ) =?( a ^ b )?^ c 5. 自反:a ^ b ^ a = b 如果到这里还没有看懂,没关系,我们拿上面的数组举例?[ 4, 1, 2, 1, 2 ]
结合律就像纯加法一样,无论怎么结合,得到的结果都是一样的。逻辑理清后,现在分析怎么使用代码实现。
经分析,可以得到代码:
当然,代码还有优化的空间,可以将变量a省掉,可以得到代码:
怎么样?你看懂了吗? 在力扣上提交代码后得到如下结果 该题实现起来是比较简单的,但是能想到使用位运算来解决该问题,还是需要一定的经验和考察能力的。没有想到使用此方法的小伙伴也不要气馁(我也没想到),大家多做多练多看看题解,才能提高自己喔~ 题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/single-number |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:18:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |