得物0509面試手撕題目解答

題目

使用兩個棧(一個無序棧和一個空棧)將無序棧中的元素轉移到空棧,使其有序,不允許使用其他數據結構。

示例:輸入:[3, 1, 6, 4, 2, 5],輸出:[6, 5, 4, 3, 2, 1]

思路與代碼

如果不限制使用其他數據結構,大可以直接全部輸出到數組里面然后快速排序(bushi)

但是這道題目不允許使用其他數據結構,那么只能用原來的無序棧保存不能壓入有序棧的元素。

  • stack1彈出元素temp,并將stack2中所有比temp小的元素移回stack1

  • temp壓入stack2,確保stack2始終降序。

  • 此時,被移回stack1中的元素一定小于temp,不滿足判斷條件,所以將依次執行temp = stack1.pop()和stack2.append(temp)

讀者可以模擬插入排序的過程來理解本題,下面的代碼展示的是降序排列的過程:

def sort_stack(stack1):stack2 = []# 將stack1中的元素按降序插入stack2(從棧底到棧頂)while stack1:temp = stack1.pop()# 將stack2中比temp小的元素移回stack1while stack2 and stack2[-1] < temp:  # 當棧2不為空且棧2的棧頂元素小于tempstack1.append(stack2.pop())stack2.append(temp)print(stack2)return stack2sort_stack([3, 1, 6, 4, 2, 5])
# [6, 5, 4, 3, 2, 1]

若要改為升序排列,只需將判斷條件改為stack2[-1] >?temp:

def sort_stack(stack1):stack2 = []# 將stack1中的元素按升序插入stack2(從棧底到棧頂)while stack1:temp = stack1.pop()# 將stack2中比temp大的元素移回stack1while stack2 and stack2[-1] > temp:  # 當棧2不為空且棧2的棧頂元素大于tempstack1.append(stack2.pop())stack2.append(temp)print(stack2)return stack2sort_stack([3, 1, 6, 4, 2, 5])
# [1, 2, 3, 4, 5, 6]

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

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

相關文章

基于 Nexus 在 Dockerfile 配置 yum, conda, pip 倉庫的方法和參考

在 Nexus 配置代理倉庫的方法&#xff0c;可參考 pypi 的配置博客&#xff1a;https://hellogitlab.com/CI/docker/create_your_nexus_2 更多代理格式&#xff0c;參考官方文檔&#xff0c;如 pypi&#xff1a;https://help.sonatype.com/en/pypi-repositories.html 配置 yum…

[6-8] 編碼器接口測速 江協科技學習筆記(7個知識點)

1 2 在STM32微控制器的定時器模塊中&#xff0c;CNT通常指的是定時器的計數器值。以下是CNT是什么以及它的用途&#xff1a; 是什么&#xff1a; ? CNT&#xff1a;代表定時器的當前計數值。在STM32中&#xff0c;定時器從0開始計數&#xff0c;直到達到預設的自動重裝載值&am…

RabbitMQ ③-Spring使用RabbitMQ

Spring使用RabbitMQ 創建 Spring 項目后&#xff0c;引入依賴&#xff1a; <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp --> <dependency><groupId>org.springframework.boot</groupId><artifac…

海外IP被誤封解決方案

這里使用Google Cloud和Cloudflare來實現&#xff0c;解決海外服務器被誤封IP&#xff0c;訪問不到的問題。 這段腳本的核心目的&#xff0c;是自動監測你在 Cloudflare 上管理的 VPS 域名是否可達&#xff0c;一旦發現域名無法 Ping 通&#xff0c;就會幫你更換IP&#xff1a…

一個基于 Spring Boot 的實現,用于代理百度 AI 的 OCR 接口

一個基于 Spring Boot 的實現&#xff0c;用于代理百度 AI 的 OCR 接口 BaiduAIController.javaBaiduAIConfig.java在 application.yml 或 application.properties 中添加配置&#xff1a;application.yml同時&#xff0c;需要在Spring Boot應用中配置RestTemplate&#xff1a;…

GPT-4o 遇強敵?英偉達 Eagle 2.5 視覺 AI 王者登場

前言&#xff1a; 在人工智能領域&#xff0c;視覺語言模型的競爭愈發激烈。GPT-4o 一直是該領域的佼佼者&#xff0c;但英偉達的 Eagle 2.5 橫空出世&#xff0c;憑借其 80 億參數的精簡架構&#xff0c;在長上下文多模態任務中表現出色&#xff0c;尤其是在視頻和高分辨率圖像…

將語言融入醫學視覺識別與推理:一項綜述|文獻速遞-深度學習醫療AI最新文獻

Title 題目 Integrating language into medical visual recognition and reasoning: A survey 將語言融入醫學視覺識別與推理&#xff1a;一項綜述 01 文獻速遞介紹 檢測以及語義分割&#xff09;是無數定量疾病評估和治療規劃的基石&#xff08;利特延斯等人&#xff0c…

Ubuntu24.04版本解決RK3568編譯器 libmpfr.so.4: cannot open shared object

問題描述 在Ubuntu24.04版本上編譯RK3568應用程序關于libmpfr.so.4: cannot open shared object問題&#xff0c;如下所示&#xff1a; /tools/ToolsChain/rockchip/rockchip_rk3568/host/bin/../libexec/gcc/aarch64-buildroot-linux-gnu/9.3.0/cc1plus: error while loadin…

產線視覺檢測設備技術方案:基于EFISH-SCB-RK3588/SAIL-RK3588的國產化替代賽揚N100/N150全場景技術解析

一、核心硬件選型與替代優勢? ?1. 算力與AI加速能力? ?異構八核架構?&#xff1a;采用4Cortex-A76&#xff08;2.4GHz&#xff09;4Cortex-A55&#xff08;1.8GHz&#xff09;設計&#xff0c;支持視覺算法并行處理&#xff08;如模板匹配、缺陷分類&#xff09; 相機采…

python如何合并excel單元格

在Python中合并Excel單元格&#xff0c;常用openpyxl庫實現。以下是詳細步驟和示例代碼&#xff1a; 方法一&#xff1a;使用 openpyxl 庫 步驟說明&#xff1a; 安裝庫&#xff1a; pip install openpyxl導入庫并加載文件&#xff1a; from openpyxl import load_workbook# …

高考備考1-集合

高考數學知識點總結—快手視頻講解 高考數學集合—快手視頻講解

Rust 數據結構:Vector

Rust 數據結構&#xff1a;Vector Rust 數據結構&#xff1a;Vector創建數組更新數組插入元素刪除元素 獲取數組中的元素迭代數組中的值使用枚舉存儲多個類型刪除一個數組會刪除它的元素 Rust 數據結構&#xff1a;Vector vector 來自標準庫&#xff0c;在內存中連續存儲相同類…

深度學習入門:深度學習(完結)

目錄 1、加深網絡1.1 向更深的網絡出發1.2 進一步提高識別精度1.3 加深層的動機 2、深度學習的小歷史2.1 ImageNet2.2 VGG2.3 GoogleNet2.4 ResNet 3、深度學習的高速化3.1 需要努力解決的問題3.2 基于GPU的高速化3.3 分布式學習3.4 運算精度的位數縮減 4、深度學習的應用案例4…

如何利用 Python 爬蟲按關鍵字搜索京東商品:實戰指南

在電商領域&#xff0c;京東作為國內知名的電商平臺&#xff0c;擁有海量的商品數據。通過 Python 爬蟲技術&#xff0c;我們可以高效地按關鍵字搜索京東商品&#xff0c;并獲取其詳細信息。這些信息對于市場分析、選品上架、庫存管理和價格策略制定等方面具有重要價值。本文將…

?JMeter聚合報告中的任務數和并發數區別

?JMeter聚合報告中的任務數和并發數有本質的區別。? 任務數&#xff08;樣本數&#xff09; 任務數或樣本數是指在性能測試中發出的請求數量。例如&#xff0c;如果模擬20個用戶&#xff0c;每個用戶發送100次請求&#xff0c;那么總的任務數或樣本數就是2000次請求? 并發…

Java 框架配置自動化:告別冗長的 XML 與 YAML 文件

在 Java 開發領域&#xff0c;框架的使用極大地提升了開發效率和系統的穩定性。然而&#xff0c;傳統框架配置中冗長的 XML 與 YAML 文件&#xff0c;卻成為開發者的一大困擾。這些配置文件不僅書寫繁瑣&#xff0c;容易出現語法錯誤&#xff0c;而且在項目規模擴大時&#xff…

OpenShift AI - 用 ModelCar 構建容器化模型,提升模型彈性擴展速度

《OpenShift / RHEL / DevSecOps 匯總目錄》 說明&#xff1a;本文已經在 OpenShift 4.18 OpenShift AI 2.19 的環境中驗證 文章目錄 什么是 ModelCar構建模型鏡像在 OpenShift AI 使用模型鏡像部署模型擴展速度對比 參考 什么是 ModelCar KServe 典型的模型初始化方法是從 S…

C#+WPF+prism+materialdesign創建工具主界面框架

代碼使用C#WPFprismmaterialdesign創建工具主界面框架 主界面截圖&#xff1a;

在選擇合適的實驗室鐵地板和鑄鐵試驗平板,幫分析?

鑄鐵測試底板是一種采用鑄鐵材料經過加工制成的基準測量工具&#xff0c;主要用于工業檢測、機械加工和實驗室等高精度要求的場合。其核心功能是為各類測量、檢驗、裝配工作提供穩定的水平基準面&#xff0c;確保測量數據的準確性和一致性。 一、鑄鐵測試底板的基本特性 1.材質…

C++匿名函數

C 中的匿名函數&#xff08;Lambda 表達式&#xff09;是 C11 引入的一項重要特性&#xff0c;它允許你在需要的地方定義一個臨時的、無名的函數對象&#xff0c;使代碼更加簡潔和靈活。 1. 基本語法 Lambda 表達式的基本結構&#xff1a; [capture list](parameter list) -…