1.用法:
摩尔投票法,当一个数的重复次数超过数组长度的一半,每次将两个不相同的数删除,最终剩下的就是要找的数。
2.实际问题:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
**示例1**
输入:[3,2,3]
输出:3
**示例2**
输入:[2,2,1,1,1,2,2]
输出:2
题目来自 力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions/xm77tm/
3. 解决方法1:
使用的是排序,将数组从小到大排序,中间的数就是最多的那个
public class paixu {
public static void main(String[] args) {
int[] nums={6,5,6,6,7,8,6,2,6};
int swap;
for(int i=0;i<nums.length;i++)
{
for(int j=i;j<nums.length;j++)
{
if( nums[i]>nums[j])
{ swap=nums[i];
nums[i]=nums[j];
nums[j]=swap;
}
}
}
System.out.println(nums[nums.length/2]);
}
}
3. 解决方法2:
摩尔投票法解决这个题。
1.用两个for循环嵌套。
2.第一个for循环用来赋值,
3.第二个for循环用来判断(if语句)是否是最多的那个数。
PS:看代码很容易理解。
public class moertoupiaofa {
public static void main(String[] args) {
int nums[] = {3, 2, 4, 1, 6, 2, 2, 2};
for (int j = 0; j < nums.length; j++) {
int count = 0;
int num = nums[j];
for (int i = 1; i < nums.length; i++) {
if (nums[i] == num) {
count++;
}
else {
count--;
}
}
if (count >= 0) {
System.out.println("num:" + num);
break;
}
}
}
}