博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣题解| 169. 多数元素
阅读量:2440 次
发布时间:2019-05-10

本文共 1032 字,大约阅读时间需要 3 分钟。

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

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

示例 1:

输入: [3,2,3]

输出: 3
示例 2:

输入: [2,2,1,1,1,2,2]

输出: 2

题解:

class Solution {    //方法一耗时多,容易理解    public int majorityElement(int[] nums) {    	int major = nums.length /2;    	int i = 0;    	while (i < nums.length) {			int temp = nums[i];			int num = 1;			for (int j = i; j < nums.length; j++) {				if(i!=j && nums[j]==temp) {					num++;				}			}			if (num > major) {				break;			}            i++;		}    			return nums[i];    }     /**        解法二,高效,不好理解     * 题解中优秀解法     * 摩尔投票法:	核心就是对拼消耗。	玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。	那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。	最后能剩下的必定是自己人。     * @param nums     * @return     */    public int majorityElement2(int[] nums) {		int count = 1;		int maj = nums[0];		for (int i = 1; i < nums.length; i++) {			if (maj == nums[i])				count++;			else {				count--;				if (count == 0) {					maj = nums[i + 1];				}			}		}		return maj;    }}

 

转载地址:http://efuqb.baihongyu.com/

你可能感兴趣的文章
Windows 98 资源管理(转)
查看>>
认识 Windows 98 备份(转)
查看>>
Windows 98 禁止注册表检查器自动运行(转)
查看>>
Windows 98 注册表大修改(转)
查看>>
Windows 98 给回收站右键菜单增加重命名命令(转)
查看>>
科学的清理 Windows 98 注册表(转)
查看>>
Windows 98 桌面主题和用户管理(转)
查看>>
Windows 98 注册表妙用(转)
查看>>
自行添加欢迎对话框中的文本(转)
查看>>
Win2K Terminal Service使用经验(转)
查看>>
Windows 98 注册表应用的30个实例(转)
查看>>
为 Windows 98 的注册表数据库减肥(转)
查看>>
同时最小化多个Windows窗口(转)
查看>>
Windows Vista 内建管理员帐号被禁用(转)
查看>>
Geforce 4 MX 440强制Vista 开启玻璃效果(转)
查看>>
Windows Vista Beta2 中文版优化归类(转)
查看>>
用SQL进行多表查询(转)
查看>>
Oracle 9i管理的用户(转)
查看>>
Oracle 9i管理工具的使用(转)
查看>>
目前主流的两类关系型数据库系统(转)
查看>>