leetcode(C++)之多数元素+存在重复元素+存在重复元素II

1.多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

方法一:哈希表

class Solution {
public:
    int majorityElement(vector& nums) {
       unordered_map m;
    int len=nums.size()/2;
    for(int i=0;ilen) return nums[i];
    }
    return 0; 
    }
};

方法二:排序

感觉官方题解中说的众数不太准确,众数是一组数据中出现最多的数值,应该说多数元素也即是在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。对数组进行排序,返回下标为 ⌊ n/2 ⌋ 所对应的值,如果采用sort函数的话执行用时太长。

方法三:Boyer-Moore投票

官方题解给出的这个投票法的执行用时和内存消耗都要好于前两种。

class Solution {
public:
    int majorityElement(vector& nums) {
         int count=0;
    int candidate=nums[0];
    for(int i=0;i

2.存在重复元素

给定一个整数数组,判断是否存在重复元素。这道题目的标签是哈希表和数组,

方法一:哈希表

class Solution {
public:
    bool containsDuplicate(vector& nums) {
unordered_map m;
    for(int i=0;i

方法二:线性查找

线性查找是查找特定值是否在列表中的算法,做法就是逐个检查列表中的元素直到找到满足的元素。

3.存在重复元素II

比上一题目进阶的形式。给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。

class Solution {
public:
    bool containsNearbyDuplicate(vector& nums, int k) {
unordered_map m;
    for(int i=0;i

 

 

你可能感兴趣的:(leetcode(C++)之多数元素+存在重复元素+存在重复元素II)