zoukankan      html  css  js  c++  java
  • leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法

    Search in Rotated Sorted Array


    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.


    思路:此题算法上不难。第一步计算旋转的步长。然后依据步长分情况得到升序的新的数组。然后二分查找target的索引。找到后再分情况返回元素的位置。

    详细代码例如以下:

    public class Solution {
        public int search(int[] nums, int target) {
            if(nums.length == 0){
                return -1;
            }
            
            if(nums.length == 1){
                if(nums[0] == target)
                    return 0;
                return -1;
            }
            
            int rotate = 0;//旋转的步长
            for(int i = nums.length - 1; i > 0; i--){
                if(nums[i] < nums[i-1]){
                    rotate = i;
                    break;
                }
            }
            int[] a = new int[nums.length];
            //将数组按升序填充到新数组
            for(int i = rotate; i < nums.length; i++){
                a[i - rotate] = nums[i];//后面未旋转部分
            }
            for(int i = 0; i < rotate; i++){
                a[i+nums.length-rotate] = nums[i];//前面旋转部分
            }
            
            int index = -1;
            //二分查找
            int low = 0;
            int hight = nums.length - 1;
            while(low <= hight){
                int mid = (low + hight)/2;
                if(a[mid] > target){
                    hight = mid - 1;
                }else if(a[mid] == target){
                    index = mid;
                    break;
                }else{
                    low = mid + 1;
                }
            }
            if(index == -1)
                return -1;
            if(index + rotate > nums.length - 1)
                return index + rotate - nums.length;
            return index + rotate;
        }
    }

    兴许:这一题实在解的有些多余了。最简单的就是一次遍历。找到返回index,找不到返回-1.

    代码例如以下:

    public class Solution {
        public int search(int[] nums, int target) {
            for(int i = 0; i < nums.length; i++){
                if(nums[i] == target){
                    return i;
                }
            }
            return -1;
        }
    }

  • 相关阅读:
    文件读写,尝试filestream和streamreader,streamwriter
    打印控件ScriptX,手动安装ScriptX插件说明 只兼容IE
    JS 循环获取Repeater 中Checkbox1被选中的值
    页面传值出现乱码问题 window.showModalDialog()
    无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    js 获取时间给时间控件赋值
    css 固定在窗口底端
    后台转换JSON格式。ToJson
    JS 匿名函数的使用2
    JS 匿名函数的使用1
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6749538.html
Copyright © 2011-2022 走看看