leetcode 33和 leetcode81
//感想:
1.对于这两题,我真的是做到吐,这篇博客本来是昨晚准备写的,但是对于这个第二题,我真的做到头痛,实在是太尼玛的吐血了,主要是我也是头铁,非要找到那个分界点。
2.其实之前在牛客网上做过非常类似的题目,当时就做的特别痛苦,后来做完也没总结,导致现在做又不知道思路了,不过好歹留下了代码,再次做的时候,看看之前的代码,再结合这道题目的要求也是做完了。
思路:对于33题。
题目要求要logn的,我们对自己要求也要严格一点,所有的都用二分来做,这题目其实是变种的二分,因为正常的二分是找寻一个target值,但是我们现在不是找一个target,而是去找这个排序数组的分界点,对于没有重复元素的,就比较容易了,
所以它只有这种类型,找分界点还是比较容易的。无论是找最大的,还是最小的,都是可以的,这里的二分法要格外注意左右两边的边界移动情况。这是找的最大值的下标,来看看这个helper函数
while(l<=r)
{
if(nums[l]<=nums[r])
return r;
int mid=l+(r-l)/2;
if(nums[mid]>nums[l])
l=mid;
else
r=mid-1;
}
return l;
首先如果nums[l]<=nums[r],那么这直接就是一条斜线,可以直接返回右边界,如果nums[mid]>nums[l],说明还在上升,移动左下标指向mid,记住
现在找的是最大值,所以不能让l=mid+1,而是等于mid,不然可能会错过最大值,else 直接让r=mid-1,因为不在上升就肯定在下边,所以直接等于
就行了,继续这样循环,直到右边界移出左边界,那时候我们返回l就行了。感觉还是可以的,主要是情况没有那么复杂,下面就是下一题,原本想做一篇
写的,但是感觉写的太臃肿了,还是在写一篇吧。
class Solution {
public int search(int[] nums, int target) {
if(nums==null||nums.length==0)
return -1;
if(nums.length==1)
return target==nums[0]?0:-1;
int l=0;
int r=nums.length-1;
int i=helper(nums,l,r); if(target>=nums[0])
return helper1(nums,l,i,target);
else
return helper1(nums,i+1,r,target);
}
public int helper1(int[] nums,int l,int r,int target)
{
while(l<=r)
{
int mid=l+(r-l)/2;
if(nums[mid]==target)
return mid;
else if(nums[mid]>target)
r=mid-1;
else
l=mid+1;
}
return -1;
}
public int helper(int[] nums,int l,int r)
{
while(l<=r)
{
if(nums[l]<=nums[r])
return r;
int mid=l+(r-l)/2;
if(nums[mid]>nums[l])
l=mid;
else
r=mid-1;
}
return l;
}
}
leetcode 33和 leetcode81的更多相关文章
- leetcode 33和 leetcode81 II
//接上上一篇博客,继续这个题目,现在数组中会有重复元素,情况将会变得十分复杂,比如说1,1,1,1,1 或者1,1,3,1再来 3,3,3,1,1,1,3,这些都是可以的,都是符合题目要求的,如 ...
- [array] leetcode - 33. Search in Rotated Sorted Array - Medium
leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...
- LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>
LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ...
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- Java实现 LeetCode 33 搜索旋转排序数组
33. 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值, ...
- LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- [LeetCode] 33. Search in Rotated Sorted Array_Medium tag: Binary Search
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)
题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description Problem :当前的数组 ...
- 力扣Leetcode 33. 搜索旋转排序数组
33. 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值, ...
随机推荐
- day05 selenium基本使用
本文通过举例介绍selenium的基本使用方法,用来爬取京东笔记本电脑的商品信息,包括名称,url,价格,评价信息. from selenium import webdriver # 导入键盘Keys ...
- F. Make It Connected 解析(思維、MST)
Codeforce 1095 F. Make It Connected 解析(思維.MST) 今天我們來看看CF1095F 題目連結 題目 給你\(n\)個點,每個點\(u\)還有一個值\(a[u]\ ...
- U137971 公司搬迁 - 并查集 奇偶性
题目描述 因为人员规模扩大,T公司准备搬到新的写字楼去,写字楼分为A座和B座,n名不同工号的员工x(p1,p2,p3...pn) 按照下面两个规则确定在A座或者B座进行办公:(1)如果工号为x的员工在 ...
- MONGODB03 - 分组计数_分组去重计数(基于 spring-data-mongodb)
前因 项目中有查询MongoDB单表统计相关功能,涉及到MongoDB数据聚合相关操作,其中在多字段分组去重计数相关操作API上资料较少,spring-data-mongodb相关的API介绍也不够直 ...
- python机器学习实现人脸图片自动补全
人脸自动补全 关注公众号"轻松学编程"了解更多. 1.导包 import matplotlib.pyplot as plt import numpy as np import pa ...
- python求平均数及打印出低于平均数的值列表
刚学Python的时候还是要多动手进行一些小程序的编写,要持续不断的进行,知识才能掌握的牢.今天就讲一下Python怎么求平均数,及打印出低于平均数的数值列表 方法一: scores1 = [91, ...
- Java swing实现酒店管理系统
今天给大家提供一个由今天给大家提供一个由Java swing实现的酒店管理系统,数据库采用sqlserver,我会贴上部分代码,完整的代码请看文章最下方下载,下面看代码: 1.主框架代码: packa ...
- 小学生学习C++应该具备哪些基础?
一.电脑操作基础: 应该具备一些必要的电脑相关的知识,如操作系统的相关知识,如何打开.编辑.保存文件.对电脑的能力有一些基本的认识,以及会使用鼠标,键盘熟练输入. 磨刀不误砍柴工,至少要做到能快速找到 ...
- .net core mvc appsettings.json配置文件的使用
配置文件的使用主要是两种用法 1.直接使用弱类型的数据 2.使用强类型的数据 (将配置的数据映射到类) 直接使用弱类型的数据 在appsetings.json文件中先新建两个节点 TestObj节点 ...
- kali中PHANTOM-EVASION 3.0运行时module ' OpenSSL.crypto' has no attribute ' PKCS12Type'报错解决方法
kali中直接用pip install pyopenssl安装当最新的openssl中的crypto中的类PKCS12Type改成了PKCS12 所以需要在phantom中改对应代码 将这个文件中对应 ...