首页 > 其他分享 >力扣由浅至深 每日一题.21 只出现了一次的数字

力扣由浅至深 每日一题.21 只出现了一次的数字

时间:2024-04-07 21:33:21浏览次数:27  
标签:XOR 运算 nums int 复杂度 示例 力扣 一题 21

世界大雨滂沱,万物苟且而活

                             —— 24.4.1

只出现一次的数字

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

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例 1 :

输入:nums = [2,2,1]
输出:1

示例 2 :

输入:nums = [4,1,2,1,2]
输出:4

示例 3 :

输入:nums = [1]
输出:1

提示:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。

思路及算法

标签:位运算
本题根据题意,线性时间复杂度 O(n)O(n)O(n),很容易想到使用 Hash 映射来进行计算,遍历一次后结束得到结果,但是在空间复杂度上会达到 O(n)O(n)O(n),需要使用较多的额外空间
既满足时间复杂度又满足空间复杂度,就要提到位运算中的异或运算 XOR,主要因为异或运算有以下几个特点:
一个数和 0 做 XOR 运算等于本身:a⊕0 = a
一个数和其本身做 XOR 运算等于 0:a⊕a = 0
XOR 运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
故而在以上的基础条件上,将所有数字按照顺序做抑或运算,最后剩下的结果即为唯一的数字

class Solution {
    public int singleNumber(int[] nums) {
        int x = 0;
        for (int i = 0; i < nums.length; i++){
            // 1. 遍历 nums 执行异或运算
            x ^= nums[i];   
        }  
        return x;            // 2. 返回出现一次的数字 x
    }
}

时间复杂度

时间复杂度:O(n)

空间复杂度:O(1)

标签:XOR,运算,nums,int,复杂度,示例,力扣,一题,21
From: https://blog.csdn.net/m0_73983707/article/details/137239834

相关文章

  • 2024.4.7每日一题
    mysql1.创建索引idx_emp_no,查询emp_no为10005,使用强制索引forceindex(idx_emp_no)2.现在在last_update后面新增加一列名字为create_date,类型为datetime,NOTNULL,默认值为'000000:00:00'这里的默认值要写成,我还不知道为什么要这样default'2020-10-0100:00:00'java1......
  • Offer必备算法22_优先级队列_堆_四道力扣题详解(由易到难)
    目录①力扣1046.最后一块石头的重量解析代码②力扣703.数据流中的第K大元素解析代码③力扣692.前K个高频单词解析代码④力扣295.数据流的中位数解析代码本篇完。①力扣1046.最后一块石头的重量1046.最后一块石头的重量难度简单有一堆石头,每块石头的重......
  • 双数列-力扣-打家劫舍2
    一个专业的小偷,计划偷窃一个环形街道上沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每......
  • ABC218E Destruction题解
    ABC218EDestruction题解题意给你一个\(n\)个点\(m\)条边的带权无向联通图,你可以删去任意条边,要求保证图联通的情况下删去边的权值和最大。\((n\le2\cdot10^5\,\m\le2\cdot10^5\,\-10^9\lee_i\le10^9)\)(\(e_i\)为边权)分析首先我们考虑边权全为正的情况,那么我们删......
  • 每日一题:C语言经典例题之小球蹦蹦跳跳
    题目描述调皮的小明将皮球从100m的高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第N次落地时,共经过了多少米,第N次反弹多高。输入一个正整数N,表示球落地的次数。输出 length=球第N次落地时所经过了距离high=球第N次落地反弹的高度小数点后保留4位......
  • 移除元素 -- 力扣第27题 -- 暴力、双指针解法
    题目https://leetcode.cn/problems/remove-element/description/给你一个数组nums 和一个值val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需......
  • 全国地级市-碳排放绩效原始dofile结果数据(含文献及原始数据)2011-2021年
    地级市-碳排放绩效数据的测算,采用GDP、人类发展指数、CO2排放测算碳排放绩效,基于《中国城市统计年鉴》中的数据,经过线性插值和ARIMA方法填补缺失,跨度2011年至2021年。该数据集详细记录了地级市的总碳排放量,但需注意,2008年以前的常住人口和城市化率数据缺失,1999年以前的总碳排放......
  • 【21.1】Django框架之会话Session补充
    【一】前言引入【1】HTTP特性之无状态因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的、独立的。通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户。对于静态网站,这可能不是个问题,而对于动态网站,尤其......
  • 【21.0】Django框架之Cookie和Session
    【一】Cookie与Session的发展史Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。【1】Cookie的发展史1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动。初始版本的Cookie只......
  • 【CSP】202112-2 序列查询新解
    题目大意:给定一长度为n+1的严格单增数列A[a0,a1,a2,a3...,an],其中a0=0,an<N定义f(x)为数列A中小于等于x的最大整数的下标,r=floor(N/(n+1)),g(x)=floor(x/r)。当N<1e9,n<1e4的时候,求解|g(x)-f(x)|之和,x=0,1,2...,N-1 分析:数据规模较大,如果一项一项求和将会超时。为优化朴素方法,观......