【洛谷貪心算法】P1106刪數問題

這道題可以使用貪心算法來解決,核心思路是盡量讓高位的數字盡可能小。當我們逐步刪除數字時,會優先刪除高位中相對較大的數字。具體做法是從左到右遍歷數字序列,當發現當前數字比它后面的數字大時,就刪除當前數字,直到刪除了S個數字或者遍歷完整個序列。如果遍歷完后刪除的數字個數還不夠S個,就從序列的末尾繼續刪除。
在這里插入圖片描述

【算法思路】

  1. 輸入處理:使用 string 類型存儲高精度的正整數 num,并讀取要刪除的數字個數 s

這道題為什么用字符串存儲而不是數組存儲?

處理大整數的便利性:題目中明確提到輸入的是一個高精度的正整數,且不超過 250 位。普通的整數類型(如 intlong long)所能表示的數值范圍是有限的,無法存儲如此大的數字。字符串可以輕松地存儲任意長度的數字序列,它本質上是字符數組,每個字符對應數字的一位,不受數值范圍的限制。例如,對于一個 200 位的大整數,使用字符串可以直接將其按位存儲,不會出現溢出問題。

操作的靈活性:在本題中,需要進行刪除數字的操作。字符串提供了方便的方法來刪除指定位置的字符,例如在 C++ 中可以使用 erase 函數。對于字符串 str,可以使用 str.erase(i, 1) 輕松刪除第 i 個位置的字符。

//數組存儲
vector<int> num(n);
int k;
for(int i=0;i<n;i++){cin>>num[i];
}
cin>>k;//字符串存儲
string num;
int k;
cin>>num>>k;
  1. 刪數操作
  • 進入一個循環,循環次數為 k 次。
  • 在每次循環中,從左到右遍歷 num,找到第一個滿足 num[i] > num[i + 1] 的位置 i,然后刪除該位置的數字。
  • 如果內層循環結束后 deleted 仍然為 false,說明在當前數字字符串中沒有找到遞減的位置,此時使用 num.erase(num.length() - 1, 1) 刪除字符串的最后一個字符,并將 k 減 1。
  1. 去除前導零:刪數操作完成后,可能會出現前導零的情況,因此需要去除前導零。

    • 定義int類型的變量start變量初始化為0,用于記錄數字字符串中第一個非零字符的位置。
    • 進入 while (start < num.length() && num[start] == '0') 循環,從字符串的開頭開始遍歷,只要沒有遍歷到字符串末尾且當前字符是0,就將start加1。
    • 用三目運算符處理前導零并且給num賦予合適的值。
  2. 輸出結果:如果去除前導零后 num 為空,說明最終結果為 0,輸出 0;否則輸出 num

【代碼示例】

#include<iostream>
#include<string>
using namespace std;int main(){string num;int k;cin>>num>>k;//進行k次刪除操作 while(k > 0){bool deleted=false;//標記是否找到遞減位置 for(int i=0;i < num.length()-1;++i){if(num[i] > num[i+1]){//找到第一個遞減的位置,刪除改位置的數字num.erase(i,1);deleted=true;k--;break;}}//如果沒找到遞減位置,刪除末尾字符 if(!deleted){num.erase(num.length() - 1,1); k--;}}//去除前導零int start=0;while (start < num.length() && num[start] == '0'){start++;}num = (start==num.length()) ? "0" : num.substr(start);cout<<num<<endl; return 0;
}

注意:

  • 邊界處理:若序列完全遞增,刪除末尾數字

  • substr:是 std::string 類的一個成員函數,num.substr(start) 會返回從字符串 num 的第 start 個位置開始一直到字符串末尾的子字符串。

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

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

相關文章

開源PDF解析工具olmOCR

olmOCR 是由 Allen Institute for Artificial Intelligence (AI2) 的 AllenNLP 團隊開發的一款開源工具&#xff0c;旨在將PDF文件和其他文檔高效地轉換為純文本&#xff0c;同時保留自然的閱讀順序。它支持表格、公式、手寫內容等。 olmOCR 經過學術論文、技術文檔和其他文檔…

基因型—環境兩向表數據分析——品種生態區劃分

參考資料&#xff1a;農作物品種試驗數據管理與分析 用于品種生態區劃分的GGE雙標圖有兩種功能圖&#xff1a;試點向量功能圖和“誰贏在哪里”功能圖。雙標圖的具體模型基于SD定標和h加權和試點中心化的數據。本例中籽粒產量的GGE雙標圖僅解釋了G和GE總變異的53.6%&#xff0c;…

HTTP~文件 MIME 類型

MIME&#xff08;Multipurpose Internet Mail Extensions&#xff09;類型&#xff0c;即多用途互聯網郵件擴展類型&#xff0c;是一種標準&#xff0c;用來表示文檔、文件或字節流的性質和格式。最初是為了在電子郵件系統中支持非 ASCII 字符文本、二進制文件附件等而設計的&a…

降維攻擊!PCA與隨機投影優化高維KNN

引言&#xff1a;高維數據的“冰山困境” 假設你正在處理一個電商平臺的商品圖片分類任務&#xff1a;每張圖片被提取為1000維的特征向量&#xff0c;100萬條數據的距離計算讓KNN模型陷入“維度地獄”——計算耗時長達數小時&#xff0c;且內存占用超過10GB。 破局關鍵&#…

Rust 是什么

Rust 是什么 Rust 是一種由 Mozilla 開發的系統級編程語言,它于 2010 年首次亮相,在 2015 年發布 1.0 版本,此后迅速發展并受到廣泛關注。 內存安全:Rust 最大的亮點之一是它在編譯階段就能夠避免常見的內存錯誤,如空指針引用、數據競爭和內存泄漏等。它通過所有權(Owne…

網絡變壓器的主要電性參數與測試方法(2)

Hqst盈盛&#xff08;華強盛&#xff09;電子導讀&#xff1a;網絡變壓器的主要電性參數與測試方法&#xff08;2&#xff09;.. 今天我們繼續來看看網絡變壓器的2個主要電性參數與它的測試方法&#xff1a; 1. 線圈間分布電容Cp:線圈間雜散靜電容 測試條件:100KHz/0.1…

UniApp 中封裝 HTTP 請求與 Token 管理(附Demo)

目錄 1. 基本知識2. Demo3. 拓展 1. 基本知識 從實戰代碼中學習&#xff0c;上述實戰代碼來源&#xff1a;芋道源碼/yudao-mall-uniapp 該代碼中&#xff0c;通過自定義 request 函數對 HTTP 請求進行了統一管理&#xff0c;并且結合了 Token 認證機制 請求封裝原理&#xff…

初階數據結構習題【3】(1時間和空間復雜度)——203移除鏈表元素

1. 題目描述 力扣在線OJ——移除鏈表元素 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 示例1&#xff1a; 輸入&#xff1a;head [1,2,6,3,4,5,6], val 6 輸出&#xff1a;[1,2,3…

互聯網+房產中介+裝修設計+物料市場+智能家居一體化平臺需求書

一、項目概述 1.1 項目背景 隨著互聯網技術的飛速發展以及人們生活品質的顯著提升&#xff0c;傳統房產交易、裝修設計、家居購物等領域暴露出諸多問題。信息不對稱使得用戶難以獲取全面準確的信息&#xff0c;在房產交易中可能高價買入或低價賣出&#xff0c;裝修時可能遭遇…

15.13 AdaLoRA自適應權重矩陣微調:動態秩調整的智能革命

AdaLoRA自適應權重矩陣微調:動態秩調整的智能革命 一、技術架構解析 #mermaid-svg-u3TfE3YrkeWSjem2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u3TfE3YrkeWSjem2 .error-icon{fill:#552222;}#mermaid-svg-u3…

P9231 [藍橋杯 2023 省 A] 平方差

P9231 [藍橋杯 2023 省 A] 平方差 - 洛谷 題目描述 給定 L,R&#xff0c;問 L≤x≤R 中有多少個數 x 滿足存在整數 y,z 使得 xy2?z2。 輸入格式 輸入一行包含兩個整數 L,R&#xff0c;用一個空格分隔。 輸出格式 輸出一行包含一個整數滿足題目給定條件的 x 的數量。 輸…

【GenBI優化】提升text2sql準確率:建議使用推理大模型,增加重試

引言 Text-to-SQL&#xff08;文本轉 SQL&#xff09;是自然語言處理&#xff08;NLP&#xff09;領域的一項重要任務&#xff0c;旨在將自然語言問題自動轉換為可在數據庫上執行的 SQL 查詢語句。這項技術在智能助手、數據分析工具、商業智能&#xff08;BI&#xff09;平臺等…

<el-cascader時只取最后一級數據

在用cascader時只取最后一級數據傳給后端 組件的屬性emitPath: false就可以做到&#xff0c;取值就是最后一級傳給后端。并且后端放回的id 也直接可以做回顯 <el-cascaderv-model"Type":options"Options":props"{ value: id, label: label, chil…

`maturin`是什么:matu rus in python

maturin是什么 maturin 是一個用于構建和發布 Rust 編寫的 Python 綁定庫的工具。它簡化了將 Rust 代碼集成到 Python 項目中的過程,支持創建不同類型的 Python 包,如純 Python 包、包含 **Rust (系統編程語言)**擴展模塊的包等。以下為你詳細介紹 maturin 的相關信息并舉例…

流媒體網絡協議全解析:從實時傳輸到自適應流,如何選擇最優方案?

一、歷史發展與協議提出者 流媒體協議的發展與互聯網技術迭代緊密相關,主要分為三個階段: 早期專有協議(1990s-2000s) RTSP/RTP 提出者:RealNetworks(RTSP初始推動者),后由IETF標準化(RFC 2326)。背景:1996年推出,用于視頻監控和點播系統,基于UDP傳輸媒體流,支持…

mysql架構查詢執行流程(圖解+描述)

目錄 mysql架構查詢執行流程 圖解 描述 mysql架構查詢執行流程 圖解 描述 用戶連接到數據庫后&#xff0c;由連接器處理 連接器負責跟客戶端建立連接、獲取權限、維持和管理連接 客戶端發送一條查詢給服務器 服務器先檢查查詢緩存&#xff0c;如果命中緩存&#xff0c;則立…

【QT問題】Ubantu環境下解決已經下載好的qt怎么添加或卸載其他組件

1、找到自己qt的安裝目錄->雙擊打開MaintenanceTool.exe 2、點擊next進去&#xff0c;此時需要登錄qt賬戶&#xff08;如果沒有去官網注冊一個&#xff0c;很快且免費&#xff09; 我這里隨便填的賬號&#xff0c;如果是正確的下面next就能夠點擊。 這里隨便提一下&#xf…

CS50 使用 Python 進行人工智能簡介-“騎士與流氓”謎題

如何使用邏輯推理來解決“騎士與騙子”&#xff08;Knights and Knaves&#xff09;類型的邏輯難題。具體來說&#xff0c;任務是根據每個角色的陳述推理出他們是“騎士”還是“騙子”。 任務背景&#xff1a; 騎士與騙子問題&#xff1a;每個角色要么是騎士&#xff0c;要么是…

每日學習Java之一萬個為什么?[MySQL面試篇]

分析SQL語句執行流程中遇到的問題 前言1 MySQL是怎么在一臺服務器上啟動的2 MySQL主庫和從庫是同時啟動保持Alive的嗎&#xff1f;3 如果不是主從怎么在啟動的時候保證數據一致性4 ACID原則在MySQL上的體現5 數據在MySQL是通過什么DTO實現的6 客戶端怎么與MySQL Server建立連接…

詳細解析d3dx9_27.dll丟失怎么辦?如何快速修復d3dx9_27.dll

運行程序時提示“d3dx9_27.dll文件缺失”&#xff0c;通常由DirectX組件損壞或文件丟失引起。此問題可通過系統化修復方法解決&#xff0c;無需重裝系統或軟件。下文將詳細說明具體步驟及注意事項。 一.d3dx9_27.dll缺失問題的本質解析 當系統提示“d3dx9_27.dll丟失”時&…