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:二叉树下的不能相邻,求能 ...
随机推荐
- VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
AlbumView控件 一. 样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的“Smobiler Components”拖动一个AlbumView控件到窗体界面上 修改 ...
- 6-Redis 的持久化之 AOF
2017-01-01 16:42:13 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...
- ECMASCript 2019可能会有哪些特性?
最近这些年,ECMASCript标准发展节奏非常稳定,每年都会发布新的特性.那么,ECMASCript 2019可能会有哪些特性呢? ECMASCript语法提案的批准流程 JavaScript的标准 ...
- 【代码笔记】Web-CSS-CSS Float(浮动)
一, 效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- input 图片上传,第二次上传同一张图片失效
<input type="file" onchange="angular.element(this).scope().addPhoto(this,event)&qu ...
- win10系统下安装MySQLdb和pymysql
(1)使用的是Python3.6,想要使用MySQLdb, 需要先在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient中下载相应版本的包 ...
- OpenCL中的half与float的转换
在kernel中使用half类型可以在牺牲一定精度的代价下来提升运算速度. 在kernel中, 可以比较方便的对half数据进行计算, 但在host上的, 对half的使用就没那么方便了. 查看cl_ ...
- 腾讯云服务器配置node环境
1:更新现有包 sudo apt-get update 2:安装依赖 sudo apt-get install vim openssl build-essential libssl-dev wget ...
- C++ 死循环在语言层面的检测
英文概念 Infinite loop without side-effects 这个目前只有CLang实现了这个C++特色 #include <iostream> int 费马定理() { ...
- MFC字体
GDI字体分3类:点阵字体(raster font).笔画字体(stroke font)和Truetype字体. 默认点阵字体有7种: System (用于SYSTEM_FONT) ...