您的位置:首页 > 健康 > 美食 > 比格设计官网_上海网络企业优化公司_爱站关键词挖掘old_seo网站平台

比格设计官网_上海网络企业优化公司_爱站关键词挖掘old_seo网站平台

2024/12/22 1:11:07 来源:https://blog.csdn.net/qq_51352130/article/details/142420155  浏览:    关键词:比格设计官网_上海网络企业优化公司_爱站关键词挖掘old_seo网站平台
比格设计官网_上海网络企业优化公司_爱站关键词挖掘old_seo网站平台

文章目录

  • 题目介绍
  • 题解

题目介绍

在这里插入图片描述
在这里插入图片描述

题解

首先用 153. 寻找旋转排序数组中的最小值 的方法,找到 nums 的最小值的下标 i。

然后分类讨论:

  1. 如果 target>nums[n−1],在 [0,i−1] 中二分查找 target。

  2. 如果 target≤nums[n−1],那么:

    1. 如果 i=0,说明 nums 是递增的,直接在 [0,n−1] 中二分查找 target。

    2. 如果 i>0,那么 target 一定在第二段 [i,n−1] 中,在 [i,n−1] 中二分查找 target。

      这两种情况可以合并成:在 [i,n−1] 中二分查找 target

class Solution {public int search(int[] nums, int target) {int n = nums.length, i = findMin(nums);if (target > nums[n - 1]) { // target 在第一段return lowerBound(nums, 0, i - 1, target); }// target 在第二段return lowerBound(nums, i, n - 1, target); }// 153. 寻找旋转排序数组中的最小值private int findMin(int[] nums) {int left = 0, right = nums.length - 2; // 闭区间 [0, nums.length - 2]while (left <= right) { int mid = left + (right - left) / 2;if (nums[mid] < nums[nums.length - 1]) {right = mid - 1; } else {left = mid + 1;               }}return left;}// 有序数组中找 target 的下标private int lowerBound(int[] nums, int left, int right, int target) {while (left <= right) { int mid = left + (right - left) / 2;if (nums[mid] == target){return mid;}else if (nums[mid] < target) {left = mid + 1; } else {right = mid - 1; }}return -1;}
}```

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com