思路:
这个题累了我半天。思路就是先排序。然后就简单了
错误:
在比较最后一个数组的时候我没有考虑循环退出的时候,最后一个符合要求的字符是没有判断是否要加入到结果里面的
也就是忘记了代码
if(cnt>n/3)
{
result.add(tempInt);
}
要在循环结束之后再判断一次,用来考虑最后一个结果。以后要注意
代码
public class Solution {
public List<Integer> majorityElement(int[] nums) {
List<Integer> result=new ArrayList<Integer>();
int n=nums.length;
switch (n) {
case 0:
break;
case 1:
result.add(nums[0]);
break;
case 2:
if(nums[0]!=nums[1])
{
result.add(nums[0]);
result.add(nums[1]);
}
else
{
result.add(nums[0]);
}
break;
default:
Arrays.sort(nums);
int cnt=1;
int tempInt=nums[0];
for(int i=1;i<n;i++)
{
if(tempInt==nums[i])
{
cnt++;
}
else
{
if(cnt>n/3)
{
result.add(tempInt);
}
cnt=1;
tempInt=nums[i];
}
}
if(cnt>n/3)
{
result.add(tempInt);
}
break;
}
return result;
}
}
本文介绍了一种寻找数组中出现次数超过总数三分之一元素的算法实现。通过排序和计数的方式,有效地找到符合条件的众数,并针对循环退出时可能出现的问题进行了讨论。
332

被折叠的 条评论
为什么被折叠?



