部署DeepSeek模型,进群交流最in玩法!
立即加群
发布
社区首页 >专栏 >33. 搜索旋转排序数组

33. 搜索旋转排序数组

原创
作者头像
Michel_Rolle
发布2025-03-03 20:31:44
发布2025-03-03 20:31:44
13200
代码可运行
举报
文章被收录于专栏:AI分享AI分享
运行总次数:0
代码可运行

link

整数数组 nums 按升序排列,数组中的值 互不相同

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

 Example 1:

代码语言:javascript
代码运行次数:0
复制
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

代码语言:javascript
代码运行次数:0
复制
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
代码语言:javascript
代码运行次数:0
复制
func search(nums []int, target int) int {
	left := 0
	right := len(nums) - 1

	for left <= right {
		mid := (left + right) / 2

		if nums[mid] == target {
			return mid
		}

		// 判断是否在前半部分查找
		if (nums[left] <= target && target <= nums[mid]) || (nums[mid] <= nums[right] && (target < nums[mid] || target > nums[right])) {
			right = mid - 1
		} else {
			left = mid + 1
		}
	}

	return -1
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档