LeetCode 1150. 检查一个数是否在数组中占绝大多数(二分查找)
文章目录
- 1. 题目
- 2. 解题
- 2.1 暴力
- 2.2 二分查找
1. 题目
给出一个按 非递减 顺序排列的数组 nums,和一个目标数值 target。
假如数组 nums 中绝大多数元素的数值都等于 target,则返回 True,否则请返回 False。
所谓占绝大多数,是指在长度为 N 的数组中出现必须 超过 N/2 次。
示例 1:
输入:nums = [2,4,5,5,5,5,5,6,6], target = 5
输出:true
解释:
数字 5 出现了 5 次,而数组的长度为 9。
所以,5 在数组中占绝大多数,因为 5 次 > 9/2。示例 2:
输入:nums = [10,100,101,101], target = 101
输出:false
解释:
数字 101 出现了 2 次,而数组的长度是 4。
所以,101 不是 数组占绝大多数的元素,因为 2 次 = 4/2。提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 10^9
1 <= target <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-a-number-is-majority-element-in-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 暴力
class Solution {public:bool isMajorityElement(vector<int>& nums, int target) {int count = 0, n = nums.size();for(int i = 0; i < n; ++i)if(nums[i] == target)count++;if(n&1)return count > n/2;return count >= n/2+1;}
};
4 ms 7.7 MB
2.2 二分查找
class Solution {public:bool isMajorityElement(vector<int>& nums, int target) {int i = bs1(nums,0,nums.size()-1, target);int j = bs2(nums,0,nums.size()-1, target);int count = (i!=-1&&j!=-1) ? (j-i+1) : 0;int n = nums.size();if(n&1)return count > n/2;return count >= n/2+1;}int bs1(vector<int>& a, int l, int r, int t){ //最前面的目标int mid;while(l <= r){mid = l+((r-l)>>1);if(a[mid] < t)l = mid+1;else if(a[mid] > t)r = mid-1;else{if(mid==0 || a[mid-1] < t)return mid;r = mid - 1;}}return -1;}int bs2(vector<int>& a, int l, int r, int t){ //最后面的目标int mid;while(l <= r){mid = l+((r-l)>>1);if(a[mid] < t)l = mid+1;else if(a[mid] > t)r = mid-1;else{if(mid==a.size()-1 || a[mid+1] > t)return mid;l = mid + 1;}}return -1;}
};
8 ms 7.8 MB
长按或扫码关注我的公众号,一起加油、一起学习进步!
LeetCode 1150. 检查一个数是否在数组中占绝大多数(二分查找)相关推荐
- leetcode 153. 寻找旋转排序数组中的最小值(二分查找)
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 ...
- leetcode 153. Find Minimum in Rotated Sorted Array | 153. 寻找旋转排序数组中的最小值(二分查找)
题目 https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ 题解 使用二分法,不断地删掉 数组左边的增序列 和 数组右 ...
- java数组元素的输入_java基础--键盘输入一个数,输出数组中指定元素
java基础--键盘输入一个数,输出数组中指定元素 java基础--键盘输入一个数,输出数组中指定元素 package com.lcn.day05; import java.util.Scanner; ...
- [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找)
[Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找) 题目:符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < ...
- 【Java】 查找数组中指定元素之 顺序查找 与 二分查找
今天博主分享两个查找数组中指定元素的算法:顺序查找与二分查找 小小目录 1.顺序查找 2. 二分查找 1.顺序查找 给定一个数组, 再给定一个元素, 找出该元素在数组中的位置. 代码如下: //顺序查 ...
- 【LeetCode】陌陌面试-有序数组于其一个元素翻转后,判断一个数是否存在数组中,时间复杂度O(logn)
1.有序数组,判断一个数是否存在于数组中,时间复杂度O(logn) 解题思路: 二分法,在有序数组中,提高时间复杂度的一个方法. 代码: def demo(nums, target):left,rig ...
- LeetCode:数组(排列组合,二分查找I,二分查找II)
1,排列组合 38,剑指Offer:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. class Solution {Li ...
- 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)
文章目录 题目描述 思路 & 代码 题目描述 比 leetcode 136要难点 注意:空间复杂度要求O(1),否则用哈希表直接秒杀啦. 昨天的笔试,还有刷的面经都有这道题...今天赶紧补补 ...
- C#LeetCode刷题之#448-找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3712 访问. 给定一个范围在 1 ≤ a[i] ≤ n ( n ...
最新文章
- applicationContext.xml 的位置问题
- python结束线程池正在运行的线程_python之线程与线程池
- Unity架构有点乱
- Loadrunner中socket协议中的三个关联函数
- rocketmq新扩容的broker没有tps_深入研究RocketMQ消费者是如何获取消息的
- python爬取cctalk视频_新媒体编辑怎么批量爬取数据
- MyEclipse注册码
- ubuntu下如何切换到root用户 --- 终端命令行方式
- NGN学习笔记2——软交换技术
- jetson nano 自动调节风扇转速
- 小程序“成语猜题”部分答案,总共28667题
- 怎么利用计算机求一元三次方程,一元三次方程求根公式
- Python 第二章 字典
- c语言一本书的页码从自然数1开始顺序编码,C++_关于统计数字问题的算法,一本书的页码从自然数1开始顺 - phpStudy...
- 不是所有的美剧都适合学英语
- EM30719 I2C读写问题
- 【CATIA】系统架构 | 达索系统百世慧®
- MS5837-30BA 水深水压传感器简单介绍
- pwnable-passcode
- 计算机考证上传照片说明