每日LeetCode-01

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]

输出: 1

示例 2:

输入: [4,1,2,1,2]

输出: 4

来源:

力扣(LeetCode)

链接:https://leetcode-cn.com/problems/single-number

解题思路:

    1.建立哈希表进行记录

        时间复杂度为O(n):使用哈希表查找并记录。

        空间复杂度为O(n):建立哈希表长度为数组长度。

        思路:在遍历数组的同时,记录出现过的数字。如果数字之前出现过则删除记录的数字,反之则记录,这样最后记录的数字就是要寻找的数字。


    2.使用异或运算符

        1.任何数和 00 做异或运算,结果仍然是原来的数,即a⊕0=a

        2.任何数和其自身做异或运算,结果是 0,即a⊕a=0。

        3.异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b

    作者:LeetCode-Solution

C++

class Solution {

public:

    int singleNumber(vector<int>& nums) {

        int ret = 0;

        for (auto e: nums) ret ^= e;

        return ret;

    }

};

    个人理解:题目本身没什么意义,我觉得是现有异或才有这道题,但是可以从中了解异或,为以后的编程提供新的思路。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (Since 2020.10.14-2021.3.10) LeetCode刷题笔记,共两百多题,记录整理如下: 动...
    周恩国的学习笔记阅读 4,221评论 0 1
  • to-do:看一下别人写的题解 https://github.com/981377660LMT/algorithm...
    winter_sweetie阅读 4,231评论 1 0
  • 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素 https:...
    Shimmer_阅读 1,319评论 0 1
  • 142. 环形链表 II[https://leetcode-cn.com/problems/linked-list...
    李伟13阅读 1,544评论 0 0
  • 重塑矩阵 题目地址:566. 重塑矩阵 - 力扣(LeetCode) (leetcode-cn.com)[http...
    康小庄阅读 1,432评论 0 0

友情链接更多精彩内容