日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【LeetCode笔记】35. 搜索插入位置(Java、二分法)

發布時間:2024/7/23 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode笔记】35. 搜索插入位置(Java、二分法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目描述
  • 思路 & 代碼
      • Summary
      • 二刷

題目描述

  • 考慮了一下,還是把這道題作為單獨一篇文了。
  • 主要是配合這篇題解一起理解二分法,實踐太少理解還不夠透徹,還是要溫故知新= =

思路 & 代碼

  • 先貼代碼,結合注釋和下面的總結食用~
class Solution {public int searchInsert(int[] nums, int target) {// 插到最后面的情況特殊考慮if(target > nums[nums.length - 1]){return nums.length;}// 二分法:找到第一個 >= target 的值的下標int left = 0, right = nums.length - 1;// 保證結束的時候 left == rightwhile(left < right){// 可讀性 & 防止 left + right 溢出int mid = left + (right - left) / 2;// 區間劃分成:[left, mid], [mid + 1, right]// 當 mid < target 時,直接舍棄這部分的值(不需要)if(nums[mid] < target){left = mid + 1;}// mid >= target 時,保留 midelse{right = mid;}}return left;} }

Summary

  • int mid = left + (right - left) / 2,可讀性 & 防止 left + right 溢出。(位運算好像其實不會變快
  • 區間劃分,兩種情況:
  • left = mid + 1 && right = mid => [left, mid] && [mid + 1, right],這種情況 mid 要向下取整,防止[left, mid] == [left, right]的情況導致死循環
  • left = mid && right = mid - 1 => [left, mid - 1] && [mid, right],這種情況向上取整,防止
    [mid, right] == [left, right]的情況導致死循環
    • 區間為什么不分成三個部分:結束時不一定有 left == right
    • 出現死循環時,可以輸出 left、right、mid來分析
    • 更多內容可見這篇題解

    二刷

    • 很痛苦,上面的 Summary 真的很重要(特別是死循環部分的向上取整、向下取整)
    class Solution {public int searchInsert(int[] nums, int target) {if(target > nums[nums.length - 1]) {return nums.length;}int left = 0, right = nums.length - 1;while(left < right) {int mid = (left + right) / 2;if(nums[mid] < target) {left = mid + 1;}else {right = mid;}}return left;} }

    總結

    以上是生活随笔為你收集整理的【LeetCode笔记】35. 搜索插入位置(Java、二分法)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。