{ "type": "code_options", "author": "https://github.com/begeekmyfriend/leetcode", "source": "solution.md", "exercise_id": "a3020da0581c42f6b867cc64c1144d75", "keywords": "数组,二分查找", "title": "搜索旋转排序数组", "desc": [ { "content": "\n

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

\n

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

\n

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

\n

 

\n

示例 1:

\n
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:
4
\n

示例 2:

\n
输入:nums = [4,5,6,7,0,1,2], target = 3
输出:
-1
\n

示例 3:

\n
输入:nums = [1], target = 0
输出:
-1
\n

 

\n

提示:

\n\n

 

\n

进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗?

", "language": "markdown" } ], "answer": [ { "content": "", "language": "cpp" } ], "prepared": [ [ { "content": "", "language": "cpp" } ], [ { "content": "", "language": "cpp" } ], [ { "content": "", "language": "cpp" } ] ], "template": { "content": "#include \nusing namespace std;\nclass Solution\n{\npublic:\n\tint search(vector &nums, int target)\n\t{\n\t\tint lo = 0;\n\t\tint hi = nums.size() - 1;\n\t\tfor (lo <= hi)\n\t\t{\n\t\t\tint mid = lo + (hi - lo) / 2;\n\t\t\tif (nums[mid] == target)\n\t\t\t{\n\t\t\t\treturn mid;\n\t\t\t}\n\t\t\tif (nums[lo] <= nums[mid])\n\t\t\t{\n\t\t\t\tif (nums[lo] <= target && target < nums[mid])\n\t\t\t\t{\n\t\t\t\t\thi = mid - 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (nums[mid] < target && target <= nums[hi])\n\t\t\t\t{\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\thi = mid - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n};", "language": "cpp" }, "node_id": "dailycode-9480f3a882734848aeea80c4b8e0fa7c", "license": "csdn.net", "created_at": 1637894158, "topic_link": "https://bbs.csdn.net/topics/600470220" }