【C++】 —— 筆試刷題day_22

一、添加字符

題目解析

在這里插入圖片描述

這道題,給定兩個字符串AB,字符串A的長度要小于B的長度;

現在我們要對A字符串添加字符,使得A字符串長度等于B字符串的長度,并且要求對應位置的字母盡量相等,然后求出來不相等的字符最少有多少位。

算法思路

對于這道題而言,我們可以在A字符串的開頭和結尾位置添加字符(那我們添加的字符肯定是和B字符串對應位置的字符相等的),所以我們就只需要在B字符串中找到一段區間(這個區間的長度等于A的長度,然后讓這個區間內的字符盡可能和A字符串對應字符相等)。

看到這里,可能會想到滑動窗口、雙指針算法來找更加高效的方法;

但這道題,B字符串的長度小于等于50A字符串的長度小于等于B的長度,我們使用暴力解法即可。

暴力解法:

遍歷B字符串,找以每一個位置為開始,長度等于A的長度的子串,然后找到不相等的字符最少的,記錄一下結果即可。

代碼實現

這里注意:假設A字符串的長度為nB字符串的長度為m

遍歷B字符串時,我們要找i位置后面的n個字符,所以我們遍歷到m-n位置即可

#include <iostream>
using namespace std;int main() {string str1, str2;cin >> str1 >> str2;int n = str1.size();int m = str2.size();int ret = m;for (int i = 0; i < m - n + 1; i++) {//從0位置遍歷到m-n位置int tmp = 0;//記錄以i位置開始for (int j = 0; j < n; j++) {if (str1[j] != str2[i + j])tmp++;}ret = min(ret, tmp);}cout << ret << endl;return 0;
}

二、數組變換

題目解析

在這里插入圖片描述

題目給定一個數組,現在呢,我們要將數組中的所有數相等;

我們可以進行的操作:將數組中的一個數改為這個數的兩倍(說白了就是進行乘2操作

這個操作沒有次數限制,可以使用也可以不使用,讓我們判斷給定的數組能否通過乘2操作將所有數變成一樣的。

算法思路

這道題,首先的問題就是:我們如何去判斷給定的數組是否能夠將所有數變成一樣的。

首先,肯定就是,暴力枚舉,枚舉出來所以的兩個數的組合,然后依次判斷這兩個數能否通過操作變成一樣的數。

這道題數據個數是小于50的,暴力枚舉也可能可以通過;

但是我們進行一下優化:

  • 我們知道進行乘2操作時,這個數是一直在變大的,所以如果整個數組中的所有數是可以變成一樣的,那是不是可以理解為我們可以將所有數通過乘2操作,變成最大的那一個數。(如果無法變成最大的那一個數,那無論多少次操作都是不能變成同一個數的)。
  • 那我們就可以記錄一下整個數組中最大的數num,然后遍歷數組,判斷每一個數能否通過乘2操作變成最大的數即可

那現在我們的問題就來到了如何去判斷一個數,能否通過乘2操作變成另外一個數。

我們仔細想一下,如果x可以通過乘2操作變成y,那是不是說yx2^n倍?

我們乘2操作2,4,8,16,32......,這些都是2^n,這里如果x等于y,那y就是x1(2^0)。

那也就是y/x是一個2^n

那我們的問題就變成了判斷一個數的2^n

這里暴力就是通過/2操作判斷y/x每次/2的商是否是2的倍數。

這里介紹兩種判斷一個數是否是2^n次方的 方法:

  • x - (x & -x):如果x - (x & -x) == 0,那x就是2^n;否則就不是。
  • x & (x - 1):如果x & (x - 1) == 0,那x就是2^n;否則就不是。

在這里插入圖片描述

代碼實現

#include <iostream>
using namespace std;
const int N = 51;
int n;
int arr[N];
int num = 0;
bool fun()
{//判斷是否能轉換for(int i = 0;i<n;i++){if(num % arr[i] != 0)return false;int b = num/arr[i];//判斷b是否是2的n次方//if(b - (b&-b)!=0)  return false;if(b & (b-1) !=0)   return false;}return true;
}
int main() {cin>>n;for(int i = 0;i<n;i++){cin>>arr[i];num = max(num,arr[i]);}if(fun()) cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

三、裝箱問題

題目解析

在這里插入圖片描述

這道題,給一個箱子的容量v,和n個物品,和每一個物品的體積;

現在我們要在這n個物品中選擇體積不超過v的物品,然后要求箱子的剩余空間最小。

算法思路

有系統學習過動態規劃,或者了解過01背包問題,相比已經想到這道題思路了;

這道題就是01背包的一個應用。

題目要求我們箱子的剩余容量最小,我們反過來理解,就是我們在n個物品中選擇體積不超過v的物品,然后要選擇物品的總體積最大。

那這道題就簡單了。思路就是動態規劃-01背包

狀態表示: dp[i][j]表示從n個物品中選擇體積不超過j是物品,所選擇物品總體積的最大值。

狀態轉移方程:

  • 對于i位置的物品,我們可以選擇它,也可以不選擇它;
  • 如果選擇i位置的物品,dp[i][j] = dp[i-1][j-arr[i]] + arr[i]。(選擇i物品,那就要從剩下的i-1位置中選擇體積不超過j - arr[i]的物品;這里還要注意能不能選擇i位置的問題)
  • 如果不選擇i位置的物品,dp[i][j] = dp[i-1][j]。(不選擇i位置的物品,那就要從剩下的i-1位置中選擇體積不超過j的物品)。

這里如果i位置物品的體積大于j,那一定是不能選擇i位置的。

在這里插入圖片描述

代碼實現

#include <iostream>
using namespace std;
const int N = 35;
const int M = 2e4+10;
int arr[N];
int dp[N][M];
int n,v;
int main()
{cin>>v>>n;for(int i = 1;i<=n;i++){cin>>arr[i];}for(int i = 1;i<=n;i++){for(int j = 1;j<=v;j++){dp[i][j] = dp[i-1][j];if(j>=arr[i])dp[i][j] = max(dp[i][j], dp[i-1][j-arr[i]] + arr[i]);}}cout<<(v - dp[n][v])<<endl;return 0;
}

到這里本篇文章內容就結束了
感謝各位的支持

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

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

相關文章

錯誤: 找不到或無法加載主類 HelloWorld,cmd窗口,java命令,提示

錯誤: 找不到或無法加載主類 HelloWorld 解決辦法 檢查classpath是否 .; 開頭的

手撕LLM(五):從源碼出發,探索多模態VL模型的推理全流程

前面我們分享了關于大語言模型的相關技術&#xff0c;包括前向推理、LoRa掛載、MoE模型、模型預訓練等&#xff1b;后續還是會基于MiniMindLM模型繼續分享關于大語言模型的SFT指令微調、LoRa微調、基于人類偏好的強化學習微調以及模型蒸餾相關的技術&#xff0c;請大家持續關注…

關于隔離2:ADC芯片

ADC可以稱作是模擬芯片領域的明珠。作為一種關鍵器件&#xff0c;ADC設計難度大&#xff0c;專利墻高&#xff0c;所以國內一直處于追趕的狀態。近年來&#xff0c;國產ADC發展極為迅速&#xff0c;逐漸在各項參數上趕上了國際主流水準。 模擬數字轉換器ADC連接著現實模擬世界…

【MySQL】前綴索引、索引下推、訪問方法,自適應哈希索引

最左前綴原則 對于INDEX(name, age)來說最左前綴可以是聯合索引的最左N個字段, 也可以是字符串索引的最左M個字符。 SELECT * FROM t WHERE name LIKE 張%其效果和單獨創建一個INDEX(name)的效果是一樣的若通過調整索引字段的順序, 可以少維護一個索引樹, 那么這個順序就是需要…

【Oracle專欄】Oracle中的虛擬列

Oracle相關文檔&#xff0c;希望互相學習&#xff0c;共同進步 風123456789&#xff5e;-CSDN博客 1.背景 在EXP方式導出時&#xff0c;發現 出現如下提示 EXP-00107: virtual column 不支持&#xff0c;因此采用expdp方式導出。于是本文針對oracle虛擬列進行簡單介紹。 2. 相…

Nacos深度剖析與實踐應用之-配置中心

&#x1f4f9; 簡介 在微服務架構中&#xff0c;配置管理是至關重要的基礎能力。Nacos作為阿里巴巴開源的一體化動態服務發現、配置管理和服務管理平臺&#xff0c;其配置中心模塊提供了統一配置管理、動態配置推送、多環境支持等核心能力。相比傳統配置文件方式&#xff0c;Na…

gma 2.1.4 (2025.04.18) | GmaGIS V0.0.1a3 更新日志

安裝 gma 2.1.4 pip install gma2.1.4網盤下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取碼&#xff1a;1pc8 注意&#xff1a;此版本沒有Linux版&#xff01; 編譯gma的Linux虛擬機沒有時間修復&#xff0c;本期Linux版繼…

在 Node.js 中設置響應的 MIME 類型

在 Node.js 中設置響應的 MIME 類型是為了讓瀏覽器正確解析服務器返回的內容&#xff0c;比如 HTML、CSS、圖片、JSON 等。我們通常通過設置響應頭中的 Content-Type 字段來完成。 ? 一、什么是 MIME 類型&#xff08;Content-Type&#xff09;&#xff1f; MIME&#xff08;…

SRS transcode支持 h264_nvenc 硬件解碼方案

文章目錄 SRS transcode支持 h264_nvenc 硬件解碼方案1、修改文件2、重新編譯3、使用 SRS transcode支持 h264_nvenc 硬件解碼方案 SRS 是開源的流媒體服務&#xff0c;但在使用 GPU 服務器時&#xff0c;想要通過硬件加速&#xff0c;目前官方是不支持的&#xff0c;所以簡單…

數字系統與編碼

1. 數字系統&#xff08;Number Systems&#xff09; 1.1 常見數字系統 系統基數符號集示例應用場景二進制20, 11010計算機底層電路、數據存儲八進制80-717Unix文件權限&#xff08;如chmod 755&#xff09;十進制100-942日常計算十六進制160-9, A-F0x1F內存地址、顏色編碼&a…

【PyTorch】訓練時跟OOM相關的提示信息

1. RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)

基于maven-jar-plugin打造一款自動識別主類的maven打包插件

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

多態的主要好處與不足

多態是面向對象編程的核心特性之一&#xff0c;它通過方法重寫、接口實現等方式實現“同一操作作用于不同對象時產生不同行為”。以下是多態的主要好處與不足&#xff1a; 多態的好處 1. 提高代碼靈活性和擴展性 開閉原則支持&#xff1a;新增子類時&#xff0c;無需修改現有…

excel解析圖片pdf附件不怕

背景 工作中肯定會有導入excel還附帶圖片附件的下面是我解析的excel&#xff0c;支持圖片、pdf、壓縮文件實現 依次去解析excel&#xff0c;看看也沒有附件&#xff0c;返回的格式是Map&#xff0c;key是第幾行&#xff0c;value是附件list附件格式都被解析成pdf格式Reader.jav…

python爬蟲 線程,進程,協程

0x00 線程 線程是一個執行單位&#xff0c;是在一個進程里面的&#xff0c;是共享進程里面的提供的內存等資源&#xff0c;使用多個線程時和使用多個進程相比&#xff0c;多個線程使用的內存等資源較少。進程像一座“房子”&#xff08;獨立資源&#xff09;&#xff0c;線程是…

ES|QL,知道嗎,專為搜索而生 —— 推出評分和語義搜索

作者&#xff1a;來自 Elastic Ioana Tagirta 在 Elasticsearch 8.18 和 9.0 中&#xff0c;ES|QL 支持評分、語義搜索以及更多的 match 函數配置選項&#xff0c;還有一個新的 KQL 函數。 使用 ES|QL 搜索 在 Elasticsearch 8.18 和 9.0 中&#xff0c;ES|QL 增加了一系列新功…

MIT6.S081-lab4

MIT6.S081-lab4 注&#xff1a;本篇lab的前置知識在《MIT6.S081-lab3前置》 1. RISC-V assembly 第一個問題 Which registers contain arguments to functions? For example, which register holds 13 in main’s call to printf? 我們先來看看main干了什么&#xff1a; …

一文總結通信電路中LC諧振回路中各公式以及對深入解讀品質因數Q

目錄 前言 一、基本公式總結 1.并聯諧振回路 2.串聯諧振回路 二、淺談品質因數 1.衡量諧振回路能量存儲與能量損耗之比的無量綱參數&#xff0c;用于描述諧振電路的頻率選擇性 2.當受到振蕩驅動力時&#xff0c;諧振腔的中心頻率與其帶寬的比值 3.為什么諧振時電容上的…

Linux:文件系統

一.認識硬件–磁盤 1. 物理結構 1.2 存儲結構 ?如何定位?個扇區呢&#xff1f; 可以先定位磁頭&#xff08;header&#xff09;——》確定磁頭要訪問哪?個柱?(磁道)&#xff08;cylinder&#xff09;——》 定位?個扇區(sector)。 柱?&#xff08;cylinder&#xff09…

數字孿生廢氣處理工藝流程

圖撲數字孿生廢氣處理工藝流程系統。通過精準 3D 建模&#xff0c;對廢氣收集、預處理、凈化、排放等全流程進行 1:1 數字化復刻&#xff0c;實時呈現設備運行參數、污染物濃度變化等關鍵數據。 借助圖撲可視化界面&#xff0c;管理者可直觀掌握廢氣處理各環節狀態&#xff0c…