当前位置: 首页 > news >正文

深圳罗湖企业网站建设报价如何自己开发小程序

深圳罗湖企业网站建设报价,如何自己开发小程序,页面设计原型图,做erp系统的网站文章目录 33.搜索旋转排序数组81.搜索旋转排序数组||153.寻找旋转排序数组中的最小值154.寻找旋转排序数组中的最小值||参考链接 33.搜索旋转排序数组 https://leetcode.cn/problems/search-in-rotated-sorted-array/description/ 下面这张图片是LC154题官方题解提供的一个图…

文章目录

  • 33.搜索旋转排序数组
  • 81.搜索旋转排序数组||
  • 153.寻找旋转排序数组中的最小值
  • 154.寻找旋转排序数组中的最小值||
  • 参考链接

33.搜索旋转排序数组

https://leetcode.cn/problems/search-in-rotated-sorted-array/description/
在这里插入图片描述
下面这张图片是LC154题官方题解提供的一个图片:我转载一下:
在这里插入图片描述

上图与本题唯一的区别是:本题题目约束数组中不包含重复元素,所以在某次旋转后,数组一定会被分为「左数组」和「右数组」
其中「左数组」和「右数组」分别单调递增。有一种特殊情况需要注意:
当数组旋转数组长度个单位后,仍然是元素组,此时这个数组也被称为「右数组」,你可能要问为什么要将其称为「右数组」而不是「左数组」,可以使用123三个元素依次旋转就能够观察到,最后一定是「右数组」同时右数组在本题以及后面的题目中,都会作为划分左右数组边界的关键所在。
第一题实现思路:

  • 采用二分法,计算出mid都应的值:num[mid]
  • 如果num[mid] == target,则直接返回。
  • 如果不相等,则需要判断,nums[mid] 和 target的大小关系。此时就涉及到 target 和 nums[mid] 分别位于左边界还是右边界的问题。
  • 我划分的标准是使用 target 和 nums[r] 对比,如果 target > nums[r] 则此时 target 一定位于左边界,如果 target < nums[r] 则此时 target一定位于右边界。在本题中由于不包含重复元素,所以不存在target == nums[r] 的情况,下面一题是这种情况。
  • 当 target 划分好左边边界后,需要使用 nums[mid] 和 nums[r] 的大小关系判断出 mid 位于左右边界的情况,对于左右边界的值分别进行比较。
    • target 位于左边界时,mid 位于右边界:r = mid - 1。
    • target 位于左边界时,mid 位于左边界:target > nums[mid] 时,l = mid + 1;target < nums[mid] 时,r = mid - 1;两者相等的情况上面已经判断过了
    • target 位于右边界时,mid 位于左边界:l = mid + 1。
    • target 位于右边界时,mid 位于右边界:target > nums[mid] 时,l = mid + 1;target < nums[mid] 时,r = mid - 1;

具体代码如下:

class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l < r){int mid = (l + r) / 2;if(nums[mid] == target){return mid;}if(target > nums[r]){// target位于左边界if(nums[mid] < nums[r]){// mid位于右边界r = mid - 1;}else{// mid位于左边界if(nums[mid] > target){r = mid - 1;}else{l = mid + 1;}}}else{// target位于右边界if(nums[mid] > nums[r]){// mid位于左边界l = mid + 1;}else{// mid位于右边界if(nums[mid] > target){r = mid - 1;}else{l = mid + 1;}}}}System.out.println(l);return nums[l] == target ? l : -1;}
}

81.搜索旋转排序数组||

https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/
在这里插入图片描述
此题就是对上面题目的扩展,上一题目中判断是否位于左边界,直接和nums[r] 相比,大于则位于左边界,随后直接位于右边界,根本不考虑相等的情况,因为第一题元素值不相等,根本不存在 == nums[r] 这中情况。
本题存在相等元素,只需要在上一题的判断的基础上,添加上是否 等于 nums[r] 这种情况即可。
具体见代码及注释:

class Solution {public boolean search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l < r){int mid = (l + r) / 2;if(nums[mid] == target){return true;}if(target > nums[r]){// 此时target位于左边界数组if(nums[mid] == nums[r]){// mid不确定位于左边界,还是右边界,此时只能缩小右边界的范围r = r - 1;}else if(nums[mid] < nums[r]){// mid位于右边界r = mid - 1;}else{// mid位于左边界if(nums[mid] > target){r = mid - 1;}else{l = mid + 1;}}}else if(target < nums[r]){// 此时target位于右边界数组if(nums[mid] == nums[r]){// mid不确定位于左边界,还是右边界,此时只能缩小右边界的范围r = r - 1;}else if(nums[mid] > nums[r]){// mid位于左边界l = mid + 1;}else{// mid位于右边界if(nums[mid] > target){r = mid - 1;}else{l = mid + 1;}}}else if(target == nums[r]){// target直接和右边界相等,则直接返回return true;}}return nums[l] == target;}
}

153.寻找旋转排序数组中的最小值

https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/
在这里插入图片描述
这道题目寻找旋转数组的最小值,就是旋转数组的左右边界交界处。
仍然可以利用二分取得mid后和nums[r] 进行比较。

  • nums[mid] > nums[r] : 此时mid位于左边界,肯定不符合要求,直接 l = mid + 1;
  • nums[mid] < nums[r] : 此时mid位于右边界,由于二分查找计算的mid是向下取整的,所以 l <= mid < r ;所以此时直接令 r = mid 即可,不需要额外mid - 1。

代码展示:

class Solution {public int findMin(int[] nums) {int l = 0, r = nums.length - 1;while(l < r){int mid = (l + r) / 2;if(nums[mid] > nums[r]){// 此时mid位于左边界l = mid + 1;}else{// 此时mid位于右边界,由于向下取整,直接 mid = r 主要考虑到r可能此时就是右边界函数的最左边小值r = mid;}}return nums[l];}
}

154.寻找旋转排序数组中的最小值||

https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii/description/
在这里插入图片描述
如果对与1题到2题的演化关系比较熟练了,那么此时从3题演化到4题,也可以类比,在3题的基础上添加nums[mid] == num[r] 相等条件的判断即可。
代码演示:

class Solution {public int findMin(int[] nums) {int len = nums.length;int l = 0, r = len - 1;while(l < r){int mid = (l + r) / 2;if(nums[mid] > nums[r]){// 此时m位于左排序数组中l = mid + 1;}else if(nums[mid] < nums[r]){// 此时m位于右排序数组中r = mid;}else{r = r - 1;}}return nums[l];}
}

对于第四题可以参考下述链接加深理解。

参考链接

https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii/

http://www.yayakq.cn/news/788209/

相关文章:

  • 合肥做网站php7.0 wordpress
  • 计算机网站开发工作证抖音餐厅代运营方案
  • jsp网站开发 pdf公司招牌制作价格
  • 做电影网站许可证医学关键词 是哪个网站做
  • 做北京塞车网站淘宝购买网站建设
  • 深圳十大网站建设做网站的岗位
  • 网站开发合作协议哪里有做标书
  • 广东移动网站免费模板网站
  • 广州专业做网站营销内容包括哪些方面
  • 网站搭建服务溧阳常州做网站
  • 电子商务网站模板页面做logo去哪个网站
  • 晋江市建设招投标网站设计logo素材
  • 招商网站建设解决方案服务器租用哪家好而且便宜
  • 网站建设 文库html网页制作表格代码
  • wordpress另一更新正在进行网站应该如何进行优化
  • 网站信息可以边建设边组织找人做网站一般要多少钱
  • 手机微网站素材标准企业网站开发合同
  • 页制作与网站建设技术大全公司网站如何做的美丽
  • 网站开发绩效指标WordPress nas
  • 长沙网站设计公司怎么样做海报素材网站
  • 怎么免费做自己的网站常州住房和城乡建设局网站首页
  • 秀山微信网站建设做企业宣传片的网站
  • 法华寺网站建设外贸网站外链
  • 青岛知名网站建设在线制作头像生成
  • 网站建设中 html模板html代码怎么变成网页
  • 一元云购网站黑客攻击自己装修设计软件
  • 免费的舆情网站app下载如何用手机制作app软件
  • 为企业做一个网站多少钱做淘宝好还是自建网站好
  • 营销型企业网站建设策划河南品牌网站建设
  • 深圳建设工程协会网站南京做网站的公司