LeetCode 169 Majority Element(主要元素)(vector、map)

翻译

给定一个长度为n的数组,找出主要的元素。

所谓主要的元素是指的出现次数超过? n/2 ?次的元素。

你可以假定这个数组是非空的,并且“主要元素”一定是存在的。

原文

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.

分析

既然题意说了这个主要元素是一定存在的,我就钻了空子,没打算去求什么n/2这东西,直接是所有序列中最长的。

1,2,2,3,3,3,3,3,4,4

-->

1-1
2-2
3-5
4-2

看到了键值对,想到了基本的map,还有些复杂的容器我就用的不太熟悉了……

在下面的代码这两个,我首先定义了element元素,然后用range-for从nums中便利所有的元素:

1)如果在map中找不到这个元素,就添加进去;

2)如果找到了,将其出现的个数加上1。如果当前的长度大于最大的长度,则进行一些列操作,并将max设置为当前的n,以便于后面的返回。

调试之后发现还有nums长度为1的情况,于是在开头加上一个判断。

int majorityElement(vector<int>& nums) {
    if (nums.size() == 1) return nums[0];
    map<int, int> element;
    int max = 0, maxLen = 0;
    for (auto n : nums) {
        if (element.find(n) == element.end()) {
            element.insert(map<int, int>::value_type(n, 1));
        }
        else {
            element[n] += 1;
            if (element[n] >= maxLen) {
                maxLen = element[n];
                max = n;
            }
        }
    }
    return max;
}

代码

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        if (nums.size() == 1) return nums[0];
        map<int, int> element;
        int max = 0, maxLen = 0;
        for (auto n : nums) {
            if (element.find(n) == element.end()) {
                element.insert(map<int, int>::value_type(n, 1));
            }
            else {
                element[n] += 1;
                if (element[n] >= maxLen) {
                    maxLen = element[n];
                    max = n;
                }
            }
        }
        return max;
    }
};
时间: 2024-08-07 02:46:29

LeetCode 169 Majority Element(主要元素)(vector、map)的相关文章

leetCode 169. Majority Element 数组

169. Majority Element 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. 思路1: 使用m

Leetcode#169. Majority Element(求众数)

题目描述 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ? n/2 ? 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 思路 思路一: 利用哈希表的映射,储存数组中的数字以及它们出现的次数,当众数出现时,返回这个数字. 思路二: 因为众数是出现次数大于n/2的数字,所以排序之后中间的那个数字一定是众数.即nums[n/2]为众数.但是在计算比

[Lintcode]46. Majority Element/[Leetcode]169. Majority Element

46. Majority Element/[169. Majority Element(https://leetcode.com/problems/majority-element/) 本题难度: Easy Topic: Greedy Description Given an array of integers, the majority number is the number that occurs more than half of the size of the array. Find

leetcode 169 Majority Element 冰山查询

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. 思路: Find k different element

leetcode[169] Majority Element

在一个数组中找到主要的元素,也就是出现次数大于数组长度一半的元素. 我想到的方法是 1. 排序,然后扫描一次就知道了.总共nlgn 2. 哈希,记录每个次数,O(n)的时间和空间. class Solution { public: int majorityElement(vector<int> &num) { unordered_map<int, int> umap; for (int i = 0; i < num.size(); i++) { umap[num[i]

leetcode 169. Majority Element 多数投票算法(Boyer-Moore Majority Vote algorithm)

题目: 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. 题解:运用多数投票算法的思路来解:从头到尾遍历数

LeetCode 169. Majority Element解题方法

题目: 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. 也就是找数组中出现次数大于一半的数字,题目保证这

leetcode 169. Majority Element 求出现次数最多的数 --------- java

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. 给定一个数组,求其中权制最大的元素,(该元素出现超过了一

leetcode——169 Majority Element(数组中出现次数过半的元素)

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. Hide Tags: Divide and Conquer