剑指 Offer II 二分查找
068. 查找插入位置
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int l=0,r=nums.size();
nums.push_back(1000000);//一定有数比target大 它在的位置会是最后一个插入的位置 可以直接return l
while(l<r)
{
int mid=l+r>>1;
if(nums[mid]>=target)r=mid;
else l=mid+1;
}
return l;
}
};
069. 山峰数组的顶部
山峰符合两段性
class Solution {
public:
int peakIndexInMountainArray(vector<int>& a) {
int l=1,r=a.size()-2;
while(l<r)
{
int mid=l+r+1>>1;
if(a[mid]>a[mid-1])l=mid;
else r=mid-1;//说明答案严格在左侧
}
return l;
}
};
070. 排序数组中只出现一次的数字
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
/*
二分的性质是 两两看成一组
target左边 数都相同
右边 数都不同
*/
nums.push_back(nums.back()+1);
int l=0,r=nums.size()/2-1;//组数
while(l<r)
{
int mid=l+r>>1;
if(nums[mid*2]==nums[mid*2+1])l=mid+1;//在左边
else r=mid;
}
return nums[2*l];//第l组第一个数
}
};
071. 按权重生成随机数
class Solution {
public:
/*
二分查前缀和 下标
*/
vector<int>s;
Solution(vector<int>& w) {
s=w;
for(int i=1;i<w.size();i++)s[i]+=s[i-1];
}
int pickIndex() {
int x=rand()%s.back()+1;//1到s.back()
return lower_bound(s.begin(),s.end(),x)-s.begin();
}
};
072. 求平方根
class Solution {
public:
int mySqrt(int x) {
int l=0,r=x;
//第一个y^2<=x
while(l<r)
{
int mid=l+r+1ll >>1; //LL类型的1
if(mid<=x/mid)l=mid;
else r=mid-1;
}
return l;
}
};
073. 狒狒吃香蕉
二分的是答案
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int h) {
int l=1,r=1;
for(auto x:piles)r=max(r,x);
while(l<r)
{
int mid=l+r>>1;
int time=0;
for(auto x:piles)time+=(x+mid-1)/mid;
if(time<=h)r=mid;
else l=mid+1;
}
return l;
}
};
剑指 Offer II 二分查找的更多相关文章
- 【剑指offer】二分查找二维数组
1 2 3 4 5 6 7 8 9 3 3 1 2 3 4 5 6 7 8 9 10 3 3 12 2 3 4 5 6 7 8 9 10 例子输出: Yes No No 时间限制:1 秒 内存限制:3 ...
- 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
- 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除
剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...
- 剑指Offer——II平衡二叉树
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上 ...
- 【力扣】剑指 Offer II 092. 翻转字符
题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小. 递归函数定义int dp(StringBuilder sb, int ind, int pre ...
- 剑指Offer——二分查找算法
剑指Offer--二分查找算法 前言 本片博文主要讲解查找算法的相关知识.重点介绍二分查找. 二分查找算法是在有序数组中用到的较为频繁的一种查找算法,在未接触二分查找算法时,最通用的一种做法是,对数组 ...
- 【剑指offer】11--旋转数组的最小数字(二分查找)
原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 旋转数组的最小数字:输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1 ...
- [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]
[简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...
- 【剑指offer】53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0-n-1中缺失的数字 知识点:数组,二分查找: 题目描述 统计一个数字在排序数组中出现的次数. 示例 输入: nums = [5,7,7,8,8,10], tar ...
- 力扣 - 剑指 Offer 53 - II. 0~n-1中缺失的数字
题目 剑指 Offer 53 - II. 0-n-1中缺失的数字 思路1 排序数组找数字使用二分法 通过题目,我们可以得到一个规律: 如果数组的索引值和该位置的值相等,说明还未缺失数字 一旦不相等了, ...
随机推荐
- STM32F0_HAL初始化系列:串口DMA输出
static void MX_USART1_UART_Init(void) { /* USER CODE BEGIN USART1_Init 0 */ /* USER CODE END USART1_ ...
- ROS创建一个基本功能包
1.mkdir catkin_ws/src 2.cd catkin_ws/src 3.catkin_init_workspace 4.cd ~/catkin_ws/ 5.catkin_make 6.在 ...
- 学习Java Day17
今天继续加强了一下类的联系,并学习了如何生成随机数
- React Hooks的理解,React Hooks有哪些,解决了什么问题
一.是什么 Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使 ...
- 题解 P4317 花神的数论题
并不难,但是因为各种 SB 原因调了 1145141919810min(悲 我们会发现 \(\operatorname{sum}\) 其实很小,顶多就 \(50\),这启发我们统计每个 \(\oper ...
- 软件设计原则(Principles)
设计模式的从许多优秀的软件中总结出来的 , 使用设计模式能够实现可复用.可维护.开发人员之间方便沟通设计和理解代码. Tips 对于模式的使用 , 不能拘泥于格式 , 事实上根据需要模式是可以演化的 ...
- Jquery 点击弹窗,将弹窗内容赋值到各个项demo
<div class="qb"> <div class="box"> <div class="qtt f_16 fbd& ...
- map方法整理数据,接口返回值进行处理
整理前: //map方法使thumb加上域名 --> var data =[ { id: "11", title: "新车小程序title1", thum ...
- dom添加样式可以这样写
1.原生 js添加样式很多时可以合并在一起写: var oPopwin = document.getElementById('vpage'); oPopwin.style.margin = 'init ...
- Supported OPs and DPU Limitations
Currently Supported Operators source:https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/zmw1606 ...