首页 > 其他分享 >力扣137

力扣137

时间:2023-12-03 10:32:19浏览次数:30  
标签:return nums int 复杂度 力扣 vector 137 size

Problem: 137. 只出现一次的数字 II

思路

①排序后,前后不一样的就是答案
②map计数后找出值为1的数

复杂度

  • 时间复杂度、空间复杂度:思路①较优
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int n=nums.size();
        //排序后,前后不一样的就是答案
        sort(nums.begin(),nums.end());
        if(n==1)return nums[0];
        if(nums[0]!=nums[1])return nums[0];
        else if(nums[n-1]!=nums[n-2])return nums[n-1];
        for(int i=1;i<n-1;i++){
            if(nums[i]!=nums[i-1] && nums[i]!=nums[i+1]){
                return nums[i];
            }
        }
        return nums[0];
    }
};
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int n=nums.size();
        //map计数
        map<int,int>ma;
        for(int i=0;i<n;i++){
            ma[nums[i]]++;
        }
        for(auto [x,val]:ma){
            if(val==1)return x;
        }
        return 0;
    }
};

标签:return,nums,int,复杂度,力扣,vector,137,size
From: https://blog.51cto.com/u_15974747/8665310

相关文章

  • 《力扣面试150题》题单拓展——回溯
    《力扣面试150题》题单拓展——回溯1.基础知识voidfind(string&s,inti,string&path){//终止条件 if(i==s.size()){ans.push_back(path);return;}for(intk=0;k<index[sub].size();k++){//处理一层path.push_bac......
  • 《力扣面试150题》题单拓展——滑动窗口
    《力扣面试150题》题单拓展——滑动窗口1.基础知识先区分好,枚举右端点,还是左端点,窗口内的条件改变后,一般都是while控制另一个窗口的移动,然后收集结算我感觉滑动窗口这里变动最大的,什么时候去滑动左窗口,什么时候去收集答案,都很不一样,得慢慢体会滑动窗口难题是真的难,呜呜呜呜......
  • 《力扣面试150题》题单拓展——双指针
    《力扣面试150题》题单拓展——双指针1.基础知识为什么双指针会正确?不会漏掉搜索空间数组nums递增排序,假设共8个元素假设由于搜索空间i<j的限制,只搜索右上角白色倒三角空间,一开始,我们检查右上方单元格(0,7),即计算A[0]+A[7],与target进行比较。如果不相等的话,则要么大......
  • 《力扣面试150题》题单拓展——二分法
    《力扣面试150题》题单拓展——二分法困难题:找第K大/小1.基础知识首先可以确定答案的上下界单调性分析:如果当前答案为m时,可以满足,一定有一侧是一定满足的,另一侧不一定,需要去探索boolis_ok(){}intl,r;intans;while(l<=r){intm=l+((r-l)>>1);......
  • 《力扣面试150题》题单拓展——堆
    《力扣面试150题》题单拓展——堆一、堆困难题:找K小,先考虑二分法基础知识//优先队列:priority_queue<int,vector<int>,greater<int>>q;//小根堆priority_queue<int,vector<int>,less<int>>q;//小根堆优先队列自定义比较函数//1,小根堆boolcmp(vector<i......
  • 力扣907. 子数组的最小值之和(单调栈)
    给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。由于答案可能很大,因此 返回答案模 10^9+7 。 示例1:输入:arr=[3,1,2,4]输出:17解释:子数组为[3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为3,1,2,4,1,1,2,1,1,1,和......
  • 力扣刷题随笔
    力扣刷题随笔回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false链表中节点数目在范围[1,105]内0<=Node.val<=9本题的思路就是利用双指针的方法来比......
  • 力扣136
    136. 只出现一次的数字给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。思路①逐位异或②排序后找只出现一次的数复杂度思路②......
  • 力扣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计数,想的过......