【问题标题】:Majority elements in an array (n/3)数组中的多数元素 (n/3)
【发布时间】:2021-09-18 16:32:34
【问题描述】:

数组中大多数元素的以下代码适用于 n/2 次元素,但不适用于 n/3 次。谁能帮帮我?

class Solution {
    public List<Integer> majorityElement(int[] a) {
        ArrayList<Integer> arr = new ArrayList<>();
        int flag=0;
        for (int i = 0; i < a.length; i++) {
            int count = 0;
            for (int j = i; j < a.length; j++) {
                if (a[i] == a[j])
                    count++;
            }
  
            if (count > a.length/3) {
                arr.add(a[i]);
                flag=1;
            }
        }
        if (flag==0)
            return new ArrayList<>();
        
        return arr;
    }
}

【问题讨论】:

  • 您的代码在我尝试时运行良好。你给出的输入和预期的输出到底是什么?

标签: java arrays algorithm data-structures


【解决方案1】:

你需要遍历i=0到n和j=0到n才能计算每个元素的频率,也最好用HashMap来解决,现在时间复杂度是O(n2) , 通过使用 hashmap 你可以在 O(n) 中解决它

https://www.geeksforgeeks.org/majority-element/

【讨论】:

    【解决方案2】:

    在第二个 for 循环中,您丢失了所有索引低于 i 的元素。要计算一个数字的频率,您需要将其与数组中存在的所有元素等同起来,如果您以 count = 0 开头,甚至等同于它本身。
    这是修改后的版本:

            ArrayList<Integer> arr = new ArrayList<>();
            for (int i = 0; i < a.length; i++)
            {
                int count = 0;
                for (int j = 0; j < a.length; j++)
                    if (a[i] == a[j])
                        count++;
      
                if (count > a.length/3)
                    arr.add(a[i]);
            }
            
            return arr;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2017-11-03
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多