zoukankan      html  css  js  c++  java
  • 1287. 有序数组中出现次数超过25%的元素『简单』

    题目来源于力扣(LeetCode

    一、题目

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

    题目相关标签:数组

    提示:

    • 1 <= arr.length <= 10^4
    • 0 <= arr[i] <= 10^5

    二、解题思路

    2.1 线性扫描

    1. 据题意:数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%,即该元素的出现次数大于数组长度 / 4

    2. 遍历数组,因数组元素是非递减的有序数组,记录每个元素出现的次数即可

    3. 某元素的出现次数大于数组长度 / 4 时,返回当前遍历元素

    2.2 线性扫描——优化版

    1. 据题意:数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%,即该元素的出现次数大于数组长度 / 4

    2. 因数组元素是非递减的有序数组,则该元素一定是连续出现数组长度 / 4 次的

    3. 遍历数组,若当前遍历元素的索引加上数组长度 / 4,两个索引上的元素相同时,说明当前遍历元素出现次数大于数组长度 / 4,即出现次数超过数组元素总数的 25%

    三、代码实现

    3.1 线性扫描

    public static int findSpecialInteger(int[] arr) {
        int maxCount = arr.length / 4;
        int count = 1;
    
        if (arr.length == 1) {
            return arr[0];
        }
    
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] == arr[i - 1]) {
                count++;
                if (count > maxCount) {
                    return arr[i];
                }
            } else {
                count = 1;
            }
        }
        return arr[0];
    }
    

    3.2 线性扫描——优化版

    public static int findSpecialInteger(int[] arr) {
        int len = arr.length;
        int limit = len / 4;
        for (int i = 0; i < len; i++) {
            int end = i + limit;
            if (end < len && arr[i] == arr[end]) {
                return arr[i];
            }
        }
        return -1;
    }
    

    四、执行用时

    4.1 线性扫描

    4.2 线性扫描——优化版

    五、部分测试用例

    public static void main(String[] args) {
        int[] arr = {1, 2, 2, 6, 6, 6, 6, 7, 10};  // output: 6(元素 6 出现次数为4,超过数组长度 9/4 = 2)
    //    int[] arr = {1, 2, 3, 3};  // output:3(元素 3 出现次数为2,超过数组长度 4/4 = 1)
    
        int result = findSpecialInteger(arr);
        System.out.println(result);
    }
    
  • 相关阅读:
    IOS照相
    起学习iOS开发专用词汇
    django[post与get测试]
    起名字好难啊!(初识Django)
    MTV模型
    Django安装以及介绍
    数据库操作
    数据库其它操作
    数据库经典习题,
    数据库基本操作
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/13173568.html
Copyright © 2011-2022 走看看