NC48. 在旋转过的有序数组中寻找目标值
描述
示例1
输入:
[6,8,10,0,2,4],10
输出:
2
说明:
如题面解释示例2
输入:
[6,8,10,0,2,4],3
输出:
-1
说明:
如题面解释示例3
输入:
[2],1
输出:
-1
C++ 解法, 执行用时: 2ms, 内存消耗: 432KB, 提交时间: 2021-09-18
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write code here //6 8 10 0 2 4 int index=0; for(int i=0;i<nums.size()-1;i++){ if(nums[i]>nums[i+1]){ index=i; break; } } int low,high; if(target<nums[0]){ low=index+1; high=nums.size()-1; }else if(index!=0&&target>nums[0]){ low=0; high=index; }else if (index==0){ low=0; high=nums.size(); } int mid; while(low<=high){ mid=(high+low)/2; if(target<nums[mid]){ high=mid-1; }else if(target>nums[mid]){ low=mid+1; }else return mid; } return -1; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 456KB, 提交时间: 2021-09-09
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write code here int ans=-1; for(int i=0;i<nums.size();i++){ if(nums[i]==target){ans=i;break;}//降序 } return ans; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 516KB, 提交时间: 2021-09-05
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write code here int l = 0; int r = nums.size() - 1; int mid = -1; while (l <= r) { mid = (l+r)/2; if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { // find bigger if (nums[mid] >= nums[0]) { l = mid + 1; } else { if (target >= nums[0]) { r = mid - 1; } else { l = mid + 1; } } } else { // find smaller if (nums[mid] < nums[0]) { r = mid - 1; } else { if (target >= nums[0]) { r = mid - 1; } else { l = mid + 1; } } } } return -1; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 520KB, 提交时间: 2021-09-14
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write code here int i; for(i=0;i<nums.size();++i) { if(nums[i]==target) break; } if(i==nums.size()) return -1; return i; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 520KB, 提交时间: 2021-09-09
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { int n = nums.size(); int low = 0, high = n - 1; while (low <= high) { int mid = (low + high) / 2; // 中间位置 if (nums[mid] == target) return mid; // 找到 if (nums[low] < nums[mid]) { // 若左边是有序的 if (target >= nums[low] && target <= nums[mid]) { // 若目标值在区间内 high = mid - 1; } else { // 目标值不在区间内 low = mid + 1; } } else { // 右边是有序的 if (target >= nums[mid] && target <= nums[high]) { // 目标值在区间内 low = mid + 1; } else { // 目标值不在区间内 high = mid - 1; } } } return -1; } };