• leetcode------Search in Rotated Sorted Array


    标题: Search in Rotated Sorted Array
    通过率: 28.9%
    难度:

    Suppose a sorted array is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    You are given a target value to search. If found in the array return its index, otherwise return -1.

    You may assume no duplicate exists in the array.

    这个题目是升级版的难度定为中等,我再做这个升级版时不知道什么旋转排序数组,然后来先做这个版本,然后我才弄明白,这种类型有两种情况

    1.    4567012中间为7且   start=4<7,那么target如果在4-7之间的或者在7以外

    2.45670123中间位置为0 且 start=4>0,那么target在4-0之间或者0以外。

    直接看代码,最后一个else操作是start++  看一个例子 【1,3】target=3.当mid=0时 start=0 ,mid对应的元素和start对应的元素是相等,但是又不等于target

    代码如下:

     1 public class Solution {
     2     public int search(int[] A, int target) {
     3         int start=0,end=A.length-1,mid=0;
     4         while(start<=end){
     5             mid=(start+end)/2;
     6             if(A[mid]==target)return mid;
     7             if(A[start]<A[mid]){
     8                 if((target<A[mid])&&(target>=A[start]))
     9                     end=mid-1;
    10                     else start=mid+1;
    11             }
    12             else if(A[start]>A[mid]){
    13                 if((target<A[mid])||(target>=A[start]))
    14                     end=mid-1;
    15                     else start=mid+1;
    16             }
    17             else start++;
    18         }
    19         return -1;
    20     }
    21 }

    python:

     1 class Solution:
     2     # @param A, a list of integers
     3     # @param target, an integer to be searched
     4     # @return an integer
     5 
     6     def search(self, A, target):
     7         left = 0
     8         right = len(A) - 1
     9 
    10         while left <= right:
    11             mid = (left + right) >> 1
    12             if target == A[mid]:
    13                 return mid
    14             # print mid, A[mid], left, A[left], right, A[right], '..',
    15             if A[left] <= A[mid]:
    16                 if A[left] <= target and target <= A[mid]:
    17                     right = mid - 1
    18                 else:
    19                     left = mid + 1
    20             else:
    21                 if A[mid] < target and target <= A[right]:
    22                     left = mid + 1
    23                 else:
    24                     right = mid - 1
    25         return -1
  • 相关阅读:
    下载及爬取网页内容
    对于for循环的理解
    记录安装fiddle出现的问题
    Django
    12种可以参考的思路关于代码能干什么
    “字符文本中字符太多”错误及解决方法
    jQuery参考:jquery中的$(document).ready()与window.onload的区别
    页面定时刷新功能实现
    HTML:关于位置的几个概念
    Lambda表达式
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4287603.html
Copyright © 2020-2023  润新知