Leetcode题解(十二)
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题解(十二)的更多相关文章
- LeetCode第十二题-将数字转化为罗马数字
Integer to Roman 问题简介:将输入的int类型数字转化为罗马数字 问题详解:罗马数字由七个不同的符号表示:I,V,X,L,C,D和M 符号-数值 I - 1 V - 5 X -10 L ...
- Leetcode题解(二)
4.Median of Two Sorted Arrays(*) 题目 题目要求找到两个排序数组的中位数. 中位数的定义:当n为奇数时,median = array[n/2];当n为偶数时,media ...
- LeetCode第二十二题-创建n对括号
Generate Parentheses 问题简介: 给定n对括号,编写一个函数来生成格式正确的括号的所有组合. 举例: 给定n = 2,解集是: [ “()()”, “(())” ] 给定n = 3 ...
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- 十二省联考题解 - JLOI2019 题解
十二省联考题解 - JLOI2019 题解 两个T3的难度较大 平均代码量远大于去年省选 套路题考查居多 A 难度等级 1 $n^2$暴力可以拿到$60$分的优秀成绩 然后可以想到把区间异或转化为前缀 ...
- 【NOI2019十二省联合省选】部分题简要题解
Day 1 T1 异或粽子 题意:给出一个长为n的序列,选择K个不完全重合的区间使得每个区间的异或值的总和最大. 题解:先做一个前缀异或和,对于每一个右端点我们记录三元组(l,r,x)表示在左端点在\ ...
- 【简】题解 P5283 [十二省联考2019]异或粽子
传送门:P5283 [十二省联考2019]异或粽子 题目大意: 给一个长度为n的数列,找到异或和为前k大的区间,并求出这些区间的异或和的代数和. QWQ: 考试时想到了前缀异或 想到了对每个数按二进制 ...
- [COJ0988]WZJ的数据结构(负十二)
[COJ0988]WZJ的数据结构(负十二) 试题描述 输入 见题目,注意本题不能用文件输入输出 输出 见题目,注意本题不能用文件输入输出 输入示例 输出示例 数据规模及约定 1≤N≤1500,M≤N ...
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)
[BZOJ5495][十二省联考2019]异或粽子(主席树,贪心) 题面 BZOJ 洛谷 题解 这不是送分题吗... 转异或前缀和,构建可持久化\(Trie\). 然后拿一个堆维护每次的最大值,每次如 ...
随机推荐
- Dynamic web module 版本之间的区别
Servlet 3十二月2009开发平台标准版6,6可插性,易于开发,异步ser vlet,安全,文件上传Servlet 2.5九月2005开发平台标准版5,5需要平台标准版5,支持注释Servlet ...
- win7系统Myeclipse下切换SVN用户
Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能.但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号.密码保存之后 ...
- React Router 按需加载+服务器渲染的闪屏问题
伴随着React协议的『妥协』(v16采用MIT),React为项目的主体,这个在短期内是不会改变的了,在平时使用过程中发现了如下这个问题: 在服务器渲染的时候,刷新页面会出现闪屏的现象(白屏一闪而过 ...
- Mysql配置文件my.cnf详细说明
[表名大小写配置] MySQL在Linux下数据库名.表名.列名.别名大小写规则: 1.数据库名与表名是严格区分大小写 2.表的别名是严格区分大小写 3.列名与列的别名在所有的情况下均是忽略大小 ...
- 51nod 1270 数组的最大代价 思路:简单动态规划
这题是看起来很复杂,但是换个思路就简单了的题目. 首先每个点要么取b[i],要么取1,因为取中间值毫无意义,不能增加最大代价S. 用一个二维数组做动态规划就很简单了. dp[i][0]表示第i个点取1 ...
- Milk Patterns poj3261(后缀数组)
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9274 Accepted: 4173 Cas ...
- h5 meta学习
定义针对搜索引擎的关键词:<meta name="keywords" content="meta,red" /> 定义对页面的描述:<meta ...
- [原创]KVM虚拟化管理平台的实现
KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...
- 移动端效果之Swiper
写在前面 最近在做移动端方面运用到了饿了么的vue前端组件库,因为不想单纯用组件而使用它,故想深入了解一下实现原理.后续将会继续研究一下其他的组件实现原理,有兴趣的可以关注下. 代码在这里:戳我 1. ...
- 项目管理软件之争,禅道和JIRA大对比
本文摘要: 一. 产品介绍 二. 界面设计 1. 界面颜色设计 2. 布局结构 三. 功能区别 四. 价格对比 五. 后期服务 六. 优缺点 七. 总结 说到项目管理软件,不得不提的是禅道和JIRA. ...