從零學算法34

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

  • 非遞減數組求區間,很容易想到的是兩次二分查找找到左右邊界。由于左右邊界的找法幾乎相同,所以把題目轉換一下,只要找到 target 的右邊界,我們就知道了結束位置為右邊界 - 1;而開始位置,我們只要知道 target - 1 的右邊界即可,因為是整數數組,所以只要 target 在數組中存在,那么剛剛大于 target - 1(也就是右邊界) 的肯定是 target。這樣的話我們只需要把二分查找右邊界寫成方法,最終返回大致為 [solve(target-1),solve(target)-1] 即可。剩下的就是分析區間不存在的情況。首先數組沒數肯定就直接返回了,其次如果我能找到區間。那么可以肯定的是,nums[開始位置] 一定是等于 target 的,不是的話肯定也返回了。還有就是如果所有數都比 target 小,那么起始位置會找到數組外面去,所以二分查找返回的數組下標也應當合法。
  •   public int[] searchRange(int[] nums, int target) {if(nums.length == 0){return new int[]{-1,-1};}int first = solve(nums,target-1);// 需要先判斷 first 是否合法,否則 nums[first] 可能直接數組越界了if(first >= nums.length || nums[first] != target){return new int[]{-1,-1};}return new int[]{first,solve(nums,target)-1};}public int solve(int[] nums,int target){int left=0,right=nums.length-1;while(left<=right && left >=0 && right <= nums.length-1){int mid = (left+right)/2;// 這里用小于等于,那么左邊界就會不斷右移,直到找到大于 target 的第一個數// 所以這里的 left 最后就是 target 的右邊界,如果用小于就是左邊界了if(nums[mid]<=target)left=mid+1;else right=mid-1;}return left;}
    

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

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

相關文章

React Native 在高IOS版本下無法顯示圖片的問題處理

圖片在低ios版本下可以看到圖片&#xff0c;在高版本ios下顯示不了圖片 直接上解決方法 找文件 /node_modules/react-native/Libraries/Image/RCTUIImageViewAnimated.m 修改源碼 原代碼 if (_currentFrame) {layer.contentsScale self.animatedImageScale;layer.contents…

php中nts和ts

PHP語言解析器:官方提供了2種類型的版本&#xff0c;線程安全(TS)版和非線程安全(NTS)版 TS: TS(Thread-Safety)即線程安全&#xff0c;多線程訪問時&#xff0c;采用了加鎖機制&#xff0c;當一個線程訪問該類的某個數據時進行數據加鎖保護&#xff0c;其他線程不能同時進行訪…

您的網站不應該只提供一套通用 API

后端應該提供兩套 API&#xff0c;一套是外部使用的通用 API&#xff0c;服務特定的數據&#xff0c;另一套是自家使用的應用 API&#xff0c;服務特定的頁面。 在當今的web開發中&#xff0c;構建一個提供JSON服務的后端和一個渲染應用程序的前端是很流行的。我不太喜歡&…

【Sklearn】基于決策樹算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于決策樹算法的數據分類預測&#xff08;Excel可直接替換數據&#xff09; 1.模型原理1.1 模型原理1.2 數學模型 2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果 1.模型原理 決策樹是一種基于樹狀結構的分類和回歸模型&#xff0c;它通過一系列…

MySql(干貨)

寫這篇博客的目的不是為了將介紹原理&#xff0c;而是為了Sql中的代碼操作屬實太多了&#xff0c;在這里進行一個匯總&#xff0c;方便查閱&#xff01;&#xff01;&#xff01; Sql分類 分類全稱說明 DDL Data Definintion Language數據定義語言&#xff0c;用來定義數據庫對…

微信小程序(由淺到深)

文章目錄 一. 項目基本配置1. 項目組成2. 常見的配置文件解析3. app.json全局的五大配置4.單個頁面中的page配置5. App函數6.tabBar配置 二. 基本語法&#xff0c;事件&#xff0c;單位1. 語法2. 事件3. 單位 三. 數據響應式修改四 . 內置組件1. button2. image3. input4. 組件…

k8s常用資源管理 控制

目錄 Pod&#xff08;容器組&#xff09;&#xff1a;Pod是Kubernetes中最小的部署單元&#xff0c;可以包含一個或多個容器。Pod提供了一種邏輯上的封裝&#xff0c;使得容器可以一起共享網絡和存儲資源 1、創建一個pod 2、pod管理 pod操作 目錄 創建Pod會很慢 Pod&…

什么是事務,并發帶來的事務問題以及事務隔離級別(圖文詳解)

一、什么是事務&#xff1f; 簡單說就是邏輯上的一組操作&#xff0c;要么都執行&#xff0c;要么都不執行。 舉個例子&#xff0c;假如小明要給小紅轉賬100元&#xff0c;這個轉賬會涉及到兩個關鍵操作&#xff1a;①將小明的余額減少100元。 ②將小紅的余額增加100元 。但…

學習筆記整理-JS-04-流程控制語句

文章目錄 一、條件語句1. if語句的基本使用2. if else if多條件分支3. if語句算法題4. switch語句5. 三元運算符 二、循環語句1. for循環語句2. for循環算法題3. while循環語句4. break和continue5. do while語句 三、初識算法1. 什么是算法2. 累加器和累乘器3. 窮舉法4. 綜合算…

給大家推薦一些文本翻譯、文檔翻譯API接口

最近在項目中要接入文本翻譯和文檔翻譯功能&#xff0c;滿足在工作時使用&#xff0c;又需要了解每個人的使用情況&#xff0c;所以采用了集成翻譯API的方式&#xff0c;我再調研時也查了比較多的資料&#xff0c;總結了我感覺比較好的網站。 推薦網站 1、百度翻譯&#xff0…

設計模式(2)工廠方法模式

一、 1、介紹&#xff1a;定義一個用于創建對象的接口&#xff0c;讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷&#xff0c;根據客戶端的選擇條件動態實例化相關的類&#xff0c;對于客戶端來說…

odoo-034 float 浮點數比較

文章目錄 前提問題解決總結 前提 odoo 版本&#xff1a;13 python&#xff1a;3.6.9 問題 比較銷售訂單行中已送貨跟已開票&#xff0c;在 tree 視圖顯示搜索后的結果。發現搜索條件為已送貨 > 已開票時&#xff0c;結果中會包含已送貨已開票的。 解決 把這兩個值打印出…

LeNet中文翻譯

Gradient-Based Learning Applied to Document Recognition 基于梯度的學習應用于文檔識別 摘要 使用反向傳播算法訓練的多層神經網絡構成了成功的基于梯度的學習技術的最佳示例。給定適當的網絡架構&#xff0c;基于梯度的學習算法可用于合成復雜的決策表面&#xff0c;該決策…

【Vue-Router】使用 prams 路由傳參失效

報錯信息&#xff1a; [Vue Router warn]: Discarded invalid param(s) “name”, “price”, “id” when navigating. list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水",&quo…

node獲取微信小程序登錄用戶的openid

前提準備&#xff1a; 1、需要知道AppID(小程序ID) 2、AppSecret(小程序密鑰) 3、調wx.login成功后返回的code 代碼如下&#xff1a; const express require(express); const router express.Router(); const request require(request) const APP_URL https://api.wei…

考研408 | 【計算機網絡】 網絡層

導圖 網絡層&#xff1a; 路由器功能&#xff1a;轉發&路由選擇 數據平面 數據平面執行的主要功能是根據轉發表進行轉發&#xff0c;這是路由器的本地動作。 控制平面 1.傳統方法/每路由器法&#xff1a; 2.SDN方法&#xff08;Software-Defined Networking) 控制平面中的…

C++并發多線程--多個線程的數據共享和保護

目錄 1--創建并等待多個線程 2--數據共享 2-1--數據只讀 2-2--數據讀寫 2-3--共享數據保護簡單案例 1--創建并等待多個線程 創建多個線程時&#xff0c;可以使用同一個線程入口函數&#xff1b; 多個線程的執行順序與操作系統的調度機制有關&#xff0c;并不和創建線程的先…

html實現商品圖片放大鏡,html圖片放大鏡預覽

效果 實現 復制粘貼&#xff0c;修改圖片路徑即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品圖片放大鏡</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

關于青少年學習演講與口才對未來的領導力的塑造的探析

標題&#xff1a;青少年學習演講與口才對未來領導力的塑造&#xff1a;一項探析 摘要&#xff1a; 本論文旨在探討青少年學習演講與口才對未來領導力的塑造的重要性和影響。通過分析演講和口才對青少年的益處&#xff0c;以及如何培養這些技能來促進領導力的發展&#xff0c;我…

Harmony創建項目ohpm報錯

Harmony創建FA模型的項目時報如下錯&#xff1a; The registry is empty - edit .ohpmrc file or use "ohpm config set registry your_registry" command to set registry.解決方法&#xff1a; File -> Settings -> Build,Execution,Deployment -> Ohpm …