leetcode 169. Majority Element 、229. Majority Element II
169. Majority Element
求超过数组个数一半的数
可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n)
- class Solution {
- public:
- int majorityElement(vector<int>& nums) {
- unordered_map<int,int> count;
- int n=nums.size();
- for(int i=;i<n;i++){
- if(++count[nums[i]]>n/) return nums[i];
- }
- return ;
- }
- };
使用投票法,时间复杂度为O(n),空间复杂度为O(1)。
投票法就是记录出现的频次
leetcode是默认了有超过的,所以可以直接这样返回。像剑指offer上,还要用这个数去累加计算看是否真的超过了n/2。
- class Solution {
- public:
- int majorityElement(vector<int>& nums) {
- int freq = ;
- int res;
- for(int i = ;i < nums.size();i++){
- if(freq == ){
- res = nums[i];
- freq++;
- }
- else if(nums[i] == res)
- freq++;
- else
- freq--;
- }
- return res;
- }
- };
229. Majority Element II
求个数超过n/3的数
首先明确最多只有可能有2个数超过,如果有3个数都超过了,那数组的个数肯定大于n了。
还是使用投票法。
错误写法:这个写法先去考虑了freq1、2,实际上应该首先考虑是否和当前数字相当,如果不相等再去考虑freq的问题
Input:
[1,2,2,3,2,1,1,3]
Output:
[1]
Expected:
[2,1]
- class Solution {
- public:
- vector<int> majorityElement(vector<int>& nums) {
- vector<int> result;
- int num1,num2,freq1 = ,freq2 = ;
- for(int i = ;i < nums.size();i++){
- if(freq1 == ){
- num1 = nums[i];
- freq1++;
- }
- else if(nums[i] == num1)
- freq1++;
- else if(freq2 == ){
- num2 = nums[i];
- freq2++;
- }
- else if(nums[i] == num2)
- freq2++;
- else{
- freq1--;
- freq2--;
- }
- }
- freq1 = ,freq2 = ;
- for(int i = ;i < nums.size();i++){
- if(nums[i] == num1)
- freq1++;
- if(nums[i] == num2)
- freq2++;
- }
- if(freq1 > nums.size()/)
- result.push_back(num1);
- if(freq2 > nums.size()/ && num1 != num2)
- result.push_back(num2);
- return result;
- }
- };
正确写法:
- class Solution {
- public:
- vector<int> majorityElement(vector<int>& nums) {
- vector<int> result;
- int num1 = ,num2 = ,freq1 = ,freq2 = ;
- for(int i = ;i < nums.size();i++){
- if(nums[i] == num1)
- freq1++;
- else if(nums[i] == num2)
- freq2++;
- else if(freq1 == ){
- num1 = nums[i];
- freq1++;
- }
- else if(freq2 == ){
- num2 = nums[i];
- freq2++;
- }
- else{
- freq1--;
- freq2--;
- }
- }
- freq1 = ,freq2 = ;
- for(int i = ;i < nums.size();i++){
- if(nums[i] == num1)
- freq1++;
- else if(nums[i] == num2)
- freq2++;
- }
- if(freq1 > nums.size()/)
- result.push_back(num1);
- if(freq2 > nums.size()/)
- result.push_back(num2);
- return result;
- }
- };
leetcode 169. Majority Element 、229. Majority Element II的更多相关文章
- leetcode 79. Word Search 、212. Word Search II
https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...
- leetcode 54. Spiral Matrix 、59. Spiral Matrix II
54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...
- leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II
131. Palindrome Partitioning substr使用的是坐标值,不使用.begin()..end()这种迭代器 使用dfs,类似于subsets的题,每次判断要不要加入这个数 s ...
- leetcode 280.Wiggle Sort 、324. Wiggle Sort II
Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...
- leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST
1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...
- leetcode 62. Unique Paths 、63. Unique Paths II
62. Unique Paths class Solution { public: int uniquePaths(int m, int n) { || n <= ) ; vector<v ...
- leetcode 198. House Robber 、 213. House Robber II 、337. House Robber III 、256. Paint House(lintcode 515) 、265. Paint House II(lintcode 516) 、276. Paint Fence(lintcode 514)
House Robber:不能相邻,求能获得的最大值 House Robber II:不能相邻且第一个和最后一个不能同时取,求能获得的最大值 House Robber III:二叉树下的不能相邻,求能 ...
随机推荐
- 精读《react-easy-state 源码》
1. 引言 react-easy-state 是个比较有趣的库,利用 Proxy 创建了一个非常易用的全局数据流管理方式. import React from "react"; i ...
- Java虚拟机详解----JVM内存结构
http://www.cnblogs.com/smyhvae/p/4748392.htm 主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启 ...
- ueditor上传图片尺寸过大导致显示难看的解决办法
昨天遇到这个问题,我也是折腾成了狗, 到处查,最后收集到三个办法,记录一下. 代码贴这里,方便复制 img { max-width: 100%; /*图片自适应宽度*/ } body { overfl ...
- Java开发知识之Java中的泛型
Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...
- Spring Boot(十三)RabbitMQ安装与集成
一.前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列,异步接收和发送消息,MQ的全程是:Message Queue中文的意思是消息队列. 1.1 使用场 ...
- 【Zabbix】CentOS6.9系统下部署Zabbix-agent
目录 安装Zabbix-agent 1.安装YUM源 2.安装Zabbix agent端 3.配置zabbix_agentd.conf文件 4.启动zabbix agent服务 5.zabbix图形界 ...
- SDWebImage源码解析
但凡经过几年移动开发经验的人去大公司面试,都会有公司问到,使用过哪些第三方,看过他们的源码嘛?而SDWebImage就是经常被面试官和应聘者的提到的.下面将讲述SDWebImage的源码解析以及实现原 ...
- DSAPI多功能组件编程应用-网络相关(上)
[DSAPI.DLL下载地址] DSAPI多功能组件编程应用-网络相关,网络相关编程有很多很多,这里讲解一下封装在DSAPI中的网络相关的功能,这些都是本人简化到极点的功能了,可以在软件开发过程中节 ...
- InnoSetup 客户端程序打包教程
之前介绍过InstallShield打包工具,本文再介绍更加方便的打包工具Inno Setup Inno Setup相对来说,比InstallShield更容易使用,不需要在VS中创建项目,只要提供D ...
- 【小o地图Excel插件版】不止能做图表,还能抓58、大众点评网页数据...
小o地图Excel插件版:一款基于Excel软件开发的地图软件,提供基于Excel表格进行地理数据挖掘.地理数据分析.地图绘制.地图图表等功能的工具类软件.具有易用.高效.稳定的特点,能够满足地理数据 ...