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:二叉树下的不能相邻,求能 ...
随机推荐
- 看看.NET Core几个Options的简单使用
前言 配置,对我们的程序来说是十分重要的一部分.或多或少都会写一部分内容到配置文件中去. 由其是在配置中心(Apollo等)做起来之前,配置文件一定会是我们的首选. 在.NET Core中,习惯的是用 ...
- Supervisor 为服务创建守护进程
今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...
- 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司已经强制iOS应用必须使用HTTPS协议开发(详见<苹果即将 ...
- 痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的relocatable文件(object, library). 前三节课里,痞子衡都是在给大家介绍嵌入式开发中的input文 ...
- JS引擎线程的执行过程的三个阶段(一)
浏览器首先按顺序加载由<script>标签分割的js代码块,加载js代码块完毕后,立刻进入以下三个阶段,然后再按顺序查找下一个代码块,再继续执行以下三个阶段,无论是外部脚本文件(不异步加载 ...
- 第55章 API资源 - Identity Server 4 中文文档(v1.0.0)
此类建模API资源. Enabled 指示此资源是否已启用且可以请求.默认为true. Name API的唯一名称.此值用于内省身份验证,并将添加到传出访问令牌的受众. DisplayName 该值可 ...
- c# ?? 和?
static void Main(string[] args) { double? num1 = null; // ? 说明num1可以为空 ...
- 解决: 移动端经mouseover显示出的弹层中链接点击问题
通常我们会遇到这样的需求,导航菜单在鼠标划过的时候显示自定义弹层,在弹层中有一些链接需要点击后跳转或者其他一些事件.比如: $(".menu li").on("mouse ...
- QT解析和组装json
json这个小朋友熟悉又陌生,今天给同学们好好讲讲QT是如何使用json的,一句话:简单 1.什么是json? A:json就是个<key,value>字符串 ①一个json对象 {&qu ...
- (办公)SpringBoot与mybatisGenerator自动生成.
20181206-自动生成,少写一点代码. (以下的内容主要参考csdn上的<[完美]SpringBoot+Mybatis-Generator自动生成>这篇文章,还有简书上的mbatis- ...