LeetCode 71 Search in Rotated Sorted Array II

Follow up for "Search in Rotated Sorted Array":

What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

分析:

先来一个连接:Search in Rotated Sorted Array

题目的意思就是,现在有一个排好序的数组,但是可能从中间断开把后面部分移到前面了。

排序数组的查找应该用二分。

最然不是完全排序,但是仍然保存了顺序信息。

就是,如果

A[mid] > A[left] 那么左边一定是有序的

A[mid] < A[left] 那么右边一定是有序的

根据这个可是实施二分。

这道题麻烦的地方是,可能有重复元素,即可能出现

A[mid] == A[left]

在这种情况下,无法判断是左边有序还是右边有序,这里采取的策略是,

只要相等,就让左边界右移,直到出现不相等,因为只有不相等出现的时候,才能判断是左边有序还是右边有序。

下面代码有参考这篇文章:来个链接

public class Solution {
    public boolean search(int[] A, int target) {
        if(A==null || A.length==0) return false;
        int left = 0;
        int right = A.length-1;
        while(left <= right){
            int mid = (left+right)/2;
            if(A[mid] == target)
                return true;
            //中间大于左边,说明左半部分是有序的
            if(A[mid] > A[left]){
                //大于左边界小于右边界则在左半部分
                if(A[mid]>target && A[left]<=target)
                    right = mid-1;
                else
                //否则在右半部分
                    left = mid+1;
            //中间小于右边,说明右半部分是有序的
            }else if(A[mid] < A[left]){
                
                if(A[mid]<target && A[right]>=target)
                    left = mid+1;
                else
                    right = mid-1;
            }else{
                //不同之处在这里,由于存在重复,当相等的时候无法判断左边有序还是右边有序
                //这里采取的措施是左边界不断右移知道出现不相等的情况
                left++;
            }
        }
        return false;
    }
}


内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值