81. Search in Rotated Sorted Array
这道题用到的是二分法的思想,如果是纯上升的数组,那么就直接二分,将要找的元素和首位元素进行大小比较。但是因为这道题进行了旋转,无法知道想要找的目标值具体在哪一段区间,所以只能进行分类讨论
首先要解决的是重复元素,如果发现nums[start] == nums[mid],即出现了11101这种情况是没办法直接应用二分法的,所要做的是将重复的元素排除出去,即如果出现nums[start] == nums[mid]那么就将start指针向后移动一格直到这种情况消失
之后便是分情况讨论,首先是nums[start] < nums[mid],出现这种情况的话证明数组的前半段是有序的,此时如果target <nums[mid] && target >= nums[left] 的话,证明要找的target存在于数组的前半部分,不然就存在于后半部分。如果是nums[start] >nums[mid],证明后半部分是有序的,之后的操作模仿上一个例子即可。