數據結構之順序表相關算法題

目錄

  • 一、移除元素
  • 二、刪除有序數組中的重復項
  • 三、合并兩個有序數組
  • 總結


一、移除元素

移除元素 - 力扣
在這里插入圖片描述
在這里插入圖片描述
思路一:就是創建一個臨時數組,對原數組進行遍歷,找出與val不同的數據放到新數組里,然后再將tmp中的數據導回原數組
在這里插入圖片描述
這個思路的復雜度很好猜,空間復雜度為O(N),時間復雜度為O(N)
但是
在這里插入圖片描述

int tmp[numsSize];

這里是變長數組,某些編譯器上是不支持變成數組的,比如說msvc,這里使用動態內存開辟空間更好
在這里插入圖片描述

而且該題目說要原地移除,這種方法是使用了一個臨時數組,也是不太符合題目的


思路二:雙指針法,創建兩個變量 dst,src
src在前面探路(找非val值)
dst在后面站崗(保存非val值)

  1. 如果src指向的數據是val,src++
  2. 如果src指向的數據不是val,賦值(src指向的值給dst),src和dst都++

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
結果只保證前dst個數據為2,剩下的不管
在這里插入圖片描述


二、刪除有序數組中的重復項

刪除有序數組中的重復項 - 力扣
在這里插入圖片描述
在這里插入圖片描述
思路1:創建新數組,遍歷原數組,將不重復數據導入新數組中,再將新數組中的數據導入到原數組中
在這里插入圖片描述
因為涉及不重復數據的導入,所以要定義兩個變量來遍歷,初始化i=j,第一個數據直接拿,接下來j++,此時i==j,i和j整體++,接下來i和j不相等,不相等把j向新數組中放,之后i與j再++
在這里插入圖片描述
此時j越界,將新數組數據導入原數組中
在這里插入圖片描述
前兩個數據是唯一的數據,滿足題目要求
該思路的唯一一個小問題也是沒有在原數組的基礎上進行操作,且很好猜時間和空間復雜度為O(n)

于是就有了思路2:
依舊是使用雙指針法:創建兩個變量,分別指向數組起始和下一個位置

  1. 如果src的值和dst的值相等,src++
  2. 如果src的值和dst的值不相等,dst++,賦值,src++

在這里插入圖片描述
最后src越界,當前數組里的值2,3,3,3,前兩個數據是2,3,滿足題意
在這里插入圖片描述
dst指向下標為1的數據,此時返回dst+1
在這里插入圖片描述
示例二按該思路推導結果如下,也是滿足的,前5個數據是唯一的數據

代碼如圖

在這里插入圖片描述
優化1
在這里插入圖片描述
如圖剛開始src!=dst,dst++再src給dst賦值,此時的賦值就非常多余
所以有了如下代碼:
在這里插入圖片描述
由于兩個if嵌套是且的關系,所以還可以優化
在這里插入圖片描述


三、合并兩個有序數組

合并兩個有序數組 - 力扣
在這里插入圖片描述
在這里插入圖片描述
思路1:
先合并數組,再對nums1進行排序,可以使用冒泡排序,不過時間復雜度較高,為O(N2

思路2:類似于尾插操作,從后往前遍歷數組,找大(誰大誰先往后放)
這里定義l1,l3為nums1的下標,l1放到有效數據的最后一個位置。l3指向m+n-1這個位置,是用來存放數據的位置,l2為nums2的下標,指向n-1的位置
在這里插入圖片描述
首先l1與l2比較,因為6大,所以6存放到l3的位置,之后l2,l3減減
在這里插入圖片描述
此時l1與l2比較,l2大,5放到l3位置,放完之后l2,l3再減減
在這里插入圖片描述
同樣推理操作后,l1大,l1,l3減減
在這里插入圖片描述
此時l1,l2均為2,假設l2的數字大,將2放到l3的位置
在這里插入圖片描述
此時l2,l3再減減,此時l2越界,nums1已有序,且nums2先越界,也有相反的情況
在這里插入圖片描述
同樣的思路,l1與l2相比,6放l3的位置,此時l1與l3減減
在這里插入圖片描述
l1與l2再比較,5大放l3,l1與l3減減
在這里插入圖片描述
同樣思路,如圖步驟之后l2,l3減減
在這里插入圖片描述
此時假設l1大,放到l3的位置
在這里插入圖片描述
之后l1,l3減減,此時l1已經越界,跳出循環,此時nums2中還有兩個數據沒有放到第一個數組中,此時只需將剩下兩個數據循環放到nums1中即可
在這里插入圖片描述
此時也是有序的

代碼如下:
在這里插入圖片描述


總結

以上就是數據結構順序表相關算法題的內容了,這些算法題的代碼普遍很簡答,主要就是在思考上。喜歡的靚仔靚女們不要忘記一鍵三連給予支持哦~

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

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

相關文章

百勝軟件×華為云聯合賦能,“超級國民品牌”海瀾之家新零售加速前行

報道顯示,早在2012年海瀾之家就開始布局數字化征程,并于近年對公司全流程信息化進行綜合重構升級優化,在采銷協同、業財一體等方面突破原有架構,通過信息化架構的增強為業務發展提供支撐。作為新零售重要組成部分的海瀾電商信息化…

“Zen 5”: The AMD High-Performance 4nm x86-64 Microprocessor Core

Codenamed “Zen 5,” AMD’s next-generation, energy-efficient high-performance x86 core targets a wide array of client, server, and embedded markets. Fabricated in TSMC’s 4nm FinFET process, the 55mm2 core complex (CCX), shown in Fig. 2.1.1., contains 8.6…

Linux數據庫:【表的約束】【表的基本查詢】

目錄 一.表的約束 1.1空屬性 not null 1.2默認值 default ?空屬性和默認值一起使用? 1.3列描述 comment 1.4 zerofill 1.5 主鍵 1.6 自增長 1.7 唯一鍵 1.8 外鍵 二. 表的基本查詢 2.1 Create 2.1.1單行數據 全列插入 2.1.2多行數據 指定列插入 2…

AJAX RSS Reader

AJAX RSS Reader 引言 隨著互聯網的快速發展,信息量的爆炸式增長,用戶對信息獲取的便捷性和實時性提出了更高的要求。RSS(Really Simple Syndication)作為一種信息聚合技術,已經廣泛應用于新聞、博客、論壇等網絡平臺。AJAX(Asynchronous JavaScript and XML)技術則提…

從實驗室到落地:飛算JavaAI水位監測系統的工程化實踐

一、飛算JavaAI平臺簡介飛算JavaAI是國內領先的軟件開發智能平臺,通過AI技術賦能軟件開發全流程,幫助開發者實現"一人一項目,十人抵百人"的高效開發模式。平臺核心優勢包括: 智能代碼生成:基于自然語言描述自…

前端Vite介紹(現代化前端構建工具,由尤雨溪開發,旨在顯著提升開發體驗和構建效率)ES模塊(ESM)、與傳統Webpack對比、Rollup打包

文章目錄**1. 核心特性**- **極速啟動**:- **按需編譯與熱模塊替換(HMR)**:- **開箱即用**:- **生產環境優化**:- **插件系統**:**2. 工作原理****開發模式**- **基于 ESM 的按需加載**&#xf…

python sqlite3模塊

十分想念順店雜可。。。Python 的sqlite3模塊是標準庫中用于操作SQLite 數據庫的工具。SQLite 是一款輕量級嵌入式數據庫(無需獨立服務器,數據存儲在單一文件中),適合小型應用、本地數據存儲或原型開發。sqlite3模塊提供了完整的 …

用 Python 繪制企業年度財務可視化報告 —— 從 Excel 到 9 種圖表全覆蓋

用 Python 繪制企業年度財務可視化報告 —— 從 Excel 到 9 種圖表全覆蓋在企業經營分析中,光看一堆財務數字很難直觀發現規律和問題。 如果能將這些數據轉化為可視化圖表,不僅更美觀,還能幫助管理層快速做出決策。今天,我就用 Py…

一次 Unity ? Android 基于 RSA?OAEP 的互通踩坑記

這篇分享,記錄我如何從“Base64 報錯/平臺不支持/解密失敗”一路定位到“填充算法不一致”的根因,并給出兩條穩定落地方案。同時整理了調試手冊、代碼片段和上線前自檢清單,方便你復用。 背景 Unity 端用公鑰加密一段緊湊 JSON(i…

Go語言GC機制:高效并發回收解析

Go 語言的垃圾回收(Garbage Collection,簡稱 GC)是其自動內存管理的核心機制,旨在自動識別并回收不再被使用的內存,避免內存泄漏,減輕開發者的手動內存管理負擔。Go 的 GC 算法經歷了多次迭代優化&#xff…

imx6ull-驅動開發篇23——Linux 內核定時器實驗

目錄 實驗程序編寫 修改設備樹文件 定時器驅動程序 timer.c 測試 timerApp.c Makefile 文件 運行測試 實驗程序編寫 本講實驗,我們使用正點原子I.MX6U-ALPHA 開發板,通過linux內核定時器周期性的點亮和熄滅開發板上的 LED 燈, LED 燈…

IPTV系統:開啟視聽與管理的全新篇章

在當今數字化飛速發展的時代,IPTV系統正以前所未有的姿態,重塑著我們的視聽體驗與管理模式。它不僅僅是一套技術系統,更是連接信息、溝通情感、提升效率的橋梁,為各個領域帶來了全新的變革與發展機遇。從電視直播的角度來看&#…

PyTorch筆記9----------Cifar10圖像分類

1.圖像分類網絡模型框架解讀 分類網絡的基本結構 數據加載模塊:對訓練數據加載數據重組:組合成網絡需要的形式,例如預處理、增強、各種網絡處理、loss函數計算優化器 數據加載模塊 使用公開數據集:torchvision.datasets使用自定義…

飛凌OK3568開發板QT應用程序編譯流程

飛凌OK3568開發板QT應用程序編譯流程開發環境:ubuntu20.04(主機)、飛凌OK3568開發板一般在linux系統下開發用于ARM開發板的QT應用程序時,直接在主機上開發然后進行交叉編譯即可,但有時候ARM開發板的廠家提供的SDK中可能…

飛算JavaAI合并項目實戰:7天完成3年遺留系統重構

引言 企業數字化進程中,遺留系統改造始終是CIO面臨的頭號難題。某電商平臺的實踐數據顯示:3年以上的Java項目平均存在47%的冗余代碼,63%的架構設計不符合當前業務需求,進行系統性重構需要投入相當于原開發量200%的資源。傳統&quo…

衛星速度增量和比沖及推力之間的關系

一、定義1.1.比沖(Isp):比沖是衡量發動機性能的重要指標,反映了單位重量推進劑在發動機中產生的沖量,單位為米/秒(m/s),代表燃料燃燒時噴流速度。這個單位與速度單位“米/秒”相同&a…

MATLAB繪制各種心形曲線

1.方程(1)心形線的經典隱函數方程為:(2)參數方程(更平滑的心形):(3)極坐標心形線(4)參數方程(3D心形)(5)隱函數3D心形2. MATLAB代碼clc;close all;clear all;warning off;%清除變量 rand(seed, 100); randn…

Django REST Framework視圖

Django REST Framework (DRF) 視圖類詳解DRF 提供了豐富的視圖類來構建 API,從基礎到高級,滿足不同復雜度的需求。以下是 DRF 的主要視圖類及其使用場景:1. 基礎視圖類APIView所有 DRF 視圖的基類,相當于 Django 的 View 類的增強…

Linux面試題及詳細答案 120道(1-15)-- 基礎概念

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

week1-[分支結構]中位數

week1-[分支結構]中位數 題目描述 給定 444 個正整數 a,b,c,da,b,c,da,b,c,d,輸出它們的中位數,答案四舍五入保留 111 位小數。 輸入格式 輸入共 111 行 444 個正整數 a,b,c,da,b,c,da,b,c,d。 輸出格式 輸出共 111 行 111 個浮點數表示答案。 樣例 #1 樣…