【leetcode面試經典150題】-27. 移除元素

88.合并兩個有序數組

  • 1 題目介紹
  • 1 個人解題思路
    • 1.1 解題代碼
    • 1.2 思路解析
  • 2、分析官方題解
    • 2.1 單側雙指針
    • 2.2 雙側雙指針


1 題目介紹

在這里插入圖片描述

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

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

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

1 個人解題思路

1.1 解題代碼

class Solution {public int removeElement(int[] nums, int val) {int not_val_nums=0;if(nums.length==0){return nums.length;}for(int i=0;i<nums.length;i++){if(nums[i]!=val){not_val_nums++;}}int length=0;int def_length=nums.length;while(length<def_length){if(nums[length]==val){for(int j=length;j<nums.length-1;j++){nums[j]=nums[j+1];}def_length--;}else{length++;if(length==not_val_nums){break;}}}return length;}
}

1.2 思路解析

  • 首先遍歷一遍,統計不等于val的數的個數not_val_nums
  • 然后開始遍歷,如果等于val,那么就把每個之后的數付給前面的數。然后因為覆蓋了一個數,也就是移除了一個數,那么實際上數組的長度是減一的。
  • 如果不等于val,那就往后走。直到走到等于最開始統計的數not_val_nums退出
    在這里插入圖片描述

2、分析官方題解

2.1 單側雙指針

class Solution {public int removeElement(int[] nums, int val) {int n = nums.length;int left = 0;for (int right = 0; right < n; right++) {if (nums[right] != val) {nums[left] = nums[right];left++;}}return left;}
}

指針都在同一側,如果右指針負責遍歷,左指針交換,如果右指針等于val,就跳過,如果不等于val,那就把右指針的數移到左指針,然后左指針++,等待下一次交換。
挺巧妙地,我本來也想寫成這個的,奈何腦子沒轉過來。

2.2 雙側雙指針

class Solution {public int removeElement(int[] nums, int val) {int left = 0;int right = nums.length;while (left < right) {if (nums[left] == val) {nums[left] = nums[right - 1];right--;} else {left++;}}return left;}
}

這個我一看名字我就知道怎么解了,左右各一個指針,如果左指針等于val,那就把右指針的數付給左指針,右指針向左移動,否則左指針向右移動。
這個太巧妙了,我怎么就沒想到

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

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

相關文章

Echarts結課之小楊總結版

Echarts結課之小楊總結版 前言基礎回顧框架sale框架代碼&#xff1a; user框架基礎代碼&#xff1a; inventory框架基礎代碼&#xff1a; total框架基礎代碼&#xff1a; 基礎設置1.標題(Title)2.圖例(Legend)實現 3.工具提示(Tooltip)實現 4.X軸(X Axis) 和 Y軸(Y Axis)5.數據…

「Qt Widget中文示例指南」如何實現一個快捷編輯器(二)

Qt 是目前最先進、最完整的跨平臺C開發工具。它不僅完全實現了一次編寫&#xff0c;所有平臺無差別運行&#xff0c;更提供了幾乎所有開發過程中需要用到的工具。如今&#xff0c;Qt已被運用于超過70個行業、數千家企業&#xff0c;支持數百萬設備及應用。 快捷編輯器示例展示…

Leetcode 第 129 場雙周賽題解

Leetcode 第 129 場雙周賽題解 Leetcode 第 129 場雙周賽題解題目1&#xff1a;3127. 構造相同顏色的正方形思路代碼復雜度分析 題目2&#xff1a;3128. 直角三角形思路代碼復雜度分析 題目3&#xff1a;3129. 找出所有穩定的二進制數組 I思路代碼復雜度分析 題目4&#xff1a;…

電子郵箱是什么?怎么申請一個電子郵箱?

電子郵箱是我們溝通的工具&#xff0c;細分為免費版電子郵箱和付費版電子郵箱。怎么申請一個屬于自己的電子郵箱&#xff1f;今天小編就分享一下電子郵箱注冊教程&#xff0c;手把手教您注冊一個電子郵箱。 一、電子郵箱的定義 電子郵箱&#xff0c;簡稱郵箱&#xff0c;是一…

BGP路由優選

1.BGP路由優選規則 上述規則依序排列&#xff0c;BGP進行路由優選時&#xff0c;從第一條規則開始執行&#xff0c;如果根據第一條規則無法作出判斷&#xff0c;例如路由的Preferred-Value屬性值相同&#xff0c;則繼續執行下一條規則&#xff0c;如果根據當前的規則&#xff0…

如何快速打開多個網頁?

在平常的工作當中&#xff0c; 如果每天都需固定打開幾個網站&#xff0c;可以通過創建一個批處理&#xff0c;一鍵打開需要的所有網站。 使用方法&#xff1a; 在桌面新建一個txt文本&#xff0c;按照以下格式輸入代碼&#xff0c;并將需要打開網站的地址輸入進去。 ? ec…

JavaScript異步編程——11-異常處理方案【萬字長文,感謝支持】

異常處理方案 在JS開發中&#xff0c;處理異常包括兩步&#xff1a;先拋出異常&#xff0c;然后捕獲異常。 為什么要做異常處理 異常處理非常重要&#xff0c;至少有以下幾個原因&#xff1a; 防止程序報錯甚至停止運行&#xff1a;當代碼執行過程中發生錯誤或異常時&#x…

虛擬化技術 在vCenter Server創建數中心、添加主機

一、實驗內容 1.安裝Flash 2.在vCenter Server創建數中心、添加主機 二、實驗主要儀器設備及器材 1.安裝有64位Windows操作系統的臺式電腦或筆記本電腦&#xff0c;建議4C8G或以上配置 2.在Windows Server 2008 R2已安裝vCenter Server 3.Adobe Flash Player 12.0.0.70.e…

算法-卡爾曼濾波之卡爾曼濾波的第一個方程:狀態更新方程

通過一個例子來引出卡爾曼濾波的狀態更新方程&#xff1b; 這里系統狀態是金條的重量&#xff1b; 為了估計系統的狀態&#xff0c;我們可以多次測量金條的重量&#xff0c;然后求平均值&#xff1b; 其中估計值是所有測量值的平均值&#xff1b; 由于我們使用的是靜態模型&am…

第十六節:圖 (20節)

一 圖的概念 1&#xff09;由點的集合和邊的集合構成 2&#xff09;雖然存在有向圖和無向圖的概念&#xff0c;但實際上都可以用有向圖來表達 3&#xff09;邊上可能帶有權值 二 圖結構的表達 1&#xff09;鄰接表法 2&#xff09;鄰接矩陣法 3&#xff09;除此之外還有其他眾多…

Halcon與深度學習框架結合進行圖像分析

Halcon 是一款強大的機器視覺軟件&#xff0c;而深度學習框架如 TensorFlow 或 PyTorch 在圖像識別和分類任務中表現出色。結合兩者的優勢&#xff0c;可以實現復雜的圖像分析任務。Halcon 負責圖像預處理和特征提取&#xff0c;而深度學習框架則利用這些特征進行高級分析和識別…

【完整過程】Windows下記錄PadleOCR訓練自己的ocr模型

一、前期準備 1、代碼 參考的博主使用的是2.6版本的 博主的paddleocr代碼 下面這個是官方的&#xff0c;可能已經更新了&#xff08;我用的是官網當前最新版&#xff09; paddleocr的源代碼 注意&#xff1a;最好把上面兩個代碼都下載下來&#xff0c;后面都會用到 參考博…

先有JVM還是先有垃圾回收器?

是先有垃圾回收器再有JVM呢&#xff0c;還是先有JVM再有垃圾回收器呢&#xff1f;或者是先有垃圾回收再有JVM呢&#xff1f;歷史上還真是垃圾回收更早面世&#xff0c;垃圾回收最早起源于1960年誕生的LISP語言&#xff0c;Java只是支持垃圾回收的其中一種。下面我們就來刨析刨析…

免費思維13招之十一:利潤型思維

免費思維13招之十一:利潤型思維 免費思維的另一大戰略思維——利潤型思維。 什么是利潤型思維呢?就是用后期的利潤來支付現在的成本。也就是“花未來的錢,辦現在的事”。 我們在銷售自己的產品時候,最容易犯的一個件事,就是降價,我們先來看一個案例: 前幾年,有一個賣…

React獲取form表單值的N種方式

Ref模式&#xff08;非受控模式&#xff09; 非鉤子模式 1.createRef()方式 js: userNameElcreateRef() <input type"text" name"userName" ref{this.userNameEl} /> 獲取值的方式&#xff1a; this.userNameEl.current.value2.refs(廢棄) js: con…

自動化圖像識別:提高效率和準確性的新途徑

自動化圖像識別是人工智能領域中的一項關鍵技術&#xff0c;它通過算法自動解析圖像內容&#xff0c;為各種應用提供準確的信息。隨著技術的不斷發展&#xff0c;自動化圖像識別在提高效率和準確性方面展現出新的途徑。 一、深度學習技術的應用 深度學習是自動化圖像識別領域…

3dmax材質庫導入方法?3dmax云渲染速度體驗

3ds Max 材質庫包含多種素材&#xff0c;如金屬、木材、布料和石材等&#xff0c;但用戶在導入材質時常遇到問題。本文將介紹如何在3ds Max中成功導入材質&#xff0c;并探討使用云渲染服務來加速渲染過程&#xff0c;提高項目效率。 一、3dmax材質庫導入教程 自建材質導入方法…

【js】獲取媒體流實現拍照功能,攝像頭切換

<script setup>import {onMounted,reactive,ref} from vueconst videoConstraints reactive({width: 500,height: 300});let picArr reactive([])let videoNode ref(null)let show ref(true)let stream reactive({})onMounted(async () > {// 獲取視頻流&#xf…

RuoYi-Vue-Plus (Logback 和 logback-plus.xml 、p6spy)

項目后本地日志 一、logback依賴 打開最外層的 pom.xml,查看 SpringBoot的依賴配置。 <dependencyManagement><dependencies><!-- SpringBoot的依賴配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>s…

position:fixed無法固定到父盒子上面的解決方案

目錄 問題如圖所示&#xff1a; 下面是錯誤的代碼&#xff1a; 解決方案1&#xff1a; 使用fixed固定定位固定到父元素&#xff1a; 解決方案2&#xff1a; 推薦使用的其他方案&#xff08;粘性定位&#xff09;&#xff1a; 什么是粘性定位&#xff1a; 粘性定位的使用…