java - 数组中的多数元素 (n/3)
问题描述
下面针对数组中大多数元素的代码适用于元素的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;
}
}
解决方案
您缺少所有那些索引低于i
第二个 for 循环的元素。要计算一个数字的频率,您需要将它与数组中存在的所有元素等同起来,如果您以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;
推荐阅读
- javascript - 我应该如何在使用 node.js 和 vanilla javascript 制作的网络应用程序中使用代理?
- python - 将 XGBoost 与 dask 分布式一起使用时出现值类型错误
- c++ - 根据用户在 c++ 中的输入设置数组的大小,但 const 不起作用
- javascript - 如何从 JavaScript 中的多维数组中删除空数组?
- python - OpenCV - Python
- r - 循环遍历 Dataframe 中的列以在 R 中构建重复测量线性模型 lme
- android - Android:点击ListView FooterView上的EditText,使键盘开合,开合
- python - 如何在 Python for 循环中使用多个变量?
- c# - 序列化/反序列化设置和处理不断变化的模型
- r - 获取数据框中特定分类变量的计数