[LeetCode][数论]Majority Element
2016-03-21 15:30
141 查看
题目描述:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
思路:
前提条件:数据中有一个元素出现的个数超过数组长度的一半,求出这个元素
过程:要找出数组中出现个数最多的元素,遍历和计数是一定的,最基本的是HashMap存储,但能不能节省一点存储空间呢?因为题目给定的是出现的个数超过其他所有的数字,所以可以采用一个标记元素,记录一个数据,策略是:如果元素i是记录下来的数据,计数加一;如果当前计数为0,说明之前不存在出现超过数据长度二分之一的数字,重复将当前元素赋值给标记元素,计数为1;如果元素i既不是当前记录元素,计数值也不为0,则应该将计数减一,抵消依次出现的次数,最后,返回当前记录元素
代码实现:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
思路:
前提条件:数据中有一个元素出现的个数超过数组长度的一半,求出这个元素
过程:要找出数组中出现个数最多的元素,遍历和计数是一定的,最基本的是HashMap存储,但能不能节省一点存储空间呢?因为题目给定的是出现的个数超过其他所有的数字,所以可以采用一个标记元素,记录一个数据,策略是:如果元素i是记录下来的数据,计数加一;如果当前计数为0,说明之前不存在出现超过数据长度二分之一的数字,重复将当前元素赋值给标记元素,计数为1;如果元素i既不是当前记录元素,计数值也不为0,则应该将计数减一,抵消依次出现的次数,最后,返回当前记录元素
代码实现:
public class Solution { public int majorityElement(int[] nums) { if(nums.length == 1){ return nums[0]; } int m1 = nums[0]; int c1 = 0; for(int i = 0; i<nums.length; i++){ int x = nums[i]; if(x == m1) ++c1; else if(c1 == 0){ m1 = x; c1 = 1; }else{ --c1; } } return m1; } }
相关文章推荐
- RecyclerView 23.2.0新特性
- 【PB】数据窗口的修改属性
- fir.im Weekly - 人人都需要的 IT 技能图谱
- java io exception Broken Pipe
- 最大数
- Java异常的深入研究与分析
- 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
- 机器学习之深度强化学习
- shell-3-string
- C#成魔之路<16> C#新技术
- C语言交换赋值函数
- Office Phishing
- 无符号byte数据操作,多个无符号byte合并,byte解析成多个二进制数据
- 如何在VS2013下安装MSDN并且独立查看
- 程序员的个人形象
- 微信公众帐号开发教程第3篇-消息及消息处理工具的封装
- iOS开发调试
- setTextFilterEnabled()
- 1.插入排序—直接插入排序(Straight Insertion Sort)
- Java并发编程:线程池的使用