在排序数组中查找元素的第一个和最后一个位置 java篇 leetcode

news/2024/7/5 23:21:10

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

进阶:

你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?

 

 

class Solution {

    public int binarySearch(int[] nl, int target, boolean flag) {
        int l = 0;
        int ret = nl.length;
        int r = ret - 1;
        while (l <= r) {
            int mid = (l + r) >>> 1;
            if (nl[mid] > target || (flag && nl[mid] >= target)) {
                r = mid - 1;
                ret = mid;
            } else {
                l = mid + 1;
            }
        }
        return ret;
    }

    public int[] searchRange(int[] nl, int target) {
        int[] ret = new int[]{-1, -1};
        if(nl.length==0||nl==null){
            return ret;
        }
        int li = binarySearch(nl, target, true);
        int ri = binarySearch(nl, target, false) - 1;
        if (li <= ri && nl[li] == target && nl[ri] == target ) {
            ret[0] = li;
            ret[1] = ri;
            return ret;
        }
        return ret;
    }
}

 

 

 


http://www.niftyadmin.cn/n/3651733.html

相关文章

Python Cookbook 第二版 汉化版 [00-2-Preface] Part 2

0.5 Organization0.5 本书的组织本书共 20 章。每一章专门讨论某一类型的 recipe &#xff0c;比如算法、文本处理、数据库等。本书第一版仅 17 章。自第一版以来&#xff0c;Python 在语言设施和程序库两方面有了进步&#xff0c;Python 社区也在 cookbook 网站上新贴了大量的…

删除有序数组中的重复项 leetcode java篇

给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度&#xff0c;所以必须将结果放在数组nums的第一部分…

懒人的Python技巧#20060706

很多工作经常是在同时打开了N个窗口&#xff0c;搞不好还开着Photoshop和/或Illustrator的情况下进行。如此负荷&#xff0c;再快的电脑也照给“沙漏”。然而即使是在这样的情形之下&#xff0c;还经常会遇到“希望把Word文档转为文本文件”的需求——这大约是Word的滥用和优秀…

移除元素 leetcode java篇

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

懒人的Python技巧#20060708

National Geographic 的网站上有一个 Photo of the Day &#xff08;POTD&#xff09;栏目&#xff1a;http://lava.nationalgeographic.com/pod/ &#xff08;当天的墙纸&#xff09;http://lava.nationalgeographic.com/cgi-bin/pod/archive.cgi &#xff08;以前的墙纸Archi…

Python Cookbook 第二版 汉化版 [00-1-Info]

Python Cookbook 第二版 汉化版David Ascher, Alex Martelli, Anna Ravenscroft 著出版社: OReilly出版日期: March 2005ISBN: 0-596-00797-3页码数目: 844 页同本书第一版一样&#xff0c;第二版汇集了 Python 程序员遇到的常见问题的解决办法。第二版针对 Python 2.4 做了相应…

搜索插入位置 leetcode java篇

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 p.s. 用移位操作符时一定要打括号,不然优先级太后面了,会导致死循环…

最大子数组和 leetcode java篇

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 class Solution {public int maxSubArray(int[] ns) {int max ns[0];int pre 0;for(in…