LintCode之主元素

题目描述:

 

分析:由题目可知这个数组不为空且该主元素一定存在,我选用HashMap来存储,HashMap的存储结构是”键—值对“,”键“用来存储数组元素,”值“用来存储这个元素出现的次数,然后循环遍历这个HashMap,当发现有一个”键“对应的”值“大于数组元素个数的二分之一时,将这个”键“返回。

代码:

 1 public class Solution {
 2     /*
 3      * @param nums: a list of integers
 4      * @return: find a  majority number
 5      */
 6     public int majorityNumber(List<Integer> nums) {
 7         // write your code here
 8         HashMap<Integer,Integer> h = new HashMap<Integer,Integer>();
 9         
10         int major = 0;
11         
12         for(int i=0; i<nums.size(); i++) {
13             //如果该元素已存在HashMap之中
14             if(h.containsKey(nums.get(i))) {
15                 //将元素个数取出,并加1,再存回去
16                 int num = h.get(nums.get(i));
17                 num += 1;
18                 h.put(nums.get(i), num);
19             }else {
20                 h.put(nums.get(i), 1);
21             }
22         }
23         
24         int mid = nums.size()/2;
25         
26         for(int i=0; i<nums.size(); i++) {
27             if(h.get(nums.get(i)) > mid) {
28                 major = nums.get(i);
29                 break;
30             }
31         }
32         return major;
33     }
34 }

 

posted @ 2017-10-28 19:45  zwt3  阅读(190)  评论(0编辑  收藏  举报