[Leetcode] Majority Element 众数

Majority Element I

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.

哈希表法

复杂度

时间 O(N) 空间 O(N)

思路

在遍历数组的过程中,用一个哈希表记录每个数出现过的次数,如果该次数大于一半,则说明是众数。

排序法

复杂度

时间 O(NlogN) 空间 O(1)

思路

将数组排序,这时候数组最中间的数肯定是众数。

代码

public class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}
}

位操作法

复杂度

时间 O(N) 空间 O(1)

思路

假设一个数是最多只有32位的二进制数,那么我们从第一位到第32位,对每一位都计算所有数字在这一位上1的个数,如果这一位1的个数大于一半,说明众数的这一位是1,如果小于一半,说明大多数的这一位是0。

投票法

复杂度

时间 O(N) 空间 O(1)

思路

记录一个candidate变量,还有一个counter变量,开始遍历数组。如果新数和candidate一样,那么counter加上1,否则的话,如果counter不是0,则counter减去1,如果counter已经是0,则将candidate更新为这个新的数。因为每一对不一样的数都会互相消去,最后留下来的candidate就是众数。

代码

public class Solution {public int majorityElement(int[] nums) {int candidate = nums[0], cnt = 0;for(int i = 1; i < nums.length; i++){if(candidate == nums[i]){cnt++;} else if(cnt==0){candidate = nums[i];} else {cnt--;}}return candidate;}
}

Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.

投票法

复杂度

时间 O(N) 空间 O(1)

思路

上一题中,超过一半的数只可能有一个,所以我们只要投票出一个数就行了。而这题中,超过n/3的数最多可能有两个,所以我们要记录出现最多的两个数。同样的两个candidate和对应的两个counter,如果遍历时,某个候选数和到当前数相等,则给相应计数器加1。如果两个计数器都不为0,则两个计数器都被抵消掉1。如果某个计数器为0了,则将当前数替换相应的候选数,并将计数器初始化为1。最后我们还要遍历一遍数组,确定这两个出现最多的数,是否都是众数。

代码

public class Solution {public List<Integer> majorityElement(int[] nums) {List<Integer> res = new ArrayList<Integer>();if(nums.length == 0) return res;int c1 = 1, c2 = 0, n1 = nums[0], n2 = 0;for(int i = 1; i < nums.length; i++){// 如果和某个候选数相等,将其计数器加1if(nums[i] == n1){c1++;} else if(nums[i] == n2){c2++;// 如果都不相等,而且计数器都不为0,则计数器都减1} else if(c1 != 0 && c2 != 0){c1--;c2--;// 如果某个计数器为0,则更新相应的候选数} else {if(c1 == 0){n1 = nums[i];c1 = 1;} else {n2 = nums[i];c2 = 1;}}}c1 = 0;c2 = 0;for(int i = 0; i < nums.length; i++){if(nums[i] == n1) c1++;else if(nums[i] == n2) c2++;}if(c1 > nums.length / 3) res.add(n1);if(c2 > nums.length / 3) res.add(n2);return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组和指针的区别

1、访问方式不同 ⑴数组的下标引用&#xff08;读一次内存&#xff09; char ary[5] "hello",c; ...... c ary[2]; ⑵对指针的引用&#xff08;读两次内存&#xff09; char *P,c; ...... c *p;   ⑶对指针进行下标引用&#xff08;读两次内存&#xff09; char…

SQL图像查看器 —— SQL Image Viewer

有时候往数据库里面存储了一些图片&#xff0c;但是如果不写读取程序的话&#xff0c;就不知道存储的对不对。 或者查看SQL数据库里面二进制看不懂&#xff0c;这个看图片很直观的。 就需要SQL Image Viewer这么一个?B的软件了 自己去找下载地址吧&#xff0c;我没有破解版。 …

wordpress 删除自定义字段

//删除自定义字段 global $wpdb; $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key 友情链接-链接 " ); 添加在 主题的 functions.php 文件中&#xff0c;刷新后台&#xff0c;生效。

全局变量,extern和static以及命名空间的区别

全局变量&#xff0c;extern和static以及命名空间的区别全局变量只是在声明它的文件中有效&#xff0c;假如在另一个文件中声明定义了一个相同名称的全局变量&#xff0c;则在后续使用这两个变量的时候会产生名字上的冲突&#xff0c;解决的办法就是将其中一个全局变量的声明写…

Docker1.8在Centos7下的安装

1.创建docker的yum库[rootlocalhost~]# cd /etc/yum.repos.d/[rootlocalhostyum.repos.d]# vim docker.repo[dockerrepo]nameDockerRepositorybaseurlhttps://yum.dockerproject.org/repo/main/centos/7enabled1gpgcheck1gpgkeyhttps://yum.dockerproject.org/gpg&#xff08;2…

wordpress插件使用教程 – 使用Google Language Translator 实现网站多语言在线翻译

https://www.wordpresshy.com/17600 在使用WordPress进行企业建站的时候会碰到一些网站需要中英双语言&#xff0c;这时候就需要WPML插件的使用。需要使用WPML进行网站翻译的站长可以点击查看以下文章 : WordPress中翻译网站&#xff08;WPML插件&#xff09;的使用 但是WPML的…

Oracle服务器连接

1 Oracle服务器的两类连接方式Oracle数据库连接有多种方式&#xff0c;按照客户端和服务器端是否同机运行可分成两大类&#xff0c;一是本地连接&#xff0c;二是通过网络连接。本地连接。顾名思义&#xff0c;就是客户端程序和服务器程序运行在同一台机器上。安装Oracle时&…

Object C学习笔记13-Dictionary字典

通过Array数组和Set集合的学习和理解&#xff0c;可以想象得到Dictionary也分为两种情况了&#xff0c;那就是可变和不可变两种类型的。的确如此&#xff0c;在Object C中提供了两个字典类&#xff0c;分别为NSDictionary 和 NSMutableDictionary. 在.NET中我们也学习过Diction…

零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承

1 类内的成员函数和普通函数的对比 1.1 主要是从参数传递、压栈顺序、堆栈平衡来总结. 1.参数传递&#xff1a;成员函数多传一个this指针 2.压栈顺序&#xff1a;成员函数会将this指针压栈&#xff0c;在函数调用取出 3.堆栈平衡&#xff1a;普通函数是外平栈 对比图如下&#…

Wordpress基础:精简头部wp_head

https://www.cnblogs.com/tinyphp/p/5859167.html Wordpress基础&#xff1a;精简头部wp_head 在Wordpress里 <?php wp_head(); ?> wp_head()是一个重要的函数&#xff0c;它允许插件开发者向你的站点动态地添加CSS和javascript&#xff0c;如果我们不在模板中引入这…

Nodejs架构之json空处理

2019独角兽企业重金招聘Python工程师标准>>> 判断一个json是否存在某个对象。 正确的做法是 data {"mch_id":"12345678","hb_type":"NORMAL","hblist":"dddd"}; if(data ! null && data.hbli…

C#代码计时

using System.Diagnostics;Stopwatch sw new Stopwatch(); sw.Start(); //todo code ....... sw.Stop(); Console.WriteLine("执行此段代码耗时&#xff1a;{0} ms", sw.ElapsedMilliseconds); 转载于:https://www.cnblogs.com/songtzu/p/3593462.html

【37.68%】【hdu 5918】Sequence I

Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 706 Accepted Submission(s): 266 Problem Description Mr. Frog has two sequences a1,a2,⋯,an and b1,b2,⋯,bm and a number p. He wants to know the number o…

WordPress的body_class()函数详解

https://www.cnblogs.com/xcxc/p/3658903.html WordPress的body_class()函数详解 wordpress的body_class()函数&#xff0c;顾名思义&#xff0c;这个函数根据不同的页面类型为body标签生成class选择器&#xff0c;从而让设计人员可以各方便灵活的控制不同页面中的各个元素。本…

表达式求值及转换算法

2019独角兽企业重金招聘Python工程师标准>>> 后缀表达式求值算法 stack operands; //运算数栈 while(没到表达式尾) {scanf("一个运算对象op");if(op is 运算数)operands.push(op);else if(op is 运算符){operand_right operands.pop();operand_left o…

2017-10-06-构建之法:现代软件工程-阅读笔记

单元测试&#xff1a; 常见单元测试的核心步骤&#xff1a;设置数据&#xff0c;使用被测试类型的功能&#xff0c;比较实际结果和预期的结果 好的单元测试的标准&#xff1a; 应在最基本的功能、参数上验证程序的正确性 应由程序的作者写 测试完毕后机器状态保持不变 要快 独立…

Use Selenium webdriver in Javascript

目标 分别用Firefox和Chrome打开google主页&#xff0c;输入selenium进行搜索&#xff0c;3秒后&#xff0c;再输入nodejs进行搜索。 环境需求 1. javascript运行平台&#xff1a;nodejs2. node module: selenium-webdriver在命令行中运行npm -g install selenium-webdriv…

关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市

&#xfeff;&#xfeff;承蒙广大读者的厚爱我的 《iOS实战&#xff1a;传感器卷&#xff08;Swift版&#xff09;》京东上市了&#xff0c;欢迎广大读者提出宝贵意见。http://item.jd.com/11760248.html 欢迎关注关东升新浪微博tony_关东升。 关注智捷课堂微信公共平台&#…

带分页的标签

原型图 图片.png重要的实现代码 var getMemo function(pageNo,name){$(#dataDiv).html("");$.ajax({url: basePath "/signIn/set/getSignSetListPage",datatype: json,type: "POST",data: { "pageNo": pageNo,"name":name…

jquery复选框 选中事件 及其判断是否被选中_常用笔记

checkbox的change事件可监听是否选中状态&#xff0c;也可添加onclick事件。var dom$(.checkbox);1. 判断checkbox是否被选中 var dom$(.checkbox);dom.prop(checked); //实现控制checkbox是否选中状态: 切换到初始状态  if (!(dom.prop(checked))) {   dom.prop(c…