代碼隨想錄 算法訓練 Day1:數組

題目一:

給定一個?n?個元素有序的(升序)整型數組?nums 和一個目標值?target ?,寫一個函數搜索?nums?中的 target,如果目標值存在返回下標,否則返回 -1。

示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9     
輸出: 4       
解釋: 9 出現在 nums 中并且下標為 4     

示例?2:

輸入: nums = [-1,0,3,5,9,12], target = 2     
輸出: -1        
解釋: 2 不存在 nums 中因此返回 -1        

提示:

  • 你可以假設 nums?中的所有元素是不重復的。
  • n?將在?[1, 10000]之間。
  • nums?的每個元素都將在?[-9999, 9999]之間。

題目二:

給你一個數組 nums?和一個值 val,你需要 原地 移除所有數值等于?val?的元素,并返回移除后數組的新長度。

不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并原地修改輸入數組。

元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。

示例 1: 給定 nums = [3,2,2,3], val = 3, 函數應該返回新的長度 2, 并且 nums 中的前兩個元素均為 2。 你不需要考慮數組中超出新長度后面的元素。

示例?2: 給定 nums = [0,1,2,2,3,0,4,2], val = 2, 函數應該返回新的長度 5, 并且 nums 中的前五個元素為 0, 1, 3, 0, 4。

你不需要考慮數組中超出新長度后面的元素。

答案:

/*** 數組算法實現類* 包含二分查找和移除元素的不同實現方法*/
public class Array {/*** 二分查找方法一:左閉右閉區間實現 [left, right]* * @param nums 有序數組* @param target 目標值* @return 目標值在數組中的索引,如果不存在則返回-1*/public static int BinarySearch1(int[] nums, int target) {// 左閉右閉二分法 [left, right]int length = nums.length;int left = 0;                  // 查找區間左邊界int right = length - 1;        // 查找區間右邊界// 當left <= right時,區間[left, right]有效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 -1;  // 未找到目標值}/*** 二分查找方法二:左閉右開區間實現 [left, right)* * @param nums 有序數組* @param target 目標值* @return 目標值在數組中的索引,如果不存在則返回-1*/public static int BinarySearch2(int[] nums, int target) {// 左閉右開二分法 [left, right)int length = nums.length;int left = 0;              // 查找區間左邊界int right = length;        // 查找區間右邊界(注意這里是length而非length-1)// 當left < right時,區間[left, right)有效while (left < right) {int mid = (left + right) / 2;  // 計算中間位置if (nums[mid] == target) {return mid;                 // 找到目標值,返回索引}if (nums[mid] < target) {left = mid + 1;            // 目標在右半部分,縮小左邊界} else {right = mid;               // 目標在左半部分,縮小右邊界(注意這里是mid而非mid-1)}   }return -1;  // 未找到目標值}/*** 移除元素方法一:暴力解法* 時間復雜度:O(n2),空間復雜度:O(1)* * @param nums 數組* @param target 要移除的目標值* @return 移除元素后數組的新長度*/public static int RemoveElement1(int[] nums, int target) {// 暴力解法:遍歷數組,發現目標元素后,將后面的所有元素前移一位int length = nums.length;for (int i = 0; i < length; i++) {// 找到目標元素if (nums[i] == target) {// 將后面的元素都前移一位for (int j = i; j < length - 1; j++) {nums[j] = nums[j + 1];}i--;        // 下標回退,因為當前位置的元素已被后面的元素替換,需要重新檢查length--;   // 數組有效長度減1}}return length;  // 返回新數組的長度}/*** 移除元素方法二:雙指針法* 時間復雜度:O(n),空間復雜度:O(1)* * @param nums 數組* @param target 要移除的目標值* @return 移除元素后數組的新長度*/public static int RemoveElement2(int[] nums, int target) {// 雙指針法:快指針遍歷數組,慢指針指向新數組的當前位置int length = nums.length;int slow = 0;    // 慢指針,指向新數組下一個要填充的位置// 快指針遍歷整個數組for (int fast = 0; fast < length; fast++) {// 當前元素不是目標值時,將其放入slow位置if (nums[fast] != target) {nums[slow] = nums[fast];slow++;   // 慢指針前進}// 當前元素是目標值時,快指針前進,慢指針不動,相當于跳過了這個元素}return slow;  // 返回新數組的長度}/*** 主方法,用于測試*/public static void main(String[] args) {// 測試二分查找int[] num1 = {-1, 0, 3, 5, 9, 12};int target1 = 6;int ans = BinarySearch2(num1, target1);System.out.println("二分查找結果索引: " + ans);// 測試移除元素int[] num2 = {0, 1, 2, 2, 3, 0, 4, 2};int target2 = 2;int ans2 = RemoveElement2(num2, target2);System.out.println("移除元素后的數組長度: " + ans2);// 打印移除元素后的數組內容System.out.print("移除元素后的數組: ");for (int i = 0; i < ans2; i++) {System.out.print(num2[i] + " ");}}
}

感悟:

工作好幾年了,來學學算法進修一下。

當年找工作就沒好好看算法,也這么逃過來了,現在一看算法就害怕。

這幾題主要靠ai輔助寫出來的(汗顏),第一遍刷先降低要求,能自己敲一遍正確算法,能理解算法即可。

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

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

相關文章

容器技術 20 年:顛覆、重構與重塑軟件世界的力量

目錄 容器技術發展史 虛擬化技術向容器技術轉變 Docker的橫空出世 容器編排技術與Kubernetes 微服務的出現與Istio 工業標準的容器運行時 容器技術與 DevOps 的深度融合? 無服務架構推波助瀾 展望未來發展方向 從 20 世紀硬件虛擬化的笨重&#xff0c;到操作系統虛擬…

集成釘釘消息推送功能

1. 概述 本文檔詳細描述了在若依框架基礎上集成釘釘消息推送功能的開發步驟。該功能允許系統向指定釘釘用戶發送文本和富文本消息通知。 2. 環境準備 2.1 釘釘開發者賬號配置 登錄釘釘開發者平臺&#xff1a;https://open.dingtalk.com/創建/選擇企業內部應用獲取以下關鍵信…

【行為型之訪問者模式】游戲開發實戰——Unity靈活數據操作與跨系統交互的架構秘訣

文章目錄 &#x1f9f3; 訪問者模式&#xff08;Visitor Pattern&#xff09;深度解析一、模式本質與核心價值二、經典UML結構三、Unity實戰代碼&#xff08;游戲物品系統&#xff09;1. 定義元素與訪問者接口2. 實現具體元素類3. 實現具體訪問者4. 對象結構管理5. 客戶端使用 …

SQL:MySQL函數:日期函數(Date Functions)

目錄 時間是數據的一種類型 &#x1f9f0; MySQL 常用時間函數大全 &#x1f7e6; 1. 獲取當前時間/日期 &#x1f7e6; 2. 日期運算&#xff08;加減&#xff09; &#x1f7e6; 3. 時間差計算 &#x1f7e6; 4. 格式化日期 &#x1f7e6; 5. 提取時間部分 &#x1f7…

【MySQL】數據表更新數據

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;MySQL 文章目錄 1. 數據更新基礎1.1 更新操作的重要性1.2 更新語句基本結構1.3 更新操作注意事項 2. 基本更新操作2.1 基本UPDATE語法2.2 使用表達式更新數據2.3 使用LIMIT限制更新行數2.4 NULL值處理 3. 高級更新技術3.1 使用子…

【更新】全國省市縣-公開手機基站數據集(2006-2025.3)

手機基站是現代通信網絡中的重要組成部分&#xff0c;它們為廣泛的通信服務提供基礎設施。隨著數字化進程的不斷推進&#xff0c;手機基站的建設與布局對優化網絡質量和提升通信服務水平起著至關重要的作用&#xff0c;本分享數據可幫助分析移動通信網絡的發展和優化。本次數據…

藍橋杯12屆國B 純質數

題目描述 如果一個正整數只有 1 和它本身兩個約數&#xff0c;則稱為一個質數&#xff08;又稱素數&#xff09;。 前幾個質數是&#xff1a;2,3,5,7,11,13,17,19,23,29,31,37,??? 。 如果一個質數的所有十進制數位都是質數&#xff0c;我們稱它為純質數。例如&#xff1…

騰訊多模態定制化視頻生成框架:HunyuanCustom

HunyuanCustom 速讀 一、引言 HunyuanCustom 是由騰訊團隊提出的一款多模態定制化視頻生成框架。該框架旨在解決現有視頻生成方法在身份一致性(identity consistency)和輸入模態有限性方面的不足。通過支持圖像、音頻、視頻和文本等多種條件輸入&#xff0c;HunyuanCustom 能…

力扣top100 矩陣置零

開辟數組來標記元素為0的行和列&#xff0c;然后將對應的行和列的元素全部置為0&#xff1b; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int n matrix.size();int m matrix[0].size();vector<int> l(m),r(n);for(int i …

Python知識框架

一、Python基礎語法 變量與數據類型 變量命名規則 基本類型&#xff1a;int, float, str, bool, None 復合類型&#xff1a;list, tuple, dict, set 類型轉換與檢查&#xff08;type(), isinstance()&#xff09; 運算符 算術運算符&#xff1a;, -, *, /, //, %, ** 比較…

華為OD機試真題——單詞接龍(首字母接龍)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

微信小程序智能商城系統(uniapp+Springboot后端+vue管理端)

一、系統介紹 本智能商城系統是基于當今主流技術棧開發的一款多端商城解決方案&#xff0c;主要包括微信小程序前端、SpringBoot 后端服務以及 Vue 管理后臺三大部分。系統融合了線上商城的核心功能&#xff0c;支持商品瀏覽、下單、支付、訂單管理等操作&#xff0c;適用于中小…

Python筆記:c++內嵌python,c++主窗口如何傳遞給腳本中的QDialog,使用的是pybind11

1. 問題描述 用的是python 3.8.20, qt版本使用的是5.15.2, PySide的版本是5.15.2, pybind11的版本為2.13.6 網上說在python腳本中直接用PySide2自帶的QWinWidget&#xff0c;如from PySide2.QtWinExtras import QWinWidget&#xff0c;但我用的版本中說沒有QWinWidget&#x…

軟考軟件設計師中級——軟件工程筆記

1.軟件過程 1.1能力成熟度模型&#xff08;CMM&#xff09; 軟件能力成熟度模型&#xff08;CMM&#xff09;將軟件過程改進分為以下五個成熟度級別&#xff0c;每個級別都定義了特定的過程特征和目標&#xff1a; 初始級 (Initial)&#xff1a; 軟件開發過程雜亂無章&#xf…

C# SQLite基本使用示例

目錄 1 基本使用流程 1.1 步驟1&#xff1a;添加SQLite依賴 1.2 ?步驟2&#xff1a;建立連接 1.3 步驟3&#xff1a;執行SQL命令 1.4 步驟4&#xff1a;查詢數據 1.5 步驟5&#xff1a;使用事務 2 SQLite基本使用示例 2.1 準備工作 2.2 完整示例 2.3 案例代碼解析 …

視頻圖像壓縮領域中 DCT 的 DC 系數和 AC 系數詳解

引言 在數字圖像與視頻壓縮領域&#xff0c;離散余弦變換&#xff08;Discrete Cosine Transform, DCT&#xff09;憑借其卓越的能量集中特性&#xff0c;成為JPEG、MPEG等國際標準的核心技術。DCT通過將空域信號映射到頻域&#xff0c;分離出DC系數&#xff08;直流分量&…

對抗系統熵增:從被動救火到主動防御的穩定性實戰

&#x1f4d5;我是廖志偉&#xff0c;一名Java開發工程師、《Java項目實戰——深入理解大型互聯網企業通用技術》&#xff08;基礎篇&#xff09;、&#xff08;進階篇&#xff09;、&#xff08;架構篇&#xff09;清華大學出版社簽約作家、Java領域優質創作者、CSDN博客專家、…

java 中 DTO 和 VO 的核心區別

DTO 和 VO 的核心區別 特性DTO&#xff08;數據傳輸對象&#xff09;VO&#xff08;視圖對象&#xff09;設計目的服務層與外部系統&#xff08;如前端、其他服務&#xff09;之間的數據傳輸為前端展示層定制數據&#xff0c;通常與 UI 強綁定數據內容可能包含業務邏輯需要的字…

數據結構【二叉樹的遍歷實現】

&#x1f4d8;考研數據結構基礎&#xff1a;二叉樹的存儲、遍歷與隊列輔助實現詳 在數據結構的學習中&#xff0c;二叉樹作為一種結構清晰、應用廣泛的樹形結構&#xff0c;是考研計算機專業課中重點內容之一。本文將以實際代碼為基礎&#xff0c;介紹二叉樹的存儲結構、遍歷方…

無人機俯視風光攝影Lr調色預設,手機濾鏡PS+Lightroom預設下載!

調色詳情 無人機俯視風光攝影 Lr 調色是利用 Adobe Lightroom 軟件&#xff0c;對無人機從俯視角度拍攝的風光照片進行后期處理的調色方式。通過調整色彩、對比度、光影等多種參數&#xff0c;能夠充分挖掘并強化畫面獨特視角下的壯美與細節之美&#xff0c;讓原本平凡的航拍風…