题解 | #在旋转过的有序数组中寻找目标值#

在旋转过的有序数组中寻找目标值

http://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995

/**
     * 先简单处理下,找到tmp临界点,再确定左右范围
     *
     * @param nums
     * @param target
     * @return
     */
    public static int search_1(int[] nums, int target) {
        // write code here
        int right = nums.length - 1;
        int left = 0;
        int tmp = 0;
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (i + 1 < nums.length) {
                if (nums[i + 1] < nums[i]) {
                    tmp = nums[i];
                    j = i;
                    break;
                }
            }
        }
        if (nums[right] > target && target > tmp) {
            left = j;
        } else if (nums[0] < target && target < tmp) {
            right = j;
        }

        while (left <= right) {
            int mid = (left + right) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] < target) {
                left = mid + 1;
            }
        }
        return -1;
    }
算法 文章被收录于专栏

数据结构和算法

全部评论

相关推荐

04-17 23:48
西北大学 Java
陈好好wy:加油加油 字节和心脏谁先跳动
字节跳动开奖383人在聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务