大厂面试真题题解:目标最后位置

简介: 大厂面试真题题解:目标最后位置

给一个升序数组,找到 target 最后一次出现的位置,如果没出现过返回 -1

在线评测地址:领扣题库官网

样例 1:
输入:nums = [1,2,2,4,5,5], target = 2
输出:2
样例 2:
输入:nums = [1,2,2,4,5,5], target = 6
输出:-1

算法:二分

算法思路

  • 题目要求我们找到target最后一次出现的位置,由于数组是有序数组,我们可以考虑使用二分法来查找
    代码思路
  1. 设置左边界等于0,右边界等于numsLen - 1
  2. 对于mid所指向的数,当target < nums[mid]时,说明target在mid左侧,那么right = mid;否则说明target在mid右侧,或者如果target == nums[mid]的话说明mid还有可能存在target那么left = mid
  3. 不断重复 2 直到 left + 1 == right 退出
  4. 判断nums[right]是否等于target,若等于返回right,否则返回left,注意一定要先判nums[right],因为nums[left]可能也等于target,但不是最后的位置

复杂度分析

NN表示nums数组长度

  • 空间复杂度:O(1)
  • 时间复杂度:O(logN)
public class Solution {

    /**
     * @param nums: An integer array sorted in ascending order
     * @param target: An integer
     * @return: An integer
     */

    public int lastPosition(int[] nums, int target) {
        if(nums == null || nums.length == 0)
            return -1;
        if(target < nums[0] || target > nums[nums.length-1])
            return -1;

        int left = 0, right = nums.length-1;

        while(left+1 < right){
            int mid = left + (right - left) / 2;
            if(nums[mid] > target)
                right = mid;
            else 
                left = mid;
        }

        if(nums[right] == target)
            return right;
        if(nums[left] == target)
            return left;
        return -1;
    }
}

更多题解参考:九章官网Solution

相关文章
|
Serverless C语言 索引
华为面试C语言真题(二)
华为面试C语言真题( 二)
301 1
华为面试C语言真题(二)
|
安全 测试技术 Python
软件测试面试题及答案,这个题库有3千多道最新面试真题可以刷
相信对于很多软件测试新手来说,技术项目的面试是十分让人头疼的,生怕没回答得好,就会跟这个offer失之交臂
202 0
|
设计模式 缓存 算法
腾讯Java高级岗180道面试真题,面试大厂拿45Koffer没问题!
一、数据结构与算法基础 · 说一下几种常见的排序算法和分别的复杂度。 · 用Java写一个冒泡排序算法 · 描述一下链式存储结构。 · 如何遍历一棵二叉树? · 倒排一个LinkedList。 · 用Java写一个递归遍历目录下面的所有文件
|
消息中间件 NoSQL 网络协议
字节跳动三面Java经历,砍下年薪50W的Offer,面试真题整理分享
应广大读者要求,今天开更一些大厂的面经和相关的面试干货,下面这份**最新字节跳动春招面经+笔记**带给大家。
151 0
字节跳动三面Java经历,砍下年薪50W的Offer,面试真题整理分享
|
NoSQL 算法 Dubbo
Java工程师丨面试真题(二)
Java工程师丨面试真题(二)
Java工程师丨面试真题(二)
Java工程师丨面试真题(一)
Java工程师丨面试真题(一)
|
存储 自然语言处理 前端开发
【牛客刷题】大厂真题 | 前端面试篇(一)
【牛客刷题】大厂真题 | 前端面试篇(一)
192 0
|
人工智能 Java 测试技术
【牛客刷题系列】Java工程师 | 百度面试真题(二)
【牛客刷题系列】Java工程师 | 百度面试真题(二)
121 0
|
Java
【大厂真题实战】Java工程师 | 字节面试真题(一)
【大厂真题实战】Java工程师 | 字节面试真题(一)
138 0