LeetCode_169

题目:

给定一个大小为 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

解析:

本题中定义的众数为出现次数大于⌊ n/2 ⌋的元素,而且一定存在。那么解题思路是在数组中不断找一对不相等的数,然后删去,最后剩下的数一定是众数。代码如下:

public int majorityElement(int[] nums) {
		// 连续删除一对相同的数,最后剩下的不可消除的数即为众数。
		int result = nums[0];// 用于记录众数,假设数组中的第一个数是众数
		int count = 0;// count为目前可以删除的数的数量。找到一个相同元素则count++,找到一个不同元素则count--;
		for (int num : nums) {
			if (num == result)// 如果两个数相同就不能抵消,count++。
				count++;
			else {
				if (count > 0)// 如果两个数不同且可以抵消的数的数量>0,则count--,表示消去一对数。
					count--;
				else
					result = num;// 如果两个数不同但目前不可以消除数了,则将该数记录为众数。
			}
		}
		return result;
	}

猜你喜欢

转载自blog.csdn.net/Q_M_X_D_D_/article/details/81407941