Question1
Solution1
二分查找。
因为列表被rotated了,不能用普通二分查找的判断条件来判断了。
按照mid进行分割后。对于前半段,考虑其first和mid之间的大小关系。
如果first小于mid,那么这一段数据是排序好的,这时候判断target是否在其中,如果在,则将last=mid-1,继续进行。如果不在,那么说明target在后半段,first=mid+1。
如果first大于mid,那么后半段为排序好的数列,考虑target时候在其中,如果在,则将first=mid+1,继续进行。如果不在,那么说明target在前半段,last=mid-1。
1 | class Solution: |
Solution2
直接查找。
1 | class Solution: |
Question2
Solution1
修改上面的代码。去除nums开头与末位相同的元素。
1 | class Solution: |
Solution2
直接查找。
1 | class Solution: |