[LeetCode 169. 多数元素] |刷题打卡

110 阅读1分钟

一、题目描述:

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

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3] 输出:3

示例 2:

输入:[2,2,1,1,1,2,2] 输出:2

引自:leetcode-cn.com/problems/ma…

题目链接:169. 多数元素

二、思路分析:

声明并且初始化用于计录出现的元素次数的变量count,初始值为1;

声明并初始化用于记录出现次数多的元素的值为result,初始值为数组的第一个元素。

遍历数组,分2种情况:

  1. value和当前记录的result值相同时,count计数加1;

  2. value和当前记录的result值不同时,count计数减1,直到count为0,更改当前记录result,并且给count计数赋值为1

最后返回用于记录出现次数多的元素的result。

三、AC 代码:

class Solution {
    func majorityElement(_ nums: [Int]) -> Int {
    	// 空数组直接返回
        if (nums.count < 1) {
            return 0;
        }
        // 声明用于计录出现的元素次数的变量count;
        var count : Int = 1;
        
        var result : Int = nums[0];
        // 遍历数组中的元素value 
        // 1. value和当前记录的result值相同时,count计数加1;
        // 2. value和当前记录的result值不同时,count计数减1,直到count为0,更改当前记录result,并且给count计数赋值为1
        for value in nums {
            if (value == result) {
                count += 1;
            } else {
                count -= 1;
                if (count == 0) {
                    result = value;
                    count = 1;
                }
            }
        }
        return result;
    }
}

四、参考学习网址

数组类算法

本文正在参与「掘金 3 月闯关活动」, 点击查看 活动详情