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

简介: 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50504698 翻译给定一个长度为n的数组,找出主要的元素。
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50504698

翻译

给定一个长度为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;
    }
};
目录
相关文章
|
22天前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
22天前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
29 2
|
22天前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
1月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
39 0
|
1月前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
12 0
|
3月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
2月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
18 0
|
3月前
|
存储 算法 Java
力扣经典150题第四十五题:存在重复元素 II
力扣经典150题第四十五题:存在重复元素 II
21 0
|
3月前
|
索引
leetcode题解:27.移除元素
leetcode题解:27.移除元素
25 0
下一篇
DDNS