前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LeetCode49|搜索旋转排序数组

LeetCode49|搜索旋转排序数组

作者头像
码农王同学
发布于 2020-09-10 07:42:10
发布于 2020-09-10 07:42:10
29100
代码可运行
举报
文章被收录于专栏:后端Coder后端Coder
运行总次数:0
代码可运行

1,问题简述

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

你可以假设数组中不存在重复的元素。

你的算法时间复杂度必须是 O(log n) 级别。

2,示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:
输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

3,题解思路

键值对集合的使用

4,题解程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.stream.IntStream;

public class SearchTest {
    public static void main(String[] args) {
        int[] nums = {4, 5, 6, 7, 0, 1, 2};
        int target = 0;
        int search = search3(nums, target);
        long startTime = System.currentTimeMillis();
        System.out.println("search = " + search);
        long endTime = System.currentTimeMillis();
        long totalTime = endTime - startTime;
        System.out.println("totalTime = " + totalTime + "毫秒");
    }

    public static int search(int[] nums, int target) {
        if (nums == null || nums.length == 0) {
            return -1;
        }
        int length = nums.length;
        HashMap<Integer, Integer> hashMap = new HashMap<>(length);
        for (int i = 0; i < length; i++) {
            hashMap.put(i, nums[i]);
        }
        Optional<Map.Entry<Integer, Integer>> entry = hashMap.entrySet().stream().filter(x -> x.getValue() == target).findFirst();
        if (entry.isPresent()) {
            return entry.get().getKey();
        }
        return -1;
    }

    public static int search2(int[] nums, int target) {
        if (nums == null || nums.length == 0) {
            return -1;
        }
        int length = nums.length;
        int[] newNums = new int[length];
        System.arraycopy(nums, 0, newNums, 0, length);
        int newLength = newNums.length;
        return IntStream.range(0, newLength).filter(i -> newNums[i] == target).findFirst().orElse(-1);
    }

    public static int search3(int[] nums, int target) {
        if (nums == null || nums.length == 0) {
            return -1;
        }
        int start = 0;
        int end = nums.length - 1;
        int mid;
        while (start <= end) {
            mid = start + (end - start) / 2;
            if (nums[mid] == target) {
                return mid;
            }
            if (nums[start] <= nums[mid]) {
                if (target >= nums[start] && target < nums[mid]) {
                    end = mid - 1;
                } else {
                    start = mid + 1;
                }
            } else {
                if (target > nums[mid] && target <= nums[end]) {
                    start = mid + 1;
                } else {
                    end = mid - 1;
                }
            }
        }
        return -1;
    }
}

5,题解程序图片版

6,总结

键值对集合的使用,凑字数来了,曾经我会后悔自己有些事情没有去做,但是随着自己对自己的一通分析,觉得自己本身还是有一些优点的,后悔有用吗?就这样一步步问自己,经过读书的理解,自己慢慢明白了一个道理,人生走的每一步都算数。很久之前的文章就给与了自己这句话,急功近利,欲速则不达,找好自己的人生路,慢慢跑吧,这样自己的人生方向才有了自己独有的特点。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode50|搜索旋转排序数组II
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。
码农王同学
2020/09/10
2150
搜索旋转排序数组(leetcode33)
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
Vincent-yuan
2022/05/06
2540
搜索旋转排序数组(leetcode33)
【刷穿 LeetCode】33. 搜索旋转排序数组(中等)
例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] 。
宫水三叶的刷题日记
2021/02/20
2660
LeetCode51|寻找旋转排序数组中的最小值
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
码农王同学
2020/09/10
4860
LeetCode-33-搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
benym
2022/07/14
2390
LeetCode - #33 搜索旋转排序数组(Top 100)
我们社区陆续会将顾毅(**Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1]**)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/04/04
4150
LeetCode - #33 搜索旋转排序数组(Top 100)
LeetCode-33 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7]可能变为 [4,5,6,7,0,1,2] )。
用户3470542
2019/06/26
1.2K0
LeetCode-33 搜索旋转排序数组
33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
张伦聪zhangluncong
2022/10/26
1480
33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
lucifer210
2019/09/29
4150
33. 搜索旋转排序数组
33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
韩旭051
2020/06/23
2360
Leetcode No.33 搜索旋转排序数组(二分法)
升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。
week
2022/01/07
1790
Leetcode No.33 搜索旋转排序数组(二分法)
leetcode刷题(73)——33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
老马的编程之旅
2022/06/22
1690
leetcode刷题(73)——33. 搜索旋转排序数组
☆打卡算法☆LeetCode 33、搜索旋转排序数组 算法解析
“给定一个旋转后的数组和整数target,如果数组中存在整数target,则返回它的下标。”
恬静的小魔龙
2022/08/07
1860
☆打卡算法☆LeetCode 33、搜索旋转排序数组  算法解析
LeetCode-面试题53-1-在排序数组中查找数字I
在有序的数组中二分查找,确定第一个k出现的位置和最后一个k出现的位置,然后两个位置相减即是出现次数
benym
2022/07/14
5400
T11-搜索旋转排序数组
今天分享leetcode第11篇文章,也是leetcode第33题—Search in Rotated Sorted Array(搜索旋转排序数组),地址是:https://leetcode.com/problems/search-in-rotated-sorted-array/
木又AI帮
2019/07/18
3620
T11-搜索旋转排序数组
Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题
当我们在面对一个数列,需要查找其中两个元素的和为给定目标值时,可以使用两数之和(Two Sum)问题来解决。这个问题在 LeetCode 上有很高的重要性和普遍性,在各种面试中也经常会被考察。
默 语
2024/11/20
550
Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题
LeetCode32|前k个高频元素
6,键值对集合的使用,这里自己也曾经分析过java集合的源码,具体见下面的链接吧,但是自己从未去写过hashMap的源码,因为网络上这样的文章的太多了,自己倒是分析过HashSet的源码java进阶|HashSet的源码分析,HashSet是基于HashMap的基础上实现的,自己也分过HashMap的源码文章,但是从没有去写一篇文章
码农王同学
2020/08/25
3000
LeetCode32|前k个高频元素
LintCode 寻找旋转排序数组中的最小值题目分析代码
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。
desperate633
2018/08/22
4710
必会算法:在旋转有序的数组中搜索
以此类推还有其他四种情况: mid值在第一段,且在目标值的前边 mid值在第二段,且在目标值的前边 mid值在第二段,且在目标值的后边 mid值就是目标值
你好戴先生
2022/12/06
2.9K0
必会算法:在旋转有序的数组中搜索
LeetCode 33-Search in Rotated Sorted Array
看到这个题目,头脑中第一个蹦出来的就是找到rotated的元素,然后两边分别做binary search就可以了。
Dylan Liu
2019/07/01
3410
推荐阅读
相关推荐
LeetCode50|搜索旋转排序数组II
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文