LeetCode25 搜索插入位置

  1. 題目
    給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。
    如果目標值不存在于數組中,返回它將會被按順序插入的位置。
  2. 示例
    示例 1:輸入: nums = [1,3,5,6], target = 5
    輸出: 2
    示例 2:輸入: nums = [1,3,5,6], target = 2
    輸出: 1
    示例 3:輸入: nums = [1,3,5,6], target = 7
    輸出: 4
  3. 解題思路
    1. 方法一:首先本題思路,找到第一個大于等于target的元素位置,即插入位置。所以直接遍歷數組,找到第一個大于等于target的元素位置就是結果。但本題要求時間復雜度為log(n),那么需要進行優化。
    2. 方法二:二分查找。算法思路:將數組分成兩份,left=0,mid=(left + right) / 2,right=length-1。根據mid與target的大小,進一步劃分區域。如果mid>target,說明target在0到mid之間。反之,在mid到length-1之間。將范圍縮小(left = mid + 1 或 right?= mid - 1 ), 繼續比較。本題可以用二分查找的思想,不過算法是查找相等數據,本題需要查找第一個大于等于的數據。
      1. 這里說明下為什么以left進行返回:
        本題結果即找到第一個大于等于target的元素。在二分查找的過程中,遇到的第一個mid對應元素,大于target時,mid對應的元素不一定是第一個大于target元素,只是二分查找過程中遇到的第一個。此時需要繼續縮小范圍就繼續比較。
        那么什么情況下是第一個呢?首先mid對應元素和target相等的時候直接返回mid位置,即插入位置。大于的情況,因為數組中不存在target,那么一定會遍歷到left==right==mid的時候,如果這個元素大于target,根據二分查找算法原理,此時right = mid - 1,left>right跳出循環,left即結果;如果這個元素小于target,left = mid+1,left>right跳出循環,left即結果(已經加1)。這里不管是大于還是小于,mid的其他位置都是已經確認了大于或小于target了。那么如果這個位置小于target,那么它后面的就是第一個大于target的,如果這個位置大于target那么他就是第一個大于target的。
  4. 代碼(Java)
    // 方法一
    class Solution {public int searchInsert(int[] nums, int target) {if (nums == null || nums.length == 0) {return -1;}if (nums[0] > target) {return 0;}if (nums[nums.length - 1] < target) {return nums.length;}for (int i = 0; i < nums.length; i++) {if (nums[i] >= target) {return i;}}return nums.length;}
    }
    // 方法二
    class Solution {public int searchInsert(int[] nums, int target) {if (nums == null || nums.length == 0) {return -1;}if (nums[0] > target) {return 0;}if (nums[nums.length - 1] < target) {return nums.length;}int left = 0;int right = nums.length - 1;while (left <= right) {int mid = (left + right) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return left;}
    }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719630.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719630.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OceanPen Art AI繪畫系統內容講解

在一個崇高的目標支持下&#xff0c;不停地工作&#xff0c;即使慢&#xff0c;也一定會獲得成功。 —— 愛因斯坦 演示站點&#xff1a; ai.oceanpen.art官方論壇&#xff1a; www.jingyuai.com &#x1f4a1;技術棧 前端&#xff1a;VUE3后端&#xff1a;Java數據&#xf…

【硬件相關】SMART硬盤健康狀態監測

文章目錄 一、前言1、SMART技術介紹2、SMART功能作用3、SMART運行原理 二、部署實踐1、SMART軟件安裝2、SMART操作命令2.1、狀態查詢2.2、健康測試 3、SMART信息解讀 三、異常預測 一、前言 Wikipedia&#xff1a; Self-Monitoring,_Analysis_and_Reporting_Technology 1、SMAR…

5G網絡架構與組網部署01--5G網絡架構的演進趨勢

目錄 1. 5G網絡架構的演進趨勢 1.1 5G移動通信系統整體架構 1.2 4G移動通信系統整體架構 1.3 4G與5G移動通信系統整體架構對比 1.4 核心網架構演進 1.5 無線接入網演進 1. 整體架構組成&#xff1a;接入網&#xff0c;核心網 2. 5G網絡接入網和核心網對應的網元&#xff…

es集群的詳細搭建過程

目錄 一、VM配置二、集群搭建三、集群配置 一、VM配置 VM的安裝 VMware Workstation 15 Pro的安裝與破解 VM新建虛擬機 VM新建虛擬機 二、集群搭建 打開新建好的服務器&#xff0c;node1&#xff0c;使用xshell遠程連接 下載es&#xff1a;https://www.elastic.co/cn/down…

內網穿透的應用-如何修改Nginx服務location代理轉發規則結合cpolar實現無公網ip環境訪問內網站點

文章目錄 1. 下載windows版Nginx2. 配置Nginx3. 測試局域網訪問4. cpolar內網穿透5. 測試公網訪問6. 配置固定二級子域名7. 測試訪問公網固定二級子域名 1. 下載windows版Nginx 進入官方網站(http://nginx.org/en/download.html)下載windows版的nginx 下載好后解壓進入nginx目…

問題解決:各版本的vc_redist下載地址 缺少msvcr100.dll、msvcr120.dll、msvcr140.dll

Visual C Redistributable for Visual Studio各版本的官方鏈接。解決缺少msvcr100.dll、msvcr120.dll、msvcr140.dll的問題。 下面全部為官方鏈接&#xff1a; Microsoft Visual C Redistributable 2019 x86: https://aka.ms/vs/16/release/VC_redist.x86.exe x64: https://ak…

【S32DS報錯】-5-提示Secure Debug might be enabled on this device錯誤

【S32K3_MCAL從入門到精通】合集&#xff1a; S32K3_MCAL從入門到精通https://blog.csdn.net/qfmzhu/category_12519033.html 問題背景&#xff1a; 在S32DS IDE中使用PEmicro&#xff08;Multilink ACP&#xff0c;Multilink Universal&#xff0c;Multilink FX&#xff09…

自適應控制算法講解-案例(附C代碼)

目錄 一、自適應控制算法的基本原理 二、自適應控制算法分類 三、案例 3.1自適應PID控制 1&#xff09; 模型識別 2&#xff09;動態調整PID參數邏輯 3&#xff09;PID控制器 自適應控制算法是一種高級控制算法&#xff0c;用于處理那些參數不確定或者動態變化的系統。這類…

SwiftUI 在 App 中彈出全局消息橫幅(下)

功能需求 在 SwiftUI 開發的 App 界面中,有時我們需要在全局層面向用戶展示一些消息: 如上圖所示:我們彈出的全局消息橫幅位于所有視圖之上,這意味這它不會被任何東西所遮擋;而且用戶可以點擊該橫幅關閉它。這是怎么做到的呢? 在本篇博文中,您將學到以下內容 功能需求…

iOS-設置指定邊圓角(左上、左下等)

以UILabel舉例&#xff0c;效果圖如下&#xff1a; 方法一僅支持iOS11以上 方法一&#xff1a; [_sleepStateLabel.layer setMasksToBounds:YES]; [_sleepStateLabel.layer setCornerRadius:12]; [_sleepStateLabel.layer setMaskedCorners:kCALayerMinXMinYCorner | kCALaye…

個人項目介紹3:火車站篇

項目需求&#xff1a; 一比一精確顯示火車站主建筑和站臺模型。實時響應車輛信息&#xff08;上水&#xff0c;吸污&#xff0c;換乘&#xff09;并同步顯示&#xff0c;實時響應車輛進出站信息&#xff0c;并以動畫形式模擬。實時響應報警信息&#xff0c;并能在三位中顯示&a…

#WEB前端(CCS選擇器)

1.實驗&#xff1a;CCS選擇器 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; 子代選擇器、后代選擇器、相鄰兄弟選擇器、類選擇器、偽元素選擇器&#xff08;鼠標懸停&#xff09;、ID選擇器、調用選擇器&#xff08;全選&#xff09; 4.代碼&#xff1a; <!DOCTYPE html…

java generics(泛型)

在定義類、接口和方法時&#xff0c;泛型使類型(類和接口)成為參數。與方法聲明中使用的形參非常相似&#xff0c;類型參數為您提供了一種方法&#xff0c;可以用不同的輸入重用相同的代碼。不同之處在于形式參數的輸入是值&#xff0c;而類型參數的輸入是類型。 使用泛型有許…

Elasticsearch7.17.7操作geo_point類型數據

目前使用的elasticsearch版本是7.17.7 有一個index&#xff0c;其中mapping的內容如下&#xff1a; {"city" : {"aliases" : { },"mappings" : {"properties" : {"city" : {"type" : "keyword"},"…

嵌入式學習 Day 29

函數: 1.函數的定義 2.函數的調用 3.函數的聲明 1.函數傳參: 1.賦值傳遞&#xff08;復制傳遞&#xff09; 函數體內部想要使用函數體外部變量值的時候使用復制傳遞 2.全局變量傳遞 3.地址傳遞 函數體內部想要修改函數體外部變量值的時候使用地址傳遞 函數…

代碼隨想錄算法訓練營第48天| Leetcode 121. 買賣股票的最佳時機、Leetcode 122.買賣股票的最佳時機II

文章目錄 Leetcode 121. 買賣股票的最佳時機Leetcode 122.買賣股票的最佳時機II Leetcode 121. 買賣股票的最佳時機 題目鏈接&#xff1a; Leetcode 121. 買賣股票的最佳時機 題目描述&#xff1a; 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股…

W5300驅動說明

W5300是一款帶有硬件協議棧的網絡芯片&#xff0c;內部擁有128K的緩存&#xff0c;最大支持8路socket通信&#xff0c;與MCU之間通過16位數據總線通信&#xff0c;通信速度遠超W5500之類以SPI作為通信接口的網絡芯片&#xff0c;特別適合對高速網絡傳輸有需求的應用。 本次使用…

使用 helm repo add istio添加了一個helm chart repo,如何查看istio的版本呢

1. 添加chart repo helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update2. 查看版本 helm search repo istio 3. 查看版本詳細信息 helm show chart istio/cni 4. 查看某個chart的歷史版本 helm search repo <chart-name> --…

【Linux】信號的保存

&#x1f34e;個人博客&#xff1a;個人主頁 &#x1f3c6;個人專欄&#xff1a;Linux ?? 功不唐捐&#xff0c;玉汝于成 目錄 前言 正文 信號在Linux中的保存主要涉及方面 信號的類型&#xff1a; 信號處理程序&#xff1a; 信號的傳遞和處理&#xff1a; 信號的阻…

面試官:你用過Collections工具類嗎?

Collections工具類 1. 常用的 Collections 方法2. 代碼示例 Java中的 Collections 工具類提供了一系列靜態方法&#xff0c;用于對集合進行各種操作&#xff0c;如排序、查找、替換等。下面我們來看一些 Collections 工具類中常用的API和使用示例。 1. 常用的 Collections 方…