首页 > 其他分享 >力扣136

力扣136

时间:2023-11-18 16:32:30浏览次数:29  
标签:nums int 复杂度 力扣 异或 136 逐位

136. 只出现一次的数字

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

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

思路

①逐位异或 ②排序后找只出现一次的数

复杂度

思路②的时间复杂度、空间复杂度均优于思路①


class Solution {
public:
    int singleNumber(vector<int>& nums) {
        //逐位异或
        // int res=nums[0];
        // for(int i=1;i<nums.size();i++){
        //     res^=nums[i];
        // }

        //排序后找只出现一次的数
        if(nums.size()==1)return nums[0];
        sort(nums.begin(),nums.end());
        int num=1;
        if(nums[0]!=nums[1])return nums[0];
        else if(nums[nums.size()-1]!=nums[nums.size()-2])return nums[nums.size()-1];
        for(int i=1;i<nums.size()-1;i++){
            if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1])return nums[i];
        }
        return 0;
    }
};

标签:nums,int,复杂度,力扣,异或,136,逐位
From: https://blog.51cto.com/u_15974747/8463585

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (136)-- 算法导论11.3 2题
    二、用go语言,假设将一个长度为r的字符串散列到m个槽中,并将其视为一个以128为基数的数,要求应用除法散列法。我们可以很容易地把数m表示为一个32位的机器字,但对长度为r的字符串,由于它被当做以128为基数的数来处理,就要占用若干个机器字。假设应用除法散列法来计算一个字符串......
  • 力扣2760. 最长奇偶子数组
    给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0<=l<=r<nums.length) 且满足以下条件的 最长子数组 :nums[l]%2==0对于范围 [l,r-1] 内的所有下标 i ,nums[i]%......
  • 力扣 075
    LCR075.数组的相对排序给定两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。利用map计数,想的过......
  • 力扣-34-在排序数组中查找元素的第一个和最后一个位置
    一、题目力扣地址:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/二、解法思路:也是二分查找相关题目,详细解法看注释fromtypingimportListclassSolution:"""leetcode:34二分查找类题目,与传统二分查......
  • 力扣-35-搜索插入位置
    一、题目力扣地址:https://leetcode.cn/problems/search-insert-position/二、解法思路与标准的二分查找一直,唯一的区别为,若所需target不在nums中,需要找到insert的索引fromtypingimportListclassSolution:"""leetcode:35在二分法的基础上延伸,若无法找到......
  • 力扣-704-二分查找
    一、题目力扣链接:https://leetcode.cn/problems/binary-search/description/二、解法思路标准的二分查找题目,常规上有左闭右闭和左闭右开的解法1、左闭右闭classSolution:"""leetcode:704采用左闭右闭的方式,[left,right]区间的定义这就决定了二分法的代......
  • 力扣 1460 脑筋急转弯
    1460.通过翻转子数组使两个数组相等对两个数组就行排序。依次对比,有不同则返回false。所有数字一样,那就一定可以翻转使得两个数组相等,翻转次数不同而已,总能达到。当有数字不一样,那一定不会相等。classSolution{public:boolcanBeEqual(vector<int>&target,vector<int>&a......
  • 力扣2578 排序后两个数依次选择
    2578. 最小和分割隔空依次取值,相加最小,原理暂不清楚,举例演示就可发现。classSolution{public:intsplitNum(intnum){intnum1=0,num2=0;vector<int>a;while(num){a.push_back(num%10);num/=10;}......
  • 力扣2293 暴力模拟
    2293. 极大极小游戏给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。对 nums 执行下述算法:设 n 等于 nums 的长度,如果 n==1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums ,新数组长度为 n/2 ,下标从 0 开始。对于满足 0<=i<n/2 的......
  • 力扣2406. 将区间分为最少组数
    给你一个二维整数数组 intervals ,其中 intervals[i]=[lefti,righti] 表示 闭 区间 [lefti,righti] 。你需要将 intervals 划分为一个或者多个区间 组 ,每个区间 只 属于一个组,且同一个组中任意两个区间 不相交 。请你返回 最少 需要划分成多少个组。如果......