首页 > 试题广场 >

找出一个数组中出现次数超过半数的元素(保证答案存在)

[问答题]
 找出一个数组中出现次数超过半数的元素(保证答案存在)
from collections import Counter
def Findelement(arr):
    obj = collections.Counter(arr)
    return [k for k,v in obj.items() if v >len(arr)/2]

发表于 2019-08-06 11:13:51 回复(0)
def Moore_voting(list_):
    curIdx = 0
    count = 1
    for i in range(1, len(list_)):
        if list_[i] == list_[curIdx]:
            count += 1
        else:
            count -= 1
        if count == 0:
            curIdx = i
            count = 1
    return list_[curIdx]

发表于 2019-08-05 12:21:35 回复(1)
// // Created by oujie on 2019-08-05. //  #include <iostream> #include <vector> #include <unordered_map> using namespace std; class Solution{ public: int findMoreHalf(vector<int> array){ unordered_map<int,int> mymap; for(auto num:array){ auto iter=mymap.find(num); if(iter==mymap.end()){
                mymap.insert(pair<int,int>(num,1));
            }else{
                (iter->second)+=1; if((iter->second)>(array.size()/2.)) return iter->first;
            }
        }
    }
}; int main(){
    vector<int> nums={1,1,1,2,2,2,2,2,3};
    Solution s;
    cout<<s.findMoreHalf(nums); return 0;
}

发表于 2019-08-05 13:42:29 回复(0)
觉得摩尔投票法比较好
发表于 2019-08-03 20:06:42 回复(0)
利用set原理依次遍历数组,如果该元素出现的次数大于数组长度,就输出该元素.
for(int i =0;i<len;i++)
     {
       cnt[num[i]]++;
        if(cnt[num[i]]>=(len/2 +1){
            print("%d",num[i]);
            break;
          }
}

发表于 2019-08-01 10:51:32 回复(0)
#include<iostream>

using namespace std;

class Solution{
    public:
    int overhalf(vector<int>nums){
        int count=1;
        int cur=nums[0];
        for(int i=1;i<n;i++){
            if(count==0){
                cur=nums[i];
                count=1;
                continue;
                }
            if(nums[i]==cur){count++;}
            else{
                count--;
            }

        }
        return cur;
    }
}

发表于 2020-05-07 17:43:16 回复(0)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;


public class Ans {
	public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	int n = sc.nextInt();
	int[] arr = new int[n];
	Map<Integer, Integer> map = new HashMap<Integer, Integer>();
	for (int i = 0; i < arr.length; i++) {
		if(map.containsKey(arr[i])){
			map.put(arr[i], map.get(arr[i]+1));
		}else{
			map.put(arr[i], 1);
		}
	}
	ArrayList<Integer> list = new ArrayList<>(map.keySet());
	for (int i = 0; i < list.size(); i++) {
		if(map.get(list.get(i))>n/2){
			System.out.println(list.get(i));
		}
	}
}
}

发表于 2019-08-15 20:50:34 回复(0)