跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • [leetcode/lintcode 题解] 目标最后位置
未分類
1 10 月 2020

[leetcode/lintcode 题解] 目标最后位置

[leetcode/lintcode 题解] 目标最后位置

資深大佬 : zzzrf 1

给一个升序数组,找到 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;     } }  

大佬有話說 (1)

  • 資深大佬 : xrr2016

    大佬做了多少题了啊

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具