字符串算法——查找数组多数元素(Majority Element II)

来源:互联网 发布:java ssh协议jar包 编辑:程序博客网 时间:2024/06/17 07:26

问题:
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.
思路一:与前述的majority element类似,采用直接遍历计算元素出现的次数,如果超过总长度的13,则就是目标值。
思路二:同前述的查找Majority element类似,舍弃掉三个不同的值是不影响原数组中的Majority element;在这里最多存在两个Majority element

class Solution {    public List<Integer> majorityElement(int[] nums) {        // if(nums.length<1)return null;        int max1=Integer.MAX_VALUE;//存储出现次数最多的元素        int max2 =Integer.MIN_VALUE;//存储出现次数第二多的元素        int count1 = 0;        int count2 = 0;        for(int i=0;i<nums.length;i++){//遍历数组            if(nums[i]==max1){                count1++;            }else if(nums[i]==max2){                count2++;            }else if(count1 ==0){                max1= nums[i];                count1 = 1;            }else if(count2 == 0){                max2 =nums[i];                count2 =1;            }else{//舍弃三个不同值                count1--;                count2--;            }        }        List<Integer> res = new ArrayList<>();        count2 = count1 =0;        //计算元素出现的次数        for(int i = 0;i<nums.length;i++){            if(nums[i]==max1){                count1++;            }            if(nums[i]==max2){                count2++;            }        }        //判断majority element        if(count1>nums.length/3){            res.add(max1);        }        if(count2>nums.length/3){            res.add(max2);        }        return res;    }}
阅读全文
0 0
原创粉丝点击