zoukankan      html  css  js  c++  java
  • 33.Search in Rotated Sorted Array---二分变形---《剑指offer》面试题8

    题目链接

    题目大意:在一个旋转数组中,判断给定的target是否存在于该旋转数组中。数组中没有重复数值。例子如下:

    法一:二分。确定中间元素之后,就要判断下一步是遍历左数组还是遍历右数组。如果左数组有序,且target在左数组范围内,则遍历左数组,否则遍历右数组;如果右数组有序,且target在右数组范围内,则遍历右数组,否则遍历左数组。o(lgn)。代码如下(耗时15ms):

     1     public int search(int[] nums, int target) {
     2         int left = 0, right = nums.length - 1;
     3         while(left <= right) {
     4             int mid = (left + right) / 2;
     5             if(nums[mid] == target) {
     6                 return mid;
     7             }
     8             //如果左半段有序
     9             else if(nums[left] <= nums[mid]) {
    10                 //如果target在左半段范围内
    11                 if(nums[left] <= target && nums[mid] > target) {
    12                     right = mid - 1;
    13                 }
    14                 //虽然左半段有序,如果target不在左半段范围内,则向右遍历右半段
    15                 else {
    16                     left = mid + 1;
    17                 }
    18             }
    19             //如果右半段有序
    20             else {
    21                 //如果target在右半段范围内
    22                 if(nums[right] >= target && nums[mid] < target) {
    23                     left = mid + 1;
    24                 }
    25                 //虽然右半段有序,如果target不在右半段范围内,则向左遍历左半段
    26                 else {
    27                     right = mid - 1;
    28                 }
    29             } 
    30         }
    31         return -1;
    32     }
    View Code
  • 相关阅读:
    JavaScript 创建和浅析自定义对象
    JavaScript Object对象
    JavaScript String对象
    JavaScript Math和Number对象
    using kafkacat reset kafka offset
    windows 10 enterprize LTSC
    avro-1.8.1 serialize BigDecimal and Short error fix.
    Ubuntu Navicat for MySQL安装以及破解方案
    Kafka Connect Architecture
    python 读写配置文件
  • 原文地址:https://www.cnblogs.com/cing/p/9197702.html
Copyright © 2011-2022 走看看