//题目描述:
//数组中有一个数字的次数超过数组的长度的一半,请找出这个数字.
public class Solution
{
//用多数投票算法来做. 并且已经确定了存在一个数符合条件.否则的话还要最后检验这个ans是否符合条件.
// 遍历数组,判断ans的次数是否符合条件.
//
//
// 这个ans绝对是数组中出现次数最多的额.
/*如果count==0,则将now的值设置为数组的当前元素,将count赋值为1;
反之,如果now和现在数组元素值相同,则count++,反之count–;
重复上述两步,直到扫描完数组。*/
public int MoreThanHalfNum_Solution(int[] nums)
{
int ans = 0;
int cnt = 0;
for (int num : nums)
{
//cnt减为0的时候就要 去判断下一个数.
if (cnt == 0)
{
ans = num;
cnt = 1;
}
else if (ans == num)
{
cnt++;
}
else
{
cnt--;
}
}
return ans;
}
}
《剑指offer》NO39 数组中出现次数超过一半的数字 详解 <Java实现>
最新推荐文章于 2021-01-17 14:56:29 发布