【算法專題】模擬算法題

? 模擬算法題往往不涉及復雜的數據結構或算法,而是側重于對特定情景的代碼實現,關鍵在于理解題目所描述的情境,并能夠將其轉化為代碼邏輯。所以我們在處理這種類型的題目時,最好要現在演草紙上把情況理清楚,再動手編寫代碼

1. Z字形變換

6. Z 字形變換 - 力扣(LeetCode)

????????對這道題,最容易想到的肯定是創建一個二維數組,像題目描述的那樣,以Z字形填充數組,然后再遍歷一遍數組,得到結果序列。然而這種做法比較復雜,而且時空復雜度都是比較高的,所以我們便來試著優化一下,找到更優秀的解法。一般而言,模擬題的優化往往都是根據找到的規律來編寫代碼,這道題也不例外。

????????由于題目最后僅要求我們寫出經過Z字形變換后得到的序列,所以我們其實是不需要真的創建數組的,只要能找到每一行的變換規律,編寫代碼,把每一行都加到要返回的字符串中就行了。

????????為了方便畫圖,我們畫的是要填入的字符串的下標,通過下圖我們可以發現,圖形中的第0行和最后一行填入的數規律是差不多的,假設公差為d,

則第0行:0,d,2d,……

最后一行:n-1,n-1+d,n-1+2d,……

? ? ? ? 對于第一行和最后一行,用簡單的數列知識就能得出d為2*n-2,至于中間的n-2行,看起來似乎有些復雜,但我們根本就沒必要理會填入的元素在二維數組中的位置,只要知道它們的值就行了,所以注意觀察數值規律,不難發現每一行的元素實際上可以被劃分為兩個數列的元素:

那么,現在我們已經可以找到了每一行的元素的規律,代碼實現也就壓根不需要二維數組了,希望大家看到這里,可以嘗試根據算法原理,自行編寫一下代碼,然后再來看答案。

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

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

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

相關文章

FreeRTOS——隊列集

一、隊列集 一個隊列只允許任務間傳遞的消息為 同一種數據類型 &#xff0c;如果需要在任務間 傳遞不同數據類型的消息 時&#xff0c;那么就可以使用隊列集 作用&#xff1a;用于對多個隊列或信號量進行“監聽”&#xff08;接收或獲取&#xff09;&#xff0c;其中 不管哪一…

js 使用 lodash-es 檢測某個值是否是函數

import { isFunction } from lodash-eslet isA isFunction(() > {}) console.log(isA) //true https://www.lodashjs.com/docs/lodash.isFunction#_isfunctionvalue https://lodash.com/docs/4.17.15#isFunction 人工智能學習網站 https://chat.xutongbao.top

Spring框架配置進階_自動裝配(XML和注解)

Spring配置進階 Spring 容器提供配置元數據有三種方式 XML配置文件。基于注解的配置。基于java的配置。 一、自動裝配 應用程序上下文為你找出依賴項的過程,Spring會在上下文中自動查找&#xff0c;并自動給bean裝配與其關聯的屬性 Spring中實現自動裝配的方式有兩種: XML文…

26-ARM常用匯編指令

匯編格式&#xff1a; label&#xff1a;instruction comment label&#xff1a;標號instruction&#xff1a;具體匯編指令comment&#xff1a;注釋內容 常用段名&#xff1a; .text&#xff1a;代碼段.data&#xff1a;初始化的數據段.bss&#xff1a;未初始化的數據段.ro…

Spring Boot+Vue項目從零入手

Spring BootVue項目從零入手 一、前期準備 在搭建spring bootvue項目前&#xff0c;我們首先要準備好開發環境&#xff0c;所需相關環境和軟件如下&#xff1a; 1、node.js 檢測安裝成功的方法&#xff1a;node -v 2、vue 檢測安裝成功的方法&#xff1a;vue -V 3、Visu…

JSP WEB開發(一) JSP語言基礎

目錄 JSP JSP簡介&#xff1a; JSP頁面 JSP運行原理 JSP腳本元素 JAVA程序片 局部變量 全局變量和方法的聲明 全局變量 方法的聲明 程序片執行特點 synchronized關鍵字 表達式 JSP指令標記 page指令 include指令 JSP動作標記 JSP動作元素include和include指令的…

Docker在人工智能領域的應用與實戰

摘要 人工智能&#xff08;AI&#xff09;技術的快速發展帶來了對高效開發和部署工具的需求。Docker作為一個創新的容器化平臺&#xff0c;為AI領域提供了強大的支持。本文詳細介紹了Docker在AI模型開發、訓練、部署以及服務器集群管理等方面的應用&#xff0c;并探討了其在數…

AcWing 1550:完全二叉搜索樹

【題目來源】https://www.acwing.com/problem/content/1552/【題目描述】二叉搜索樹 (BST) 遞歸定義為具有以下屬性的二叉樹&#xff1a; &#xff08;1&#xff09;若它的左子樹不空&#xff0c;則左子樹上所有結點的值均小于它的根結點的值 &#xff08;2&#xff09;若它的右…

大數據平臺之數據同步

數據同步也成為CDC (Chanage Data Capture) 。Change Data Capture (CDC) 是一種用于跟蹤和捕獲數據庫中數據變更的技術&#xff0c;它可以在數據發生變化時實時地將這些變更捕獲并傳遞到下游系統。以下是一些常用的開源 CDC 方案&#xff1a; 1. Flink CDC Flink CDC 是基于 …

快速上手LangChain:構建強大的語言模型應用

引言 在人工智能和自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;構建高效且強大的語言模型應用變得越來越重要。LangChain 是一個專為開發者設計的框架&#xff0c;它簡化了語言模型應用的構建流程。本文將詳細介紹LangChain的功能和使用方法&#xff0c;幫助讀者…

76 4G模組 境外撥號入網注意

1 引言 最近朋友把國內的設備拿到新加坡了&#xff0c;然后發現原本國內可以使用的設備無法在異國他鄉聯網&#xff0c;所以就叫我來看看&#xff0c;發現是附網返回狀態、入網APN發生了改變導致的。另外&#xff0c;如果在境外使用國產4G模組撥號入網&#xff0c;也需要關注4G…

Windows安裝超好用的截圖工具——Snipaste

1、下載 官網&#xff1a;https://zh.snipaste.com/ 2、安裝 &#xff08;1&#xff09;解壓下載的壓縮包 &#xff08;2&#xff09;選中Snipaste.exe文件&#xff0c;右鍵發送到 -- > 桌面快捷方式 &#xff08;3&#xff09;雙擊桌面Snipaste圖標&#xff0c;桌面右下…

linux 服務器數據備份 和 mysql 數據遷移

查看域名ip 查看程序所處文件位置 list open files 1、 lsof -i :port 查看端口獲取進程 pid 2、lsof -i pid 1、scp 下載服務器文件到本地 security copy protocol 2、導出服務器 mysql 數據庫&#xff08;表&#xff09;到本地 mysqldump是MySQL自帶的一個實用程序&…

解析Java中1000個常用類:Date類,你學會了嗎?

在線工具站 推薦一個程序員在線工具站:程序員常用工具(http://cxytools.com),有時間戳、JSON格式化、文本對比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序員資料站 推薦一個程序員編程資料站:程序員的成長之路(http://cxyroad.com),收錄了一些列的技術教程…

Git 完整的提交規范教程

約定式提交規范 本文中的關鍵詞 “必須&#xff08;MUST&#xff09;”、“禁止&#xff08;MUST NOT&#xff09;”、“必要&#xff08;REQUIRED&#xff09;”、“應當&#xff08;SHALL&#xff09;”、“不應當&#xff08;SHALL NOT&#xff09;”、“應該&#xff08;S…

云計算【第一階段(24)】Linux文件系統與日志分析

一、文件與存儲系統的inode與block 1.1、硬盤存儲 最小存儲單位&#xff1a;扇區(sector) 每個扇區大小&#xff1a;512字節 1.2、文件存取 最小存取單位&#xff1a;塊(block)連續八個扇區組成&#xff1a;塊(block) 每個塊大小&#xff1a;4K文件數據&#xff1a;實際數據…

Leetcode1115 交替打印 FooBar及其測試

題目描述 相關標簽 相關企業 給你一個類&#xff1a; class FooBar { public void foo() { for (int i 0; i < n; i) { print(“foo”); } } public void bar() { for (int i 0; i < n; i) { print(“bar”); } } } 兩個不同的線程將會共用一個 FooBar 實例&#xf…

Java面試八股之如何提高MySQL的insert性能

如何提高MySQL的insert性能 提高MySQL的INSERT性能可以通過多種策略實現&#xff0c;以下是一些常見的優化技巧&#xff1a; 批量插入&#xff1a; 而不是逐條插入&#xff0c;可以使用單個INSERT語句插入多行數據。例如&#xff1a; INSERT INTO table_name (col1, col2) V…

正則表達式-使用筆記

正則表達式使用不當&#xff0c;會導致CPU飆升&#xff1b; 二、相關參考 正則表達式 – 語法 | 菜鳥教程 sparksql 正則匹配總結 三、回溯原理 導致性能下降最主要原因&#xff1a; .* 會導致大量回溯| 分支操作 https://zhuanlan.zhihu.com/p/27417442 四、常用工具 regex…

OpenSNN推文:科技前沿動態速覽:六七月份的技術革新與行業進展

隨著夏季的到來&#xff0c;科技界的熱度也如同氣溫一般持續攀升。在這個充滿活力的季節里&#xff0c;從量子計算的深邃世界到腦機接口的未來探索&#xff0c;從人工智能的智慧躍升到大數據的海洋遨游&#xff0c;再到運營策略的精妙布局和設計領域的創新火花&#xff0c;以及…