文章目录

  • 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. 检查一个数是否在数组中占绝大多数(二分查找)相关推荐

  1. leetcode 153. 寻找旋转排序数组中的最小值(二分查找)

    已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 ...

  2. leetcode 153. Find Minimum in Rotated Sorted Array | 153. 寻找旋转排序数组中的最小值(二分查找)

    题目 https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ 题解 使用二分法,不断地删掉 数组左边的增序列 和 数组右 ...

  3. java数组元素的输入_java基础--键盘输入一个数,输出数组中指定元素

    java基础--键盘输入一个数,输出数组中指定元素 java基础--键盘输入一个数,输出数组中指定元素 package com.lcn.day05; import java.util.Scanner; ...

  4. [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找)

    [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找) 题目:符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < ...

  5. 【Java】 查找数组中指定元素之 顺序查找 与 二分查找

    今天博主分享两个查找数组中指定元素的算法:顺序查找与二分查找 小小目录 1.顺序查找 2. 二分查找 1.顺序查找 给定一个数组, 再给定一个元素, 找出该元素在数组中的位置. 代码如下: //顺序查 ...

  6. 【LeetCode】陌陌面试-有序数组于其一个元素翻转后,判断一个数是否存在数组中,时间复杂度O(logn)

    1.有序数组,判断一个数是否存在于数组中,时间复杂度O(logn) 解题思路: 二分法,在有序数组中,提高时间复杂度的一个方法. 代码: def demo(nums, target):left,rig ...

  7. LeetCode:数组(排列组合,二分查找I,二分查找II)

    1,排列组合 38,剑指Offer:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. class Solution {Li ...

  8. 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)

    文章目录 题目描述 思路 & 代码 题目描述 比 leetcode 136要难点 注意:空间复杂度要求O(1),否则用哈希表直接秒杀啦. 昨天的笔试,还有刷的面经都有这道题...今天赶紧补补 ...

  9. C#LeetCode刷题之#448-找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3712 访问. 给定一个范围在  1 ≤ a[i] ≤ n ( n ...

最新文章

  1. applicationContext.xml 的位置问题
  2. python结束线程池正在运行的线程_python之线程与线程池
  3. Unity架构有点乱
  4. Loadrunner中socket协议中的三个关联函数
  5. rocketmq新扩容的broker没有tps_深入研究RocketMQ消费者是如何获取消息的
  6. python爬取cctalk视频_新媒体编辑怎么批量爬取数据
  7. MyEclipse注册码
  8. ubuntu下如何切换到root用户 --- 终端命令行方式
  9. NGN学习笔记2——软交换技术
  10. jetson nano 自动调节风扇转速
  11. 小程序“成语猜题”部分答案,总共28667题
  12. 怎么利用计算机求一元三次方程,一元三次方程求根公式
  13. Python 第二章 字典
  14. c语言一本书的页码从自然数1开始顺序编码,C++_关于统计数字问题的算法,一本书的页码从自然数1开始顺 - phpStudy...
  15. 不是所有的美剧都适合学英语
  16. EM30719 I2C读写问题
  17. 【CATIA】系统架构 | 达索系统百世慧®
  18. MS5837-30BA 水深水压传感器简单介绍
  19. pwnable-passcode
  20. 计算机考证上传照片说明

热门文章

  1. 和redis_Redis 缓存
  2. 如何把图片嵌到html中,自给自足,轻松将图片图片内嵌到HTML
  3. jQuery实现表格行上移下移和置顶
  4. [3.30校内训练赛]
  5. ios截屏 u3d导出Xcode工程截屏
  6. 在centos7环境下建立MariaDB多实例
  7. 简述C++程序编写的过程
  8. Linux驱动小技巧 | 利用DRIVER_ATTR实现调用内核函数
  9. 免费!200块全志XR806开源鸿蒙开发板试用
  10. Intel官宣开发RISC-V处理器:明年首发7nm工艺