初階數據結構(C語言實現)——3順序表和鏈表(2)

2.3 數組相關面試題

  1. 原地移除數組中所有的元素val,要求時間復雜度為O(N),空間復雜度為O(1)。OJ鏈接
    力扣OJ鏈接-移除元素
  2. 刪除排序數組中的重復項。力扣OJ鏈接-刪除有序數組中的重復項
  3. 合并兩個有序數組。力扣OJ鏈接-合并兩個有序數組

2.3.1 移除元素

1. 題目描述

力扣OJ鏈接-移除元素
原地移除數組中所有的元素val,要求時間復雜度為O(N),空間復雜度為O(1)。
給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素。元素的順序可能發生改變。然后返回 nums 中與 val 不同的元素的數量。
假設 nums 中不等于 val 的元素數量為 k,要通過此題,您需要執行以下操作:

  • 更改 nums 數組,使 nums 的前 k 個元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k。

2. 分析

思路1:另外開辟一個數組,src從頭往后遍歷,遇到不是要刪除元素,就把該元素賦值給數組,直到遍歷完整個數組,在最后再把數組賦值到原數組。
在這里插入圖片描述

思路2:不另外開辟數組就在原數組進行操作
src從前往后遍歷,遇到不等于val的數就賦值給dst
然后src++ ,dst++
src遇到val ,不進行賦值,直接src++,dst不變
直到src遍歷完整個數組
在這里插入圖片描述

3. 思路2代碼實現

int removeElement(int* nums, int numsSize, int val) {int src = 0;int dst = 0;while(src<numsSize){if(nums[src]!= val){nums[dst++] = nums[src++];}else{src++;}}return dst;
}

在這里插入圖片描述

2.3.2 刪除重復元素

1. 題目描述

力扣OJ鏈接-刪除有序數組中的重復項
給你一個 非嚴格遞增排列 的數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。

考慮 nums 的唯一元素的數量為 k ,你需要做以下事情確保你的題解可以被通過:

  • 更改數組 nums ,使 nums 的前 k 個元素包含唯一元素,并按照它們最初在 nums 中出現的順序排列。nums 的其余元素與nums 的大小不重要。
  • 返回 k 。

2. 思路

這個和上一道題思路非常類似~重點是要分析,這個判斷相等如何設置。
在這里插入圖片描述

3. 代碼實現

int removeDuplicates(int* nums, int numsSize) {int str = 1;int end  = 0;while(str<numsSize){if(nums[str] != nums [end]){nums[++end] = nums[str++];//這里先++,如果后++,就會覆蓋原本的值}else{str++;}    }return end+1;
}

進階寫法,雖然代碼量更短,但是代碼可讀性差~

int removeDuplicates(int* nums, int numsSize) {int str = 1;int end  = 0;while(str<numsSize){if(nums[str] != nums [end])nums[++end] = nums[str++];//這里end必須先++,如果后++,就會覆蓋原本的值str++;}    return end+1;
}

在這里插入圖片描述

2.3.3 合并兩個有序數組

1.題目描述

力扣OJ鏈接-合并兩個有序數組
給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。

請你 合并 nums2 到 nums1 中,使合并后的數組同樣按 非遞減順序 排列。

注意:最終,合并后數組不應由函數返回,而是存儲在數組 nums1 中。為了應對這種情況,nums1 的初始長度為 m + n,其中前 m 個元素表示應合并的元素,后 n 個元素為 0 ,應忽略。nums2 的長度為 n 。

2. 思路

解題思路:
1. 從后往前遍歷數組,將nums1和nums2中的元素逐個比較
將較大的元素往nums1末尾進行搬移
2. 第一步結束后,nums2中可能會有數據沒有搬移完,將nums2中剩余的元素逐個搬移到nums1
時間復雜度:O(m+n)
空間復雜度: O(1)

兩種情況

情況1:
在這里插入圖片描述

情況2
在這里插入圖片描述

3. 代碼實現

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {// end1、end2:分別標記nums1 和 nums2最后一個有效元素位置// end標記nums1的末尾,因為nums1和nums2中的元素從后往前往nums1中存放// ,否則會存在數據覆蓋int end1 = m-1;int end2 = n-1;int dst  = m+n-1;//合并后的數組長度是m + n,最后一個元素的位置就是 nums[m+n-1]// 從后往前遍歷,將num1或者nums2中較大的元素往num1中end位置搬移// 直到將num1或者num2中有效元素全部搬移完while(end1 >= 0 && end2 >= 0)//有一個小于1 就結束了,循環寫的是繼續,所以是&&{if(nums1[end1]>nums2[end2]){nums1[dst--] = nums1[end1--];}else{nums1[dst--]= nums2[end2--];}}// num2中的元素可能沒有搬移完,將剩余的元素繼續往nums1中搬移while(end2 >= 0){nums1[dst--] = nums2[end2--];}}

在這里插入圖片描述

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

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

相關文章

【力扣】2619. 數組原型對象的最后一個元素——認識原型與原型鏈

【力扣】2619. 數組原型對象的最后一個元素——認識原型與原型鏈 文章目錄 【力扣】2619. 數組原型對象的最后一個元素——認識原型與原型鏈題目解決方案概述全局上下文函數上下文事件處理程序構造函數上下文類上下文顯式 / 隱式綁定綁定方法和永久 this 上下文 方法 1&#xf…

ubuntu終端指令集 shell編程基礎(一)

磁盤指令 連接與查看&#xff1a;磁盤與 Ubuntu 有兩種連接方式&#xff1b;使用ls /dev/sd*查看是否連接成功&#xff0c;通過df系列指令查看磁盤使用信息。若 U 盤已掛載&#xff0c;相關操作可能失敗&#xff0c;需用umount取消掛載。磁盤操作&#xff1a;使用sudo fdisk 磁…

基于Spark的電商供應鏈系統的設計與實現

目錄 1.研究背景與意義 2、國內外研究現狀 3、相關理論與技術 &#xff08;一&#xff09;分布式計算系統Spark &#xff08;二&#xff09;數據倉庫Hive &#xff08;三&#xff09;讀取服務器本地磁盤的日志數據Flume &#xff08;四&#xff09;分布式消息隊列Kafka …

使用TortoiseGit配合BeyondCompare實現在Git倉庫中比對二進制文件

使用TortoiseGit的比對工具可以直接右鍵&#xff0c;點擊選擇比對和上一版本的變化差異&#xff1a; 但是TortoiseGit只能支持比對純文本文件的變化差異&#xff0c;如果嘗試比對二進制文件&#xff0c;會提示這不是一個有效的文本文件&#xff1a; BeyondCompare可以比對二進制…

BladeX框架接口請求跨域

前端使用代理請求接口&#xff0c;接口可以正常訪問。如果換全路徑請求就跨域。 除了后端要配置跨域 還需要修改配置文件對OPTIONS請求的限制

Vue.js響應式基礎

響應式基礎? API 參考 本頁和后面很多頁面中都分別包含了選項式 API 和組合式 API 的示例代碼。現在你選擇的是 組合式 API。你可以使用左側側邊欄頂部的“API 風格偏好”開關在 API 風格之間切換。 聲明響應式狀態? ref()? 在組合式 API 中,推薦使用 ref() 函數來聲明…

選開源CMS建站系統時,插件越多越好嗎?

在選擇開源CMS建站系統時&#xff0c;插件數量并不是唯一的衡量標準&#xff0c;更不能簡單地說“插件越多就越好”&#xff0c;還是需要綜合評估來考慮選擇結果&#xff0c;以下是有關選擇開源CMS系統時對插件數量的考量。 插件數量的優勢插件數量可能帶來的問題功能豐富性&a…

在VSCode中使用MarsCode AI最新版本詳解

如何在VSCode中使用MarsCode AI&#xff1a;最新版本詳解與使用場景 在當今快速發展的軟件開發領域&#xff0c;人工智能&#xff08;AI&#xff09;技術的應用已經變得越來越普遍。ByteDance推出的MarsCode AI是一款強大的AI編程助手&#xff0c;旨在幫助開發者更高效地編寫代…

mac修改docker的daemon.json 鏡像文件

1、找到daemon.json文件的位置 docker info 可以看出位置在&#xff1a; /Users/spuer/.docker 2. 進入daemon.json 所在的目錄&#xff1a; cd /Users/spuer/.docker3. 查看daemon.json的內容&#xff1a; more daemon.json可以看出&#xff0c;沒有配置registry-mirrors&…

5.10 P-Tuning v2:多層級提示編碼的微調革新

P-Tuning v2:多層級提示編碼的微調革新 一、技術架構解析 #mermaid-svg-4Wy6vkXZi67hY9PZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Wy6vkXZi67hY9PZ .error-icon{fill:#552222;}#mermaid-svg-4Wy6vkXZi67h…

Eclipse 編譯項目指南

Eclipse 編譯項目指南 引言 Eclipse 是一款功能強大的集成開發環境&#xff08;IDE&#xff09;&#xff0c;廣泛用于Java、C/C、Python等多種編程語言的開發。在Eclipse中編譯項目是進行軟件開發的基礎步驟。本文將詳細介紹如何在Eclipse中編譯項目&#xff0c;包括項目設置…

【大語言模型】【整合版】DeepSeek 模型提示詞學習筆記(散裝的可以看我之前的學習筆記,這里只是歸納與總結了一下思路,內容和之前發的差不多)

以下是個人筆記的正文內容: 原文在FlowUs知識庫上&#xff0c;如下截圖。里面內容和這里一樣&#xff0c;知識排版好看一點 一、什么是 DeepSeek 1. DeepSeek 簡介 DeepSeek 是一家專注于通用人工智能&#xff08;AGI&#xff09;的中國科技公司&#xff0c;主攻大模型研發與…

【緩存】緩存雪崩與緩存穿透:高并發系統的隱形殺手

緩存雪崩與緩存穿透&#xff1a;高并發系統的隱形殺手 在高并發系統中&#xff0c;緩存是提升性能的重要手段。然而&#xff0c;緩存使用不當也會帶來一系列問題&#xff0c;其中最常見的就是緩存雪崩和緩存穿透。這兩個問題如果不加以解決&#xff0c;可能會導致系統崩潰&…

additional-spring-configuration-metadata.json實現springboot自定義提示

在配置additional-spring-configuration-metadata.json文件后&#xff0c;在開發人員的IDE工具使用個人編寫的配置讀取很有效的在application.properties或application.yml文件下完成提示。 配置元數據文件位于jar下面。 META-INF/spring-configuration-metadata.json它們使用簡…

Dify在Ubuntu20.04系統的部署

文章目錄 一、dify 介紹1.核心功能優勢2.應用場景 二、dify 安裝(docker方式)1.代碼庫下載2.配置文件修改3.啟動docker 容器 三、遇到問題與解決1.使用sudo docker compose up -d報錯2.使用service docker start報錯 一、dify 介紹 Dify 是一款開源的大語言模型&#xff08;LL…

kafka-關于ISR-概述

一. 什么是ISR &#xff1f; Kafka 中通常每個分區都有多個副本&#xff0c;其中一個副本被選舉為 Leader&#xff0c;其他副本為 Follower。ISR 是指與 Leader 副本保持同步的 Follower 副本集合。ISR 機制的核心是確保數據在多個副本之間的一致性和可靠性&#xff0c;同時在 …

1_安裝JDK和Hadoop

一、解壓jdk和hadoop安裝包 下載 通過百度網盤分享的文件&#xff1a;jdk-8u172-linux-x64.tar.gz 鏈接&#xff1a;https://pan.baidu.com/s/1VjhdpfyqdC7ivEBIjTn8tA 提取碼&#xff1a;iz25 二、配置環境變量 vi /root/.bashrc添加 #set java environment export JAVA_H…

.Net 9下使用Tensorflow.net---DNN_Keras

.Net 9下使用Tensorflow.net---DNN_Keras 1、創建應用&#xff0c;導入依賴2、編寫代碼1&#xff09;添加引用2&#xff09;創建基礎對象3&#xff09;初始化數據集4&#xff09;重點步驟&#xff1a;創建 Keras下的DNN模型5&#xff09;訓練模型得到評估值6&#xff09;結果輸…

邊緣計算收益低的三大指標

邊緣計算收益低的三大指標主要包括以下方面&#xff1a; 1. 資源貢獻不足&#xff1a; 邊緣計算的收益通常基于所提供的帶寬、存儲和計算資源來計算。如果設備的網絡帶寬有限、在線時間短或提供的存儲容量較小&#xff0c;可能無法滿足平臺設定的最低貢獻標準&#xff0c;從而導…

重大更新!鋰電池剩余壽命預測新增 CALCE 數據集

往期精彩內容&#xff1a; 單步預測-風速預測模型代碼全家桶-CSDN博客 半天入門&#xff01;鋰電池剩余壽命預測&#xff08;Python&#xff09;-CSDN博客 超強預測模型&#xff1a;二次分解-組合預測-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;BiLSTM-Attention預測模型…