【力扣Hot 100】普通數組2

3. 輪轉數組

給定一個整數數組?nums,將數組中的元素向右輪轉?k?**個位置,其中?k?**是非負數。

示例 1:

輸入: nums = [1,2,3,4,5,6,7], k = 3
輸出:[5,6,7,1,2,3,4]解釋:
向右輪轉 1 步:[7,1,2,3,4,5,6]
向右輪轉 2 步:[6,7,1,2,3,4,5]
向右輪轉 3 步:[5,6,7,1,2,3,4]

示例?2:

輸入:nums = [-1,-100,3,99], k = 2
輸出:[3,99,-1,-100]
解釋:
向右輪轉 1 步: [99,-1,-100,3]
向右輪轉 2 步: [3,99,-1,-100]

提示:

  • 1 <= nums.length <= 105
  • 231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105

題解

使用反轉數組的方法。

別人的解答:

nums = "----->-->"; k =3
result = "-->----->";reverse "----->-->" we can get "<--<-----"
reverse "<--" we can get "--><-----"
reverse "<-----" we can get "-->----->"
this visualization help me figure it out :)

看圖就能理解了。

反轉數組可以定義兩個指針bg, ed,一個指向數組開始,一個指向數組末尾,交換它們直到重合或相交。

class Solution {
public:void reverse(vector<int>& nums, int bg, int ed) {while(bg < ed) {swap(nums[bg], nums[ed]);bg ++;ed --;}}void rotate(vector<int>& nums, int k) {int n = nums.size();k %= n;reverse(nums, 0, n - 1);reverse(nums, 0, k - 1);reverse(nums, k, n - 1);}
};

4. 除自身以外數組的乘積

給你一個整數數組?nums,返回 數組?answer?,其中?answer[i]?等于?nums?中除?nums[i]?之外其余各元素的乘積?。

題目數據?保證?數組?nums之中任意元素的全部前綴元素和后綴的乘積都在??32 位?整數范圍內。

請?**不要使用除法,**且在?O(n)?時間復雜度內完成此題。

示例 1:

輸入: nums =[1,2,3,4]輸出:[24,12,8,6]

示例 2:

輸入: nums = [-1,1,0,-3,3]
輸出: [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 105
  • 30 <= nums[i] <= 30
  • 輸入?保證?數組?answer[i]?在?32 位?整數范圍內

**進階:**你可以在?O(1)?的額外空間復雜度內完成這個題目嗎?( 出于對空間復雜度分析的目的,輸出數組?不被視為?額外空間。)

題解

非常明顯的做法是建立一個前綴積數組,一個后綴積數組。輸出的時候輸出它們的乘積即可。

前綴積數組 f[i],表示以 i - 1 結尾的前綴積

后綴積數組 g[i],表示以 i + 1 結尾的后綴積

那么 f[i + 1] = f[i] * nums[i] , g[i - 1] = g[i] * nums[i]

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> f(n + 1), g(n + 1);f[0] = 1;g[n - 1] = 1;for(int i = 0; i < n; i ++ ) {f[i + 1] = f[i] * nums[i];}for(int i = n - 1; i > 0; i -- ) {g[i - 1] = g[i] * nums[i];}vector<int> ans(n);for(int i = 0; i < n; i ++ ) {ans[i] = f[i] * g[i];}return ans;}
};

由于輸出數組不計入空間復雜度,所以還可以繼續優化。先把輸出數組當作?L?數組來計算,然后再動態構造?R?數組得到結果。

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> ans(n);ans[0] = 1;for(int i = 1; i <= n; i ++ ) {ans[i] = ans[i - 1] * nums[i - 1];}int r = 1;for(int i = n - 1; i >= 0; i --) {ans[i] = ans[i] * r;r *= nums[i];}return ans;}
};

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

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

相關文章

專題三_窮舉vs暴搜vs深搜vs回溯vs剪枝_全排列

dfs解決 全排列&子集 1.全排列 link:46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 全局變量回溯 code class Solution { public:vector<vector<int>> ans;vector<int> cur;vector<bool> used;vector<vector<int>> permute…

2_高并發內存池_各層級的框架設計及ThreadCache(線程緩存)申請內存設計

一、高并發內存池框架設計 高并發池框架設計&#xff0c;特別是針對內存池的設計&#xff0c;需要充分考慮多線程環境下&#xff1a; 性能問題鎖競爭問題內存碎片問題 高并發內存池的整體框架設計旨在提高內存的申請和釋放效率&#xff0c;減少鎖競爭和內存碎片。 高并發內存…

JAVA 使用反射比較對象屬性的變化,記錄修改日志。使用注解【策略模式】,來進行不同屬性枚舉值到中英文描述的切換,支持前端國際化。

1.首先定義一個接口&#xff0c;接口中有兩個方法&#xff0c;分別是將屬性轉換成英文描述和中文描述。 其實就是將數據庫中記錄的 0 1 &#xff0c;轉換成后面的描述 這邊定義了中文轉換為默認方法&#xff0c;是因為有些屬性不需要進行中文轉換&#xff0c;或者該屬性的枚舉…

webrtc入門系列(五)amazon-kinesis-video-streams-webrtc-sdk-c編譯

《webrtc入門系列&#xff08;一&#xff09;easy_webrtc_server 入門環境搭建》 《webrtc入門系列&#xff08;二&#xff09;easy_webrtc_server 入門example測試》 《webrtc入門系列&#xff08;三&#xff09;云服務器coturn環境搭建》 《webrtc入門系列&#xff08;四&…

AIGC大模型詳解(ChatGPT,Cursor,豆包,文心一格)

定義與概念 AIGC&#xff08;AI Generated Content&#xff09;大模型是基于人工智能技術&#xff0c;具有海量參數、強大算力支持&#xff0c;能處理和生成多種類型內容的深度學習模型。可自主學習數據中的模式和規律&#xff0c;生成文本、圖像、音頻等內容&#xff0c;如Ch…

.NET9增強OpenAPI規范,不再內置swagger

ASP.NETCore in .NET 9.0 OpenAPI官方文檔ASP.NET Core API 應用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…

第38周:貓狗識別 (Tensorflow實戰第八周)

目錄 前言 一、前期工作 1.1 設置GPU 1.2 導入數據 輸出 二、數據預處理 2.1 加載數據 2.2 再次檢查數據 2.3 配置數據集 2.4 可視化數據 三、構建VGG-16網絡 3.1 VGG-16網絡介紹 3.2 搭建VGG-16模型 四、編譯 五、訓練模型 六、模型評估 七、預測 總結 前言…

我的2024年年度總結

序言 在前不久&#xff08;應該是上周&#xff09;的博客之星入圍賽中鎩羽而歸了。雖然心中頗為不甘&#xff0c;覺得這一年兢兢業業&#xff0c;每天都在發文章&#xff0c;不應該是這樣的結果&#xff08;連前300名都進不了&#xff09;。但人不能總抱怨&#xff0c;總要向前…

Trimble三維激光掃描-地下公共設施維護的新途徑【滬敖3D】

三維激光掃描技術生成了復雜隧道網絡的高度詳細的三維模型 項目背景 紐約州北部的地下通道網絡已有100年歷史&#xff0c;其中包含供暖系統、電線和其他公用設施&#xff0c;現在已經開始顯露出老化跡象。由于安全原因&#xff0c;第三方的進入受到限制&#xff0c;在沒有現成紙…

QT 中 UDP 的使用

目錄 一、UDP 簡介 二、QT 中 UDP 編程的基本步驟 &#xff08;一&#xff09;包含頭文件 &#xff08;二&#xff09;創建 UDP 套接字對象 &#xff08;三&#xff09;綁定端口 &#xff08;四&#xff09;發送數據 &#xff08;五&#xff09;接收數據 三、完整示例代…

開源鴻蒙開發者社區記錄

lava鴻蒙社區可提問 Laval社區 開源鴻蒙項目 OpenHarmony 開源鴻蒙開發者論壇 OpenHarmony 開源鴻蒙開發者論壇

Git上傳了秘鑰如何徹底修改包括歷史記錄【從安裝到實戰詳細版】

使用 BFG Repo-Cleaner 清除 Git 倉庫中的敏感信息 1. 背景介紹 在使用 Git 進行版本控制時&#xff0c;有時會不小心將敏感信息&#xff08;如 API 密鑰、密碼等&#xff09;提交到倉庫中。即使后續刪除&#xff0c;這些信息仍然存在于 Git 的歷史記錄中。本文將介紹如何使用…

多層 RNN原理以及實現

數學原理 多層 RNN 的核心思想是堆疊多個 RNN 層&#xff0c;每一層的輸出作為下一層的輸入&#xff0c;從而逐層提取更高層次的抽象特征。 1. 單層 RNN 的數學表示 首先&#xff0c;單層 RNN 的計算過程如下。對于一個時間步 t t t&#xff0c;單層 RNN 的隱藏狀態 h t h_t…

RNA 測序技術概覽(RNA-seq)

前言 轉錄組測序&#xff08;RNA-seq&#xff09;是當下最流行的二代測序&#xff08;NGS&#xff09;方法之一&#xff0c;使科研工作者實現在轉錄水平上定量、定性的研究&#xff0c;它的出現已經革命性地改變了人們研究基因表達調控的方式。然而&#xff0c;轉錄組測序&…

C語言練習(16)

猴子吃桃問題。猴子第一天摘下若干個桃子&#xff0c;當即吃了一半&#xff0c;還不過癮&#xff0c;又多吃了一個。第二天早上又將剩下的桃子吃掉一半&#xff0c;又多吃了一個。以后每天早上都吃了前一天剩下的一半加一個。到第10天早上想再吃時&#xff0c;見只剩一個桃子了…

【機器學習】自定義數據集使用框架的線性回歸方法對其進行擬合

一、使用框架的線性回歸方法 1. 基礎原理 在自求導線性回歸中&#xff0c;我們需要先自定義參數&#xff0c;并且需要通過數學公式來對w和b進行求導&#xff0c;然后在反向傳播過程中通過梯度下降的方式來更新參數&#xff0c;從而降低損失值。 2. 實現步驟 ① 散點輸入 有一…

pytest執行報錯:found no collectors

今天在嘗試使用pytest運行用例的時候出現報錯&#xff1a;found no collectors&#xff1b;從兩個方向進行排查&#xff0c;一是看文件名和函數名是不是符合規范&#xff0c;命名要是"test_*"格式&#xff1b;二是是否存在修改文件名的情況&#xff0c;如果修改過文件…

mysql-06.JDBC

目錄 什么是JDBC: 為啥存在JDBC: JDBC工作原理&#xff1a; JDBC的優勢&#xff1a; 下載mysql驅動包&#xff1a; 用java程序操作數據庫 1.創建dataSource: 2.與服務端建立連接 3.構造sql語句 4.執行sql 5.關閉連接&#xff0c;釋放資源 參考代碼&#xff1a; 插…

微信小程序wxs實現UTC轉北京時間

微信小程序實現UTC轉北京時間 打臉一刻&#xff1a;最近在迭代原生微信小程序&#xff0c;好一段時間沒寫原生的&#xff0c;有點不習慣&#xff1b; 咦&#xff0c;更新數據咋不生效呢&#xff1f;原來還停留在 this.xxx&#xff1b; 喲&#xff0c;事件又沒反應了&#xff1f…

機器學習-線性回歸(對于f(x;w)=w^Tx+b理解)

一、&#x1d453;(&#x1d499;;&#x1d498;) &#x1d498;T&#x1d499;的推導 學習線性回歸&#xff0c;我們那先要對于線性回歸的表達公示&#xff0c;有所認識。 我們先假設空間是一組參數化的線性函數&#xff1a; 其中權重向量&#x1d498; ∈ R&#x1d437; …