C#LeetCode刷题之#169-求众数(Majority Element)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4048 访问。
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
输入: [3,2,3]
输出: 3
输入: [2,2,1,1,1,2,2]
输出: 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.
Input: [3,2,3]
Output: 3
Input: [2,2,1,1,1,2,2]
Output: 2
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4048 访问。
public class Program {
    public static void Main(string[] args) {
        int[] nums = { 2, 2, 1, 1, 1, 2, 2 };
        var res = MajorityElement(nums);
        Console.WriteLine($"{res}");
        res = MajorityElement2(nums);
        Console.WriteLine($"{res}");
        res = MajorityElement3(nums);
        Console.WriteLine($"{res}");
        Console.ReadKey();
    }
    private static int MajorityElement(int[] nums) {
        //哈希法
        var dic = new Dictionary<int, int>();
        int maxCount = nums.Length / 2;
        for(int i = 0; i < nums.Length; i++) {
            if(dic.ContainsKey(nums[i])) {
                dic[nums[i]]++;
            } else {
                dic[nums[i]] = 1;
            }
            if(dic[nums[i]] > maxCount) {
                return nums[i];
            }
        }
        return -1;
    }
    private static int MajorityElement2(int[] nums) {
        int result = 0;
        for(int i = 0, count = 0; i < nums.Length; i++) {
            if(count == 0 || result == nums[i]) {
                //当计数为0时,重置计数和结果
                //当上一次记录的值和本次相同时,增加计数
                count++;
                result = nums[i];
            } else {
                //当上一次记录的值和本次不相同时,减少计数
                count--;
            }
        }
        //最后记录的值,一定是众数
        return result;
    }
    private static int MajorityElement3(int[] nums) {
        //基于一个事实,排序后的数组最中间的那个数一定是众数
        Array.Sort(nums);
        return nums[nums.Length / 2];
    }
}以上给出3种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4048 访问。
2
2
2分析:
显而易见,MajorityElement和MajorityElement2的时间复杂度均为:  ,MajorityElement3的时间复杂度基于Array.Sort()所使用的排序算法。
C#LeetCode刷题之#169-求众数(Majority Element)的更多相关文章
- [Swift]LeetCode169. 求众数 | Majority Element
		Given an array of size n, find the majority element. The majority element is the element that appear ... 
- Leetcode之分治法专题-169. 求众数(Majority Element)
		Leetcode之分治法专题-169. 求众数(Majority Element) 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是 ... 
- 【Leetcode】【简单】【169求众数】【JavaScript】
		题目 169. 求众数 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [ ... 
- LeetCode刷题总结-数组篇(下)
		本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ... 
- C#LeetCode刷题-位运算
		位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 ... 
- C#LeetCode刷题-分治算法
		分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ... 
- C#LeetCode刷题-数组
		数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ... 
- LeetCode刷题笔记和想法(C++)
		主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ... 
- C#LeetCode刷题-树
		树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历 61.6% 中等 95 不同的二叉搜索树 II 43.4% 中等 96 不同的二叉搜索树 51.6% 中等 98 验证二叉搜索树 ... 
- leetcode刷题目录
		leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ... 
随机推荐
- Ethical Hacking - GAINING ACCESS(8)
			Server Side Attacks NeXpose - configure and launch a scan Configure and initialize the application. ... 
- 一位Google高管审查了20,000+简历,他发现了这5个致命的错误
			工作与生活的平衡 下班划水摸鱼时间,我比较喜欢浏览一下各类新闻网页,比如说ins,这不,我就在ins上看到了这样的一篇文章,内容很简单,就是简历,但是就是这样一份简历,却让这位Google高管震惊不已 ... 
- metaspolit下UAC提权以及日志清除
			在获得webshell时但权限不够大,这时候为了完全获得受害者机器的权限,使用msf进行后渗透. 一.获取Meterpreter会话 Meterpreter 是msf的一个payload,目标执行之后 ... 
- 深入理解JVM(一)Java内存区域
			运行时数据区 程序计数器 当前线程执行的字节码的行号指示器 每条线程都有独立的程序计数器,各线程之间计数器互不影响,独立存储. 如果执行的是java方法,计数器记录正在执行的虚拟机字节码指令的位置: ... 
- CentOS 下的验证码显示问题
			开发环境 AND 生产环境.gif 问题: 项目部署到 CentOS 的服务器后,图片验证码请求时出现 500 错误, 日志一直是 ArrayIndexOfBoundsException:0,数组第 ... 
- ST表解决RMQ问题
			RMQ问题: RMQ(Range Minimum/Maximum Query),区间最值查询.对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间 ... 
- Go的安装和使用
			1.安装环境 进入Golang官网,进入下载页面. (如果打不开可访问Golang中国,或者Golang中文版,或者百度网盘,提取码:wfw5) 根据实际需求选择版本进行下载. 运行下载好的MSI安装 ... 
- 正在找工作的同学看过来,zozo最新的java面试题总会,学会月薪3万起!!!
			引言 为正在找工作的同学提供些许帮助,话不多说直接上题. 关注后私信我[资料]即可免费获取! 关注后私信我[资料]即可免费获取! 关注后私信我[资料]即可免费获取! 关注后私信我[资料]即可免费获取! ... 
- MySQL组复制MGR(四)-- 单主模式与多主模式
			(一)概述 组复制可以运行在单主模式下,也可以运行在多主模式下,默认为单主模式.组的不同成员不能部署在不同模式下,要切换模式,需要使用不同配置重新启动组而不是单个server. 相关参数如下: # 该 ... 
- java基础(七)--键盘输入
			一.示例 package cnblogs; import java.util.Scanner; public class TestBase07IO { public static void main( ... 
