C++ 模擬OJ

目錄

1、1576. 替換所有的問號

2、?495. 提莫攻擊

3、6. Z 字形變換

4、38. 外觀數列

5、?1419. 數青蛙


1、1576. 替換所有的問號

思路:分情況討論

  • ?zs:左邊沒有元素,則僅需保證替換元素與右側不相等;
  • z?s:左右都有元素,則問號兩側都需要保證替換元素與其不相等;
  • zs? :右邊沒有元素,則僅需保證替換元素與左側不相等。
class Solution {
public:string modifyString(string s) {int n = s.size();for (int i = 0; i < n; i++) {if (s[i] == '?') {for (char ch = 'a'; ch <= 'z'; ch++) {if ((i == 0 || ch != s[i - 1]) &&(i == n - 1 || ch != s[i + 1])) {s[i] = ch;break;}}}}return s;}
};

2、?495. 提莫攻擊

思路:分情況討論

相鄰兩次受到攻擊的時間差與中毒持續時間進行比較,時間差大于等于中毒持續時間,則可以收到完整中毒時長,否則只能接受到時間差的中毒時長。

class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int sum = 0;for (int i = 1; i < timeSeries.size(); i++) {int x = timeSeries[i] - timeSeries[i - 1];if (x >= duration)sum += duration;elsesum += x;}return sum + duration;}
};

3、6. Z 字形變換

思路:畫圖找規律

示例解釋

以 "PAYPALISHIRING" 為例,numRows = 3?時,周期?d = 4

  • 第一行字符:P(0),A(4),H(8),N(12)
  • 第二行字符:A(1),P(3),L(5),S(7),I(9),I(11),G(13)
  • 第三行字符:Y(2),I(6),R(10)

按行讀取這些字符后得到的新字符串是 "PAHNAPLSIIGYIR"。

  1. 特殊情況處理:如果?numRows?為 1,則不需要進行任何變換,直接返回原字符串?s

  2. 周期計算:整個 Z 字形排列的一個循環周期?d?是?2 * numRows - 2。這個周期是由于從上到下再到上的一個完整循環所包含的字符數量。例如,當?numRows?為 3 時,d?為 4。

  3. 第一行的字符添加:第一行的字符在原字符串中的位置就是周期?d?的倍數,即?0, d, 2d, ...

  4. 中間行的字符添加

    • 對于中間的每一行,每個周期內都有兩個字符需要被添加到結果字符串中。第一個字符的位置是周期起始位置加行數,第二個字符的位置是周期結束位置減行數。
    • 具體來說,對于行?k(從 0 開始計數),在周期?i?中,第一個字符的位置是?i + k,第二個字符的位置是?i + d - k
    • 注意,每次添加第二個字符時需要檢查其位置是否超出了原字符串的長度。
  5. 最后一行的字符添加:最后一行的字符在原字符串中的位置是周期起始位置加?numRows - 1,即?numRows - 1, numRows - 1 + d, numRows - 1 + 2d, ...

  6. 返回結果:按照上述規則,將所有行的字符依次添加到結果字符串?ret?中后,返回?ret

class Solution {
public:string convert(string s, int numRows) {if (numRows == 1)return s;string ret;int d = 2 * numRows - 2;int n = s.size();for (int i = 0; i < n; i += d) {ret += s[i];}for (int k = 1; k < numRows - 1; k++) {for (int i = k, j = d - k; i < n || j < n; i += d, j += d) {ret += s[i];if (j < n)ret += s[j];}}for (int i = numRows - 1; i < n; i += d) {ret += s[i];}return ret;}
};

4、38. 外觀數列

思路:外層遍歷數組元素,內層使用雙指針尋找相同字符區間,區間相減就是相同字符的個數,區間左端點就是字符。

class Solution {
public:string countAndSay(int n) {string ret = "1";for (int i = 1; i < n; i++) {string tmp;int n = ret.size();for (int left = 0, right = 0; right < n;) {while (right < n && ret[left] == ret[right])right++;tmp += to_string(right - left) + ret[left];left = right;}ret = tmp;}return ret;}
};

5、?1419. 數青蛙

思路:

  • 計數邏輯:通過追蹤每個 "croak" 中字符的狀態,確保蛙鳴聲的順序正確無誤。
  • 順序檢測:確保每個蛙鳴聲都是按照正確的順序 "croak" 發出的。
  1. 初始化變量:

    • s = "croak":定義了一個青蛙蛙鳴的順序。
    • n = s.size():蛙鳴聲 "croak" 的長度,這里是5。
    • hash:一個大小為5的向量(數組),用于追蹤 "croak" 中每個字母的狀態。
    • index:一個哈希表(unordered_map),用于映射每個字符到它在 "croak" 中的索引。
  2. 處理字符串:

    • 遍歷輸入的?croakOfFrogs?字符串中的每個字符。
    • 如果字符是 'c',表示一個新的蛙鳴聲開始。如果在?hash?的最后一個位置(對應 'k' 字符的位置)有計數,表示有一個青蛙完成了蛙鳴,可以開始新的蛙鳴,因此減少 'k' 的計數,并增加 'c' 的計數。
    • 對于 'r', 'o', 'a', 'k' 之外的 'c',需要檢查前一個字符是否已經存在(即前一個狀態的計數是否大于0)。如果是,將前一個字符的計數減1,當前字符的計數加1。如果不是,表示蛙鳴聲的順序被打斷了,返回 -1。
  3. 驗證和返回結果:

    • 遍歷?hash?向量,檢查 'c', 'r', 'o', 'a' 的計數是否都為0。如果這些位置的計數不為0,表示有蛙鳴聲沒有完成,返回 -1。
    • 如果所有 'c', 'r', 'o', 'a' 的計數都為0,最后返回 'k' 的計數,即為所需的最少青蛙數量。
class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {string s = "croak";int n = s.size();vector<int> hash(n);unordered_map<char, int> index;for (int i = 0; i < n; i++)index[s[i]] = i;for (auto c : croakOfFrogs) {if (c == 'c') {if (hash[n - 1] != 0)hash[n - 1]--;hash[0]++;} else {int i = index[c];if (hash[i - 1] == 0)return -1;hash[i - 1]--;hash[i]++;}}for (int i = 0; i < n - 1; i++) {if (hash[i] != 0)return -1;}return hash[n - 1];}
};

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

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

相關文章

Java - List排序

List排序方法 主要有三種方法&#xff08;按推薦度排序&#xff09;&#xff1a; JDK8的streamComparator#compare()Comparable#compareTo() 法1&#xff1a;list的sort() package com.example.a;import java.util.ArrayList; import java.util.Comparator; import java.util…

pyqt5 QWebEngineView 重寫mousepressevent捕獲鼠標點擊事件,無響應

QWebEngineView 加載網頁后&#xff0c;重寫mousepressevent捕獲鼠標點擊事件&#xff0c;無響應原因是 QWebEngineView在加載界面后&#xff0c;被本身的child接收了該事件&#xff0c; 解決辦法&#xff1a;同過重載event&#xff0c;截取QEvent::ChildAdded事件 from PyQ…

islide2024免費版PPT插件下載

一、功能概覽 iSlide PPT插件是一款專為PowerPoint用戶設計的輔助工具&#xff0c;其功能全面且實用&#xff0c;主要包括但不限于以下幾點&#xff1a; 設計元素庫&#xff1a;提供豐富的設計元素&#xff0c;如主題、布局、圖標、配色等&#xff0c;用戶可以直接拖拽使用&a…

動態規劃|【雙指針】|611.有效三角形個數

題目 611. 有效三角形的個數 給定一個包含非負整數的數組 nums &#xff0c;返回其中可以組成三角形三條邊的三元組個數。 示例 1: 輸入: nums [2,2,3,4] 輸出: 3 解釋:有效的組合是: 2,3,4 (使用第一個 2) 2,3,4 (使用第二個 2) 2,2,3示例 2: 輸入: nums [4,2,3,4] 輸出…

【Python】OpenCV-使用ResNet50進行圖像分類

使用ResNet50進行圖像分類 如何使用ResNet50模型對圖像進行分類。 import os import cv2 import numpy as np from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions from tensorflow.keras.preprocessing import image# 設置…

03-03學習筆記 內存管理初始化

當指針位數為32位時&#xff0c;virtual space 的大小就是 2^32&#xff0c;只有當指針位數是64位時&#xff0c;virtual space 才會增大。 通常virtual space 的劃分方式為 3:1, 依靠 PAGE_OFFSET 常數控制&#xff0c;影響著內核空間和用戶空間的上下文切換效率。 像路由器這…

【Python】進階學習:pandas--read_excel()函數的基本使用

【Python】進階學習&#xff1a;pandas–read_excel()函數的基本使用 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希…

【好書推薦-第七期】《RTC程序設計:實時音視頻權威指南》(音視頻開發必看!)

&#x1f60e; 作者介紹&#xff1a;我是程序員洲洲&#xff0c;一個熱愛寫作的非著名程序員。CSDN全棧優質領域創作者、華為云博客社區云享專家、阿里云博客社區專家博主、前后端開發、人工智能研究生。公粽號&#xff1a;洲與AI。 &#x1f388; 本文專欄&#xff1a;本文收錄…

AWTK-MVVM 配置文件模型

配置文件模型 AWTK-MVVM 內置了一些配置文件模型&#xff0c;用于讀寫各種配置文件&#xff0c;比如&#xff0c;JSON/XML/INI/CSV/UBJSON 等。 文件名中可以引用下面的變量。 ${app_dir} 應用程序目錄${user_dir} 用戶目錄${temp_dir} 臨時目錄 json(url${app_dir}/demos/de…

nodejs,JSDOM 補 window環境

window[atob] 是一個在瀏覽器中使用的 JavaScript 函數&#xff0c;用于將 base64 編碼的字符串解碼為原始數據。具體來說&#xff0c;atob 函數會將 base64 字符串解碼為一個 DOMString&#xff0c;其中包含解碼后的二進制數據。這在處理從服務器獲取的 base64 編碼的數據或在…

多平臺拼音輸入法軟件的開發

拼音輸入法從上個世紀發展到現在, 已經發展了幾十年了, 技術上已經非常成熟了. 換句話說, 就是實際上沒多少技術含量, 隨便來個人就能手搓一個. 本文介紹一個簡單的多平臺拼音輸入法軟件的設計和實現, 支持 GNU/Linux (ibus) 平臺 (PC) 和 Android 平臺 (手機). 目錄 1 中文輸…

E: 無法修正錯誤,因為您要求某些軟件包保持現狀,就是它們破壞了軟件包間的依賴關系。

比如&#xff0c;安裝ros的時候&#xff0c;用 執行&#xff1a; sudo apt install ros-melodic-desktop-full 出現如下問題&#xff1a; 如果你根據提示&#xff0c;安裝ros-melodic-desktop&#xff0c;他有會說類似“E: 無法修正錯誤&#xff0c;因為您要求某些軟件包保持…

Vue.js入門指南:簡介、環境配置與Yarn創建項目

一、Vue.js簡介 Vue.js&#xff0c;一個流行的JavaScript框架&#xff0c;以其直觀、靈活和高效的特點&#xff0c;在前端開發者中贏得了廣泛的贊譽。Vue.js的核心庫專注于視圖層&#xff0c;使得開發者能夠構建出響應式的數據綁定和組合的視圖組件。Vue.js的目標是通過盡可能簡…

BUUCTF---[極客大挑戰 2019]Http1

1.題目描述&#xff0c;在地址框輸入下面的網址 2.來到頁面&#xff0c;ctrlu查看源碼&#xff0c;仔細觀察會看到一個.php的跳轉頁面 3.點進去頁面提示It doesnt come from https://Sycsecret.buuoj.cn 4.頁面提示它不是來源于這個網址&#xff0c;我們需要用bp抓包對數據進行…

多波束水深數據粗差剔除方法總結(不斷更新)

目錄 一、粗差產生原因 二、粗差剔除方法 三、自動濾波方法分類 3.1 趨勢面濾波 3.1.1 現有方法 3.1.2 缺點

Web開發介紹,制作小網站流程和需要的技術【詳解】

1.什么是web開發 Web&#xff1a;全球廣域網&#xff0c;也稱為萬維網(www World Wide Web)&#xff0c;能夠通過瀏覽器訪問的網站。 所以Web開發說白了&#xff0c;就是開發網站的&#xff0c;例如網站&#xff1a;淘寶&#xff0c;京東等等 2. 網站的工作流程 1.首先我們需…

sparse transformer 常見稀疏注意力

參考&#xff1a; https://zhuanlan.zhihu.com/p/259591644 主要就是降低transformer自注意力模塊的復雜度 復雜度主要就是 Q K^T影響的&#xff0c;稀疏注意力就是在Q點乘K的轉置這模塊做文章 下列式一些sparse transformer稀疏注意力方法 a、transformer原始的 &#xff0…

b站小土堆pytorch學習記錄—— P17 土堆說卷積操作

文章目錄 一、前置知識什么是卷積操作 二、代碼 一、前置知識 什么是卷積操作 推薦幾個高贊博客&#xff1a; 卷積最容易理解的解釋 卷積神經網絡&#xff08;CNN&#xff09;詳細介紹及其原理詳解 還有pytorch官網的動態圖&#xff1a; pytorch卷積 二、代碼 import t…

MyBatis源碼分析之基礎支持層反射

(/≧▽≦)/~┴┴ 嗨~我叫小奧 ??? &#x1f440;&#x1f440;&#x1f440; 個人博客&#xff1a;小奧的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;個人CSDN ??????&#xff1a;傳送門 &#x1f379; 本人24應屆生一枚&#xff0c;技術和水平有限&am…

PowerShell禁止運行腳本解決方案

錯誤代碼 CategoryInfo : SecurityError: (:) []&#xff0c;ParentContainsErrorRecordException FullyQualifiedErrorId : UnauthorizedAccess在計算機上啟動 Windows PowerShell 時&#xff0c;執行策略很可能是 Restricted&#xff08;默認設置&#xff09;。 Restricted …