LeetCode 第34、35題

LeetCode 第34題:在排序數組中查找元素的第一個和最后一個位置

題目描述

給你一個按照非遞減順序排列的整數數組nums,和一個目標值target。請你找出給定目標值在數組中的開始位置和結束位置。如果數組中不存在目標值target,返回[-1,1]。你必須設計并實現時間復雜度為為O(log n)的算法解決此問題。

難度:中等

題目鏈接:34. 在排序數組中查找元素的第一個和最后一個位置 - 力扣(LeetCode)

示例1:

輸入:nums = [5,7,7,8,8,10], target = 8
輸出:[3,4]

示例2:

輸入:nums = [5,7,7,8,8,10], target = 6
輸出:[-1,-1]

示例3:

輸入:nums = [], target = 0
輸出:[-1,-1]

提示:

  • 0<=nums.length<=105
  • -109<=nums[i]<=109
  • nums是一個非遞減數組
  • -109<=target<=109

解題思路:二分查找

關鍵點:

  • 尋找左邊界時,即使找到目標值也繼續向左搜索
  • 尋找右邊界時,即使找到目標值也繼續向右搜索
  • 兩次二分查找的條件稍有不同?
int binarySearch(int* nums,int numsSize,int target,bool lower)
{int left = 0,right = numsSize-1,ans = numsSize;while(left<=right){int mid=(left+right)/2;if(nums[mid]>target || (lower && nums[mid] >=target)){right = mid-1;ans=mid;}elseleft=mid+1;}return ans;
}int* searchRange(int* nums,int numsSize,int target,int* returnSize)
{int leftIdx = binarySearch(nums,numsSize,target,true);int rightIdx = binarySearch(nums,numsSize,target,false)-1;int* ret = malloc(sizeof(int)*2);*returnSize=2;if(leftIdx<=rightIdx && rightIdx<numsSize && nums[leftIdx]==target && nums[rightIdx]==target){ret[0]=leftIdx,ret[1]=rightIdx;return ret;}ret[0]=-1,ret[1]=-1;return ret;
}

返回的left永遠是首個大于等于target的數的位置,right永遠是首個小于target的數的位置,左邊界按正常查找,右邊查target+0.5即可。5

int binSearch(vector<int>& nums,double target)
{int n=nums.size();int left = 0,right = n-1;while(left<=right){int mid = (left+right)/2;if(nums[mid]>=target) right = mid-1;else left = mid+1;}return left;
}
public:
vector<int> searchRange(vector<int>& nums,int target)
{if(nums.size()==0) return {-1,-1};int l = binSearch(nums,target);int r=binSearch(nums,target+0.5)-1;if(l>=nums.size() || r<0 || l>r)  return {-1,-1};return {l,r};}

LeetCode 第35題:搜索插入位置

題目描述

給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。請必須使用時間復雜度為O(log n)的算法。

難度:簡單

題目鏈接:35. 搜索插入位置 - 力扣(LeetCode)

示例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

示例4:

輸入: nums = [1,3,5,6], target = 0
輸出: 0

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 為?無重復元素?的?升序?排列數組
  • -104 <= target <= 104

解題思路:二分查找

  • 初始化左右指針
  • 進行二分查找
  • 如果找到目標值,直接返回
  • 如果找不到,返回left指針位置
int searchInsert(int* nums, int numsSize, int target)
{int left = 0,right = numsSize-1;while(left<=right){int mid = left+(right-left)/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/diannao/75612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75612.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75612.shtml

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

相關文章

告別分庫分表,時序數據庫 TDengine 解鎖燃氣監控新可能

達成效果&#xff1a; 從 MySQL 遷移至 TDengine 后&#xff0c;設備數據自動分片&#xff0c;運維更簡單。 列式存儲可減少 50% 的存儲占用&#xff0c;單服務器即可支撐全量業務。 毫秒級漏氣報警響應時間控制在 500ms 以內&#xff0c;提升應急管理效率。 新架構支持未來…

第十四屆藍橋杯真題

一.LED 先配置LED的八個引腳為GPIO_OutPut,鎖存器PD2也是,然后都設置為起始高電平,生成代碼時還要去解決引腳沖突問題 二.按鍵 按鍵配置,由原理圖按鍵所對引腳要GPIO_Input 生成代碼,在文件夾中添加code文件夾,code中添加fun.c、fun.h、headfile.h文件,去資源包中把lc…

《基于機器學習發電數據電量預測》開題報告

個人主頁&#xff1a;大數據蟒行探索者 目錄 一、選題背景、研究意義及文獻綜述 &#xff08;一&#xff09;選題背景 &#xff08;二&#xff09;選題意義 &#xff08;三&#xff09;文獻綜述 1. 國內外研究現狀 2. 未來方向展望 二、研究的基本內容&#xff0c;擬解…

UWP程序用多頁面實現應用實例多開

Windows 10 IoT ARM64平臺下&#xff0c;UWP應用和MFC程序不一樣&#xff0c;同時只能打開一個應用實例。以串口程序為例&#xff0c;如果用戶希望同時打開多個應用實例&#xff0c;一個應用實例打開串口1&#xff0c;一個應用實例打開串口2&#xff0c;那么我們可以加載多個頁…

Springboot整合Netty簡單實現1對1聊天(vx小程序服務端)

本文功能實現較為簡陋&#xff0c;demo內容僅供參考&#xff0c;有不足之處還請指正。 背景 一個小項目&#xff0c;用于微信小程序的服務端&#xff0c;需要實現小程序端可以和他人1對1聊天 實現功能 Websocket、心跳檢測、消息持久化、離線消息存儲 Netty配置類 /*** au…

GitLab 中文版17.10正式發布,27項重點功能解讀【二】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料&#xff1a; 極狐GitLab 官網極狐…

好消息!軟航文檔控件(NTKO WebOffice)在Chrome 133版本上提示擴展已停用的解決方案

軟航文檔控件現有版本依賴Manifest V2擴展技術支持才能正常運行&#xff0c;然而這個擴展技術到2025年6月在Chrome高版本上就徹底不支持了&#xff0c;現在Chrome 133開始的版本已經開始彈出警告&#xff0c;必須手工開啟擴展支持才能正常運行。那么如何解決這個技術難題呢&…

字典樹與01trie

字典樹簡介 當我們通過字典查一個字或單詞的時候&#xff0c;我們會通過前綴或關鍵字的來快速定位一個字的位置&#xff0c;進行快速查找。 字典樹就是類似字典中索引表的一種數據結構&#xff0c;能夠幫助我們快速定位一個字符串的位置。 字典樹是一種存儲字符串的數據結構…

二十五、實戰開發 uni-app x 項目(仿京東)- 前后端輪播圖

定義了一個名為 Swiper 的Java類,用于表示一個輪播圖實體。它使用了 Jakarta Persistence API (JPA) 來映射數據庫表,并使用了 Lombok 庫來簡化代碼。以下是對代碼的詳細講解: 1. 包聲明 package com.jd.jdmall.model; 這行代碼聲明了該類所在的包路徑為 com.jd.jdmall.mode…

游戲搖桿開發:利用 Windows API 實現搖桿輸入捕獲

在現代游戲開發中&#xff0c;游戲搖桿&#xff08;Joystick&#xff09;作為一種重要的輸入設備&#xff0c;能夠為玩家提供更加沉浸式的游戲體驗。Windows 操作系統提供了一系列 API 函數&#xff0c;允許開發者輕松地捕獲和處理游戲搖桿的輸入。本文將介紹如何使用 Windows …

Ceph集群2025(Squid版)快速對接K8S cephFS文件存儲

ceph的塊存儲太簡單了。所以不做演示 查看集群 創建一個 CephFS 文件系統 # ceph fs volume create cephfs01 需要創建一個子卷# ceph fs subvolume create cephfs01 my-subvol -----------------#以下全部自動創建好 # ceph fs ls name: cephfs01, metadata pool: c…

Python中數據結構元組詳解

在Python中&#xff0c;元組&#xff08;Tuple&#xff09;是一種不可變的序列類型&#xff0c;常用于存儲一組有序的數據。與列表&#xff08;List&#xff09;不同&#xff0c;元組一旦創建&#xff0c;其內容無法修改。本文將詳細介紹元組的基本操作、常見運算、內置函數以及…

游戲引擎學習第183天

回顧和今天的計劃 我對接下來的進展感到非常興奮。雖然我們可能會遇到一些問題&#xff0c;但昨天我們差不多完成了將所有內容遷移到新的日志系統的工作&#xff0c;我們正在把一些內容整合進來&#xff0c;甚至是之前通過不同方式記錄時間戳的舊平臺層部分&#xff0c;現在也…

Spring 如何處理循環依賴

在 Spring 框架里&#xff0c;循環依賴指的是多個 Bean 之間相互依賴&#xff0c;從而形成一個閉環。例如&#xff0c;Bean A 依賴 Bean B&#xff0c;而 Bean B 又依賴 Bean A。Spring 主要通過三級緩存機制來處理循環依賴&#xff0c;下面詳細介紹相關內容。 1. 三級緩存的定…

Android開發layer-list

Android開發layer-list 它的用處可以在drawable上進行多圖拼接&#xff0c;比如啟動頁&#xff0c;不想圖片被拉伸就這么做。還有做某些線突出來。 示例代碼&#xff1a; <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android&q…

手機測試,工作中學習

要學習各種機型的截圖方式、開發模式在哪。 榮耀機型&#xff1a;截圖&#xff1a;關節快速敲兩下。開發者模式在“系統和更新”里。 1.出現缺陷&#xff0c;需要獲取日志。 學習adb生成日志&#xff1a;當測試中出現缺陷的&#xff0c;使用adb logcat -d > d:/log.txt …

OBS虛擬背景深度解析:無需綠幕也能打造專業教學視頻(附插件對比)

想要錄制教學視頻卻苦于背景雜亂&#xff1f;本文將手把手教你用OBS實現專業級虛擬背景效果&#xff0c;無需綠幕也能輕松營造沉浸式教學場景。文末附6個提升畫面質感的免費背景資源&#xff01; 一、虛擬背景的核心價值&#xff1a;從「教師宿舍」到「虛擬講堂」的蛻變 我們調…

零基礎搭建智能法律知識庫!騰訊云HAI實戰教程

為什么需要法律知識庫&#xff1f; 想象一下&#xff0c;你的所有法律文件都在手邊&#xff0c;隨時可以搜索和分析。這就是法律知識庫的魅力所在。對于法律專業人士、處理大量法律文檔的企業&#xff0c;甚至是希望了解法律事項的普通人來說&#xff0c;法律知識庫都是一個不…

Rust從入門到精通之進階篇:19.Rust 生態系統

Rust 生態系統 Rust 擁有一個豐富而活躍的生態系統&#xff0c;提供了各種庫和框架來支持不同領域的開發。在本章中&#xff0c;我們將探索 Rust 生態系統中的主要組件&#xff0c;了解常用的庫和工具&#xff0c;以及如何在項目中有效地使用它們。 Rust 包管理&#xff1a;C…

前端面試:如何去衡量用戶操作過程中否卡頓?

衡量用戶在應用中的操作是否卡頓是前端開發中的一個關鍵任務&#xff0c;涉及用戶體驗的各個方面。以下是一些常用的方法和工具&#xff0c;可以幫助你有效地評估用戶操作中的卡頓情況&#xff1a; 1. 使用性能分析工具 瀏覽器開發者工具&#xff1a;大多數現代瀏覽器&#xf…