前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >脚撕LeetCode(1287)Easy

脚撕LeetCode(1287)Easy

作者头像
JathonKatu
发布2021-06-10 01:35:09
2370
发布2021-06-10 01:35:09
举报
文章被收录于专栏:JathonKatu

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6 提示:1 <= arr.length <= 10^4 0 <= arr[i] <= 10^5 https://leetcode-cn.com/problems/element-appearing-more-than-25-in-sorted-array/

这道题是找出数组中重复次数超过0.25的也就是四分之一,爆破法不难想到

一、爆破法,直接循环记数,直到大于length * 0.25,执行结果如下:

25 / 25 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 38.6 MB

提交时间:4 天前

代码语言:javascript
复制
    public static int findSpecialIntegerMy(int[] arr) {
        int thisNum = 0;
        int count = 0;
        // 右移两位 = 除以4 = 0.25
        // 这里考虑到有可能出现小数位所以向上取整
        int needCount = (int) Math.ceil(arr.length >> 2);
        for (int i : arr) {
            if (i == thisNum) {
                count++;
            } else {
                thisNum = i;
                count = 1;
            }
            if (count > needCount) {
                return thisNum;
            }
        }
        return -1;
    }

二、评论区大佬的做法类似

这道题两者都差不多没什么好说的,执行结果如下:

25 / 25 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 38.8 MB

提交时间:4 天前

代码语言:javascript
复制
double count = arr.length * 0.25;
    int targetNum = Integer.MIN_VALUE;
    int targetCount = 0;
    for (int i = 0; i < arr.length; i++) {
        if(arr[i] != targetNum) {
            targetNum = arr[i];
            targetCount = 1;
        }else {
            targetCount++;
        }
        if(targetCount > count) {
            return targetNum;
        }
    }
    return targetNum;
}

总的来说执行结果类似,但是不解的是为什么评论区大佬的方法会多0.2,而且其实只用到了几个变量内存就用到了30+,总感觉不知道什么时候开始默认的内存占用就要比30+高,而达不到以前的低,所以现在很多的算法内存占用都超越50%左右或者更低。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档