154. 寻找旋转排序数组中的最小值 II
题目链接:154. 寻找旋转排序数组中的最小值 II - 力扣(LeetCode)
解析:
81. 搜索旋转排序数组 II - 力扣(LeetCode) 感觉代码有点乱,换种方法
当mid与0相等的时候可以考虑,直接过滤0,start++,这样start ~ n的下标区间内还是所有元素都有
但这样会有一个问题,就是最小值在start,这样就没办法找到target(大于0且右边比当前的小),反转下找最小就好了
class Solution { public: int findMin(vector<int>& nums) { int n = nums.size(); if (n == 1) return nums[0]; int start = 0; int x = 0, y = n - 1, k = -1; while(x <= y) { int mid = (x + y) / 2; if (nums[mid] <= nums[start] && mid -1 >= 0 && nums[mid] < nums[mid - 1]) { k = mid; break; } else if (nums[mid] < nums[start]) { y = mid - 1; } else if (nums[mid] > nums[start]) { x = mid + 1; } else { start++; if (x < start) x = start; } } if (start >= n) return nums[0]; if (k == -1) return nums[start]; return nums[k]; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号