[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插件使用教程 – 使用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…

表达式求值及转换算法

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

关东升的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…

Apache2 部署flask项目

Apache2 部署flask项目 需要安装的插件&#xff1a; apt-get install apache2 apt-get install libapache2-mod-wsgi 在 /etc/apache2/sites-available/ 目录下创建对应的项目配置文件“xxx.conf”&#xff0c;用于项目与Apache2之间的链接(配置文件名自定义)&#xff1a;…

[iOS Animation]-CALayer 性能优化实例

2019独角兽企业重金招聘Python工程师标准>>> 一个可用的案例 现在我们已经对Instruments中动画性能工具非常熟悉了&#xff0c;那么可以用它在现实中解决一些实际问题。 我们创建一个简单的显示模拟联系人姓名和头像列表的应用。注意即使把头像图片存在应用本地&…

WordPress 多语言支持(本地化)

https://www.cnblogs.com/ryanzheng/p/8309261.html WordPress 多语言支持&#xff08;本地化&#xff09; 本博客将介绍WordPress的多语言制作 首先需要在wp-content目录下创建一个languages文件夹&#xff0c;用于存放语言包文件。 然后在模板目录下的functions.php&…

ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群

前言: 前段时间自己参考网上的文章&#xff0c;梳理了一下基于分布式环境部署的业务系统在解决数据一致性问题上的方案&#xff0c;其中有一个方案是使用ZooKeeper&#xff0c;加之在大数据处理中&#xff0c;ZooKeeper确实起到协调服务的作用&#xff0c;所以利用周末休息时间…

解决SublimeCodeIntel回车换行误打代码

SublimeCodeIntel会自动匹配并联想词汇, 这在换行的时候非常麻烦, 每次点Enter 都会误打出代码, 解决办法分两步:第一步是在Perferences/setting User 中加入 "auto_complete_commit_on_tab": true, 然后看Perferences/KeyBindings Default中 { "keys": [&…

Html5响应式设计与实现广场

由于提出的想法响应式设计&#xff0c;越来越多的网站使用这样的思想。各类大型网站如雨后春笋般涌了出来。例如&#xff1a;小米商城。天猫等。 至于响应式设计的概念等大家能够去百度百度&#xff0c;我这里就不相信解说了。直接为大家带来源代码。用Html5实现响应式的九宫格…

工作问题日志

1. 获取用户请求的路径&#xff1a;HttpServletRequest request (HttpServletRequest) req;String servletPath request.getServletPath(); 2. 相对通用的读文件流的方法&#xff08;Windows 和 Linux上都可以用&#xff09;&#xff1a;拿到流&#xff0c;然后再去读流中的内…

【j360-boot】Spring-boot系列三(崩溃模式,不是你崩就是电脑崩)

2019独角兽企业重金招聘Python工程师标准>>> j360-boot spring-boot入门工程之j360-boot&#xff1a;&#xff08;欢迎star、fork&#xff09; https://github.com/xuminwlt/j360-boot spring-boot官方地址 http://projects.spring.io/spring-boot/ 【j360-boot】Sp…

裸眼3D全攻略3:拍摄3D—瞳距、镜距、视角偏转与空间感

http://sd89.blog.163.com/blog/static/356041322014112532958728/ 3D图片的拍摄&#xff0c;与平面有着全新的不同要求&#xff0c;那就是空间感的表现。 简单来说&#xff0c;空间感是由两条视线分别从左右不同的视角&#xff0c;各自获取物体左右两面的不同信息交汇而产生的…