当前位置: 首页 > article >正文

Leetcode169. 多数元素(HOT100)

链接

我写的代码:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        if(nums.size()==1)return nums[0];
        sort(nums.begin(),nums.end());
        int n = nums.size();
        int res = 0;
        for(int i = 0;i<n;i++){
            int j = i;
            while(j+1<n&&nums[j]==nums[j+1])++j;
            if((i!=j)&&(j-i+1)>n/2){
                res = nums[j];
                break;
            }
        }
        return res;
    }
};

我模仿的优秀的代码:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int r,t = 0;
        for(const auto&e:nums){
            if(t==0){
                r = e;
                ++t;
            }
            else{
                if(r==e){
                    ++t;
                }
                else{
                    --t;
                }
            }
        }
        return r;
    }
};

优秀的代码本身:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int r,c = 0;
        for(auto x:nums){
            if(!c)r = x,c = 1;
            else if(r==x)++c;
            else --c;
        }
        return r;
    }
};

用 r 记录一个数,t 记录一个次数,遍历这个数组,如果遇到了和 r 相同的值,++t;说明 r 又多了一个,遇到了不同的数,就--t ;说明 r 被抵消了一个,而当t 减到0的时候,我们就用当前遍历到的元素当作新的r 。

为什么可以这样做呢?因为题目中说了:存在一个元素出现次数大于n/2 ;

我们选择一个数当作r 也就是答案,存在两种可能:1)这就是真正的答案2)这是假的答案,真正的r 我们没有找到。

那么我们继续遍历即可,如果它是真正的答案,那么遍历完所有元素,它肯定还是r 没变,因为他出现的次数超过了数组的一半,

如果他不是真正的答案,那么它会因为数量不足而被数量超过数组一半的真正的答案代替掉。 


http://www.kler.cn/a/407229.html

相关文章:

  • 二维绘图,地图(Openlayers/Leafletjs)
  • 生产制造领域的多元化模式探索
  • PHP实现选择排序
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构
  • IntelliJ+SpringBoot项目实战(十)--常量类、自定义错误页、全局异常处理
  • Mybatis-Day3
  • Apple Vision Pro开发002-新建项目配置
  • Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为
  • vue3+echarts+ant design vue实现进度环形图
  • uniapp input限制输入负数,以及保留小数点两位.
  • 【接口封装】——2、鼠标移动窗体
  • Python网络爬虫实践案例:爬取猫眼电影Top100
  • ssm150旅游网站的设计与实现+jsp(论文+源码)_kaic
  • 大数据调度组件之Apache DolphinScheduler
  • 工商业光储充,储能协调控制器助力能源新变革
  • Oralce数据库巡检SQL脚本
  • AVL树实现
  • IDEA2023版本中如何启动项目的多个实例
  • 关于C/C++Windows下连接MYSQL操作
  • 【深度学习之二】正则化函数(weight decay, dropout, label smoothing, and etc)详解,以及不同的函数适用的场景
  • 闫妮—《小巷人家》中的宝藏演员
  • Linux各种并发服务器优缺点
  • Vue3移动端-点餐项目
  • AOC显示器915Sw按键失灵维修记
  • Java爬虫:获取商品详情的实践之旅
  • 在Ubuntu上使用Python和OpenCV库来处理和显示图片