33、Search in Rotated Sorted Array

题目

这道题目如果没有其他要求,直接遍历一遍就可以知道答案,但是,题目给出了是排序了数组,但是数组有可能经过了旋转得到,其解题思路仍然是二分查找,只不过在处理的时候需要添加一下逻辑处理;

在做逻辑判断的时候,主要判断的是target可能位于middle的坐标还是右边,这样才能确定应该执行first = middle+1还是second = middle - 1;

旋转后的数组可以分为两部分,前一部分是数组递增部分,如[4,5,6,7],后一部分是[0,1,2]

代码如下:

 class Solution {
public:
int search(vector<int>& nums, int target) {
int first,second,middle;
first = ;
second = nums.size() - ; while (first <= second)
{
middle = (first + second)/;
if(target == nums[middle])
return middle;
if(nums[middle] >= nums[first] && nums[middle] >= nums[second])//middle位于前一部分并且first在前一部分,second在后一部分
{
if(target >= nums[first] && target > nums[middle])//middle可能位于前一部分,并且位于middle右边,所以first=middle+1
first = middle+;
else if(target >= nums[first] && target < nums[middle])//middle可能位于前一部分,并且位于middle的左边
second = middle-;
else
first = middle+;
}
else if(nums[middle] <= nums[first] && nums[middle] <= nums[second])//middle位于后一部分,并且first位于前一部分,second位于后一部分
{
if(target <= nums[second] && target < nums[middle])
second = middle-;
else if(target <= nums[second] && target > nums[middle])
first = middle+;
else
second = middle-;
}
else //first和second位于同一部分,就退化为普通的二分查找了
{
if(target > nums[middle])
first = middle+;
else
second = middle-;
}
} return -; }
};

--------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------

34、Search for a Range

题目

这道题目是二分法的具体应用,直接上代码;

 class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int first,second,middle;
const int size = nums.size();
vector<int> res; first = ;
second = size - ; while(first <= second)
{
middle = (first + second)/;
if(target == nums[middle])
break;
else
{
if(target > nums[middle])
first = middle+;
else
second = middle-;
}
}
int t;
if(first <= second)
{
t = middle;
while(target == nums[t]&&t>=)
t--;
t++;
res.push_back(t);
t=middle;
while(target == nums[t]&&t<size)
t++;
t--;
res.push_back(t); }
else
{
res.push_back(-);
res.push_back(-);
}
return res;
}
};

-----------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------------

35、Search Insert Position

题目

二分查找的应用,直接代码:

 class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
const int size = nums.size();
if( == size)
return ; int first,second,middle;
first = ;
second = size - ; while(first < second)//注意没有用<=
{
middle = (first + second)/;
if (target == nums[middle])
{
return middle;
}
else if (target > nums[middle])
{
first = middle+;
}
else
second = middle-;
} if(target > nums[first])
return first+;
else
return first; }
};

Leetcode题解(十二)的更多相关文章

  1. LeetCode第十二题-将数字转化为罗马数字

    Integer to Roman 问题简介:将输入的int类型数字转化为罗马数字 问题详解:罗马数字由七个不同的符号表示:I,V,X,L,C,D和M 符号-数值 I - 1 V - 5 X -10 L ...

  2. Leetcode题解(二)

    4.Median of Two Sorted Arrays(*) 题目 题目要求找到两个排序数组的中位数. 中位数的定义:当n为奇数时,median = array[n/2];当n为偶数时,media ...

  3. LeetCode第二十二题-创建n对括号

    Generate Parentheses 问题简介: 给定n对括号,编写一个函数来生成格式正确的括号的所有组合. 举例: 给定n = 2,解集是: [ “()()”, “(())” ] 给定n = 3 ...

  4. 「ZJOI2019」&「十二省联考 2019」题解索引

    「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...

  5. 十二省联考题解 - JLOI2019 题解

    十二省联考题解 - JLOI2019 题解 两个T3的难度较大 平均代码量远大于去年省选 套路题考查居多 A 难度等级 1 $n^2$暴力可以拿到$60$分的优秀成绩 然后可以想到把区间异或转化为前缀 ...

  6. 【NOI2019十二省联合省选】部分题简要题解

    Day 1 T1 异或粽子 题意:给出一个长为n的序列,选择K个不完全重合的区间使得每个区间的异或值的总和最大. 题解:先做一个前缀异或和,对于每一个右端点我们记录三元组(l,r,x)表示在左端点在\ ...

  7. 【简】题解 P5283 [十二省联考2019]异或粽子

    传送门:P5283 [十二省联考2019]异或粽子 题目大意: 给一个长度为n的数列,找到异或和为前k大的区间,并求出这些区间的异或和的代数和. QWQ: 考试时想到了前缀异或 想到了对每个数按二进制 ...

  8. [COJ0988]WZJ的数据结构(负十二)

    [COJ0988]WZJ的数据结构(负十二) 试题描述 输入 见题目,注意本题不能用文件输入输出 输出 见题目,注意本题不能用文件输入输出 输入示例 输出示例 数据规模及约定 1≤N≤1500,M≤N ...

  9. leetcode题解-122买卖股票的最佳时期

    题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...

  10. 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)

    [BZOJ5495][十二省联考2019]异或粽子(主席树,贪心) 题面 BZOJ 洛谷 题解 这不是送分题吗... 转异或前缀和,构建可持久化\(Trie\). 然后拿一个堆维护每次的最大值,每次如 ...

随机推荐

  1. BZOJ2748_音量调节_KEY

    [HAOI2012]音量调节 Time Limit: 3 Sec Memory Limit: 128 MB Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以 ...

  2. oss滤网图片音视频过滤(1)内容检测

    图片音视频过滤有好多方法,我这里就不一一介绍了,这篇文章只是简单介绍一下我在项目中使用阿里云oss滤网过滤的步骤 1.所遇问题: 1.图片视频鉴别时要设置textScanRequest.setUriP ...

  3. java集合系列——List集合之Vector介绍(四)

    1. Vector的简介 JDK1.7.0_79版本 Vector 类可以实现可增长的对象数组.与数组一样,它包含可以使用整数索引进行访问的组件.但是,Vector 的大小可以根据需要增大或缩小,以适 ...

  4. pdf点击超链接后返回:alt+ 向左 /向右

    pdf点击超链接后返回:alt+ 向左 /向右

  5. JSP入门 生命周期

    我们之前使用的都是javax.servlet.http.HttpServlet,这个类实现了javax.servlet.Servlet接口,而这个接口中定义的三个方法是所有servlet都必须实现的. ...

  6. Ngnix技术研究系列1-通过应用场景看Nginx的反向代理

    随着我们业务规模的不断增长,整个系统规模由两年前的几十台服务器,井喷到现在2个数据中心,接近400台服务器,上百个WebApi站点,上百个域名. 这么多的WebApi站点这么多的域名,管理和维护成本很 ...

  7. LeetCode 650 - 2 Keys Keyboard

    LeetCode 第650题 Initially on a notepad only one character 'A' is present. You can perform two operati ...

  8. 对python编程的初步理解

    一直以来零零散散有听过python,这周终于下定决心学python了.在网上了买个套视频教程,内容分周次学习,有详细的讲解.本人觉得非常好.这里谈谈一下第一周的学习的笔记.望路过的大神给予指正,不胜感 ...

  9. MyBatis 配置的一些小知识点

    MyBatis别名配置——typeAliases 类型别名是为 Java 类型设置一个短的名字.它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余.说白了就是预先设置包名 api是这 ...

  10. mysql error 1290 hy000:The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen' 解决方案

    如果在执行授权命令的时候报错 mysql> grant all privileges on *.* to root@"; ERROR (HY000): The MySQL server ...