229. Majority Element II

来源:互联网 发布:淘宝皇冠和天猫哪个好? 编辑:程序博客网 时间:2024/06/08 02:12

229. Majority Element II

  • Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.

  • 题目大意:给定一个大小为n的integer数组,找出出现[n/3]次的所有数。

  • 思路:见代码

  • 代码:

    package Array;  import java.util.ArrayList;  import java.util.List;  /**- @Author OovEver- @Date 2017/11/28 10:10  */    public class Solution {public List<Integer> majorityElement(int[] nums) {      if (nums == null || nums.length == 0)          return new ArrayList<Integer>();      List<Integer> result = new ArrayList<Integer>();        //        由于只有出现次数要大于[n/3],所以只可能有2个数大于[n/3],所以定义两个变量member1,member2用于定义可能出现的大于[n/3]的数,count1,count2分别记录member1和member2的数          int number1 = nums[0], number2 = nums[0], count1 = 0, count2 = 0, len = nums.length;      for (int i = 0; i < len; i++) {          if (nums[i] == number1)              count1++;          else if (nums[i] == number2)              count2++;          else if (count1 == 0) {              number1 = nums[i];              count1 = 1;          } else if (count2 == 0) {              number2 = nums[i];              count2 = 1;          } else {              count1--;              count2--;          }      }      count1 = 0;      count2 = 0;      for (int i = 0; i < len; i++) {          if (nums[i] == number1)              count1++;          else if (nums[i] == number2)              count2++;      }      if (count1 > len / 3)          result.add(number1);      if (count2 > len / 3)          result.add(number2);      return result;  }}
原创粉丝点击