二分法算法技巧-思維提升

背景:

在寫力扣題目“搜素插入位置 ”時,發現二分法的一個細節點,打算記錄下來,先看一張圖:

我們知道,排序數組,更高效的是二分查找法~~~而二分法就是切割中間,定義left是最開始的,也就是下標為0;right 是最后一個

那么這個mid到底怎么寫??

簡單想到的是:int mid = (left + right) / 2;

但是還有更好的寫法!那就是:int mid = left + (right - left) / 2

原因解析

1. 防止整數溢出(關鍵原因)

假設:

left = 2000000000right = 2100000000?(21億)

使用?(left + right) / 2的情況下:

left + right = 2000000000 + 2100000000 = 4100000000

但?int?最大只能存儲 2147483647(約21億),會導致整數溢出變成負數!

使用?left + (right - left) / 2的情況下:

right - left = 100000000
(right - left)/2 = 50000000
left + 50000000 = 2050000000

完全不會溢出!!!!


2. 數學等價性

兩者數學上是等價的:

left + (right - left)/2

= left + right/2 - left/2

= left/2 + right/2

= (left + right)/2

但計算機的整數運算會截斷小數,所以寫法不同會影響結果。

對比總結

寫法安全性可讀性推薦度
(left + right)/2可能溢出更直觀? 不推薦
left + (right - left)/2絕對安全稍復雜? 推薦

案例題目練習:

給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。

示例 1:

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

輸出: 2

代碼實現:

class Solution {public int searchInsert(int[] nums, int target) {int left = 0, right = nums.length - 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/news/907667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907667.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907667.shtml

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

相關文章

Python 訓練營打卡 Day 40

訓練和測試的規范寫法 一、黑白圖片的規范寫法&#xff0c;以MNIST數據集為例 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 用于加載MNIST數據集 from torch.utils.data import DataLoader # 用于創建…

數據結構之棧:原理與常用方法

1. 棧的定義 Stack是Vector的一個子類&#xff0c;它實現標準的后進先出堆棧。Stack只定義了創建空堆棧的默認構造方法。&#xff08;實際上是實現了List接口&#xff0c;因為Vector是List的子類&#xff09;。 Stack() // 創建一個空棧 2. 棧的基本操作 // 壓棧操作 publi…

鴻蒙OSUniApp 開發支持圖片和視頻的多媒體展示組件#三方框架 #Uniapp

使用 UniApp 開發支持圖片和視頻的多媒體展示組件 前言 在現代移動應用中&#xff0c;圖片和視頻已成為內容展示的主流形式。一個優秀的多媒體展示組件不僅能提升用戶體驗&#xff0c;還能增強產品的互動性和視覺沖擊力。隨著鴻蒙&#xff08;HarmonyOS&#xff09;生態的不斷…

STM32CubeMX,arm-none-eabi-gcc簡單試用

在windows下&#xff0c;為stm32系列單片機編程&#xff0c;keil有了免費的試用版&#xff0c;有很多開發板示例&#xff0c;給學習單片機編程帶來很大的方便。 STM32CubeMX提供了stm32單片機的功能設置&#xff0c;在輸出方式上給出了幾種方式&#xff0c;有mdk&#xff08;k…

灌水論壇系統總體設計文檔

一、實驗題目 灌水論壇系統 二、實驗目的 旨在通過一個相對完整且功能豐富的Web應用實例&#xff0c;全面地實踐和鞏固Web開發所需的各項核心技術和工程方法&#xff0c;從而提升其綜合應用能力和解決實際開發問題的能力。它不僅僅是完成一個軟件&#xff0c;更是一個學習、…

Android 13中 配置簽名文件與內置相應的Apk

目錄 1.問題場景 2.實現思路 3.將測試代碼做成APK并配置簽名 4.將apk內置到系統當中的方法 1.問題場景 在展訊平臺中Android13的源碼已知的情況下&#xff0c;客戶寫了一個測試類用于調用系統中的一些接口來檢驗一些功能。為了方便調試排查問題我首先的思路是將客戶寫的測試…

HarmonyOS 5 應用開發導讀:從入門到實踐

一、HarmonyOS 5 概述 HarmonyOS 5 是華為推出的新一代分布式操作系統&#xff0c;其核心設計理念是"一次開發&#xff0c;多端部署"。與傳統的移動操作系統不同&#xff0c;HarmonyOS 5 提供了更強大的跨設備協同能力&#xff0c;支持手機、平板、智能穿戴、智慧屏…

C語言創意編程:用趣味實例玩轉基礎語法(4)

文章目錄 0. 前言1. &#x1f308; 彩虹文字生成器1.1 程序效果展示1.2 完整代碼解析1.3 關鍵技術詳解1.3.1 Windows控制臺API1.3.2 顏色編碼1.3.3 安全輸入1.3.4 跨平臺考慮 2. &#x1f3b5; 簡易音樂播放器2.1 程序效果展示2.2 完整代碼解析2.3 關鍵技術詳解2.3.1 Windows B…

【專題】神經網絡期末復習資料(題庫)

神經網絡期末復習資料&#xff08;題庫&#xff09; 鏈接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【測試】 Th…

Python訓練營打卡 Day41

簡單CNN 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 → Batch…

leetcode216.組合總和III:回溯算法中多條件約束下的狀態管理

一、題目深度解析與組合約束條件 題目描述 找出所有相加之和為n的k個數的組合&#xff0c;且滿足以下條件&#xff1a; 每個數只能使用一次&#xff08;范圍為1到9&#xff09;所有數字均為唯一的正整數組合中的數字按升序排列 例如&#xff0c;當k3&#xff0c;n9時&#…

Java面試實戰:從Spring到大數據的全棧挑戰

Java面試實戰&#xff1a;從Spring到大數據的全棧挑戰 在某家知名互聯網大廠&#xff0c;嚴肅的面試官正在面試一位名叫謝飛機的程序員。謝飛機以其搞笑的回答和對Java技術棧的獨特見解而聞名。 第一輪&#xff1a;Spring與微服務的探索 面試官&#xff1a;“請你談談Spring…

基于vue框架的動物園飼養管理系統a7s60(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能&#xff1a;飼養員,健康登記,工作進度,動物信息,進食信息,動物健康,動物醫治,飼料信息,工作留言 開題報告內容 基于Vue框架的動物園飼養管理系統開題報告 一、研究背景與意義 &#xff08;一&#xff09;研究背景 隨著城市化進程加快和公眾對生…

docker鏡像與dockerfile

一、docker鏡像 1.什么是鏡像 容器解決應用開發、測試和部署的問題&#xff0c;而鏡像解決應用部署環境問題。鏡像是一個只讀的容器模板&#xff0c; 打包了應用程序和應用程序所依賴的文件系統以及啟動容器的配置文件&#xff0c;是啟動容器的基礎。鏡像所打 包的文件內容就是…

流媒體基礎解析:音視頻封裝格式與傳輸協議

在視頻處理與傳輸的完整流程中&#xff0c;音視頻封裝格式和傳輸協議扮演著至關重要的角色。它們不僅決定了視頻文件的存儲方式&#xff0c;還影響著視頻在網絡上的傳輸效率和播放體驗。今天&#xff0c;我們將深入探討音視頻封裝格式和傳輸協議的相關知識。 音視頻封裝格式 什…

普中STM32F103ZET6開發攻略(一)

各位看官老爺們&#xff0c;點擊關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 目錄 普中STM32F103ZET6開發攻略 1. GPIO端口實驗——點亮LED燈 1.1 實驗目的 1.2 實驗原理 1.3 實驗環境和器材…

AWS API Gateway 配置WAF(中國區)

問題 需要給AWS API Gateway配置WAF。 AWS WAF設置 打開AWS WAF首頁&#xff0c;開始創建和配置WAF&#xff0c;如下圖&#xff1a; 設置web acl名稱&#xff0c;然后開始添加aws相關資源&#xff0c;如下圖&#xff1a; 選擇資源類型&#xff0c;但是&#xff0c;我這里出…

測試分類詳解

測試分類 一、按測試對象分類 1. 界面測試 1.1 測試內容介紹 界面測試驗證用戶界面(UI)的視覺呈現和交互邏輯&#xff0c;確保符合設計規范并提供良好的用戶體驗。測試內容包括&#xff1a; 頁面布局和元素對齊字體、顏色和圖標一致性交互反饋&#xff08;懸停、點擊狀態&a…

打開NRODIC SDK編譯不過怎么處理,keil與segger studio

打開NRODIC SDK編譯不過怎么處理,以下是keil處理. 1,如圖,不要安裝安裝也不會過 2. 不要安裝點擊否 3.點擊確定后進來這個樣子 4.這里選擇這個勾,OK后就不會再有后面的pack_license 5.去掉勾后這里要選擇自己SDK對應的pack版本,我的是8.27.0 6.OK后彈出個界面也要反復選擇…

HarmonyOS ArkUI-X開發中的常見問題及解決方案

一、跨平臺編譯與適配問題 1. 平臺特定API不兼容 ?問題現象?&#xff1a;使用Router模塊的replaceUrl或startAbility等鴻蒙專屬API時&#xff0c;編譯跨平臺工程報錯cant support crossplatform application。 ?解決方案?&#xff1a; 改用ohos.router的跨平臺封裝API&a…