博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数组】搜索旋转排序数组
阅读量:4095 次
发布时间:2019-05-25

本文共 918 字,大约阅读时间需要 3 分钟。

一、题目

力扣原题:

二、暴力

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

三、二分查找

class Solution {    public int search(int[] nums, int target) {        int left = 0;        int right = nums.length - 1;        while (left <= right) {            int mid = (left + right) / 2;            if (target == nums[mid]) {                return mid;            }            // 左边有序            if (nums[mid] >= nums[0]) {                if (target < nums[mid] && target >= nums[0]) {                    right = mid - 1;                } else {                    left = mid + 1;                }            }            // 右边有序            else {                if (target > nums[mid] && target <= nums[nums.length - 1]) {                    left = mid + 1;                } else {                    right = mid - 1;                }            }        }        return -1;    }}
  • 基本思路:二分查找的变种,关键在于判断以mid分割,左边有序还是右边有序
  • 时间复杂度:O(log(n))
  • 空间复杂度:O(1)

四、总结

  • 有序数组的查找应该尽量采用二分查找

转载地址:http://ejaii.baihongyu.com/

你可能感兴趣的文章
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>