LeetCode1287有序数组中出现次数超过25%的元素

题目描述

在这里插入图片描述
简述:找出非降序数组中出现次数大于25%的数组元素

思路

方法1

1、遍历一次整个数组元素
2、遇到不同元素,则计算下标之差,记录满足元素个数够25%的数组下标
3、下标差大于25%数组则返回
4、下标差不大于25%继续遍历

方法1代码及运行结果

class Solution {
public:
    int findSpecialInteger(vector<int>& arr) {
        int length = arr.size();    //获取数组长度
        int n = length/4,tag = 0,temp = -1;  //tag存放上次不同元素下标,temp存放元素够25%的元素下标
        for(int i = 0; i < length; i++){//遍历数组
            if(arr[i] != arr[tag]){ //遇到不同的元素
                if( (i-tag) > n ){  //tag下标的元素个数够25%
                    temp = tag; //temp记录满足个数够25%的数组元素下标
                    break}
                tag = i;//tag下标元素不够25%,把当前不同的i下标元素赋值给tag
            }          
        }//for
        if ( temp < 0 )
            temp = length-1;//所有元素相同时
            return arr[temp];      
    }
};

在这里插入图片描述

方法2

1、遍历一次数组
2、若两数组元素满足相隔超过25%数组长度且相等,即为所求

方法2代码及运行结果

class Solution {
public:
    int findSpecialInteger(vector<int>& arr) {
        int len = arr.size() / 4;	//四分之一数组长度
        for (int i=0;i<arr.size();i++) {
            if (arr[i] == arr[i+len]) {		//跨越超过四分之一长度的两数组元素相等
                return arr[i];
            }
        }
        return 0;
    }
};

在这里插入图片描述
时间复杂度与方法1虽同为O(n),但是可以明显看到运行时间比较少

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值