LeetCode 熱題 100:普通數組

53. 最大子數組和

給你一個整數數組 nums ,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

子數組是數組中的一個連續部分。

示例 1:

輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子數組 [4,-1,2,1] 的和最大,為 6 。

示例 2:

輸入:nums = [1]
輸出:1

示例 3:

輸入:nums = [5,4,-1,7,8]
輸出:23

提示:

  • 1 <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4

**進階:**如果你已經實現復雜度為 O(n) 的解法,嘗試使用更為精妙的 分治法 求解。

int maxSubArray(vector<int>& nums) {int n = nums.size();// i結尾最大子數組和vector<int> dp(n);dp[0] = nums[0];int ans = dp[0];for (int i = 1; i < n; ++i) {dp[i] = max(dp[i - 1] + nums[i], nums[i]);ans = max(ans, dp[i]);}return ans;
}

56. 合并區間

以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間

示例 1:

輸入:intervals = [[1,3],[2,6],[8,10],[15,18]]
輸出:[[1,6],[8,10],[15,18]]
解釋:區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].

示例 2:

輸入:intervals = [[1,4],[4,5]]
輸出:[[1,5]]
解釋:區間 [1,4] 和 [4,5] 可被視為重疊區間。

提示:

  • 1 <= intervals.length <= 10^4
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 10^4
vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end());vector<vector<int>> ans;for (int i = 0; i < intervals.size(); ++i) {int left = intervals[i][0], right = intervals[i][1];if (ans.empty() || ans.back()[1] < left) {ans.push_back({left, right});} else {ans.back()[1] = max(ans.back()[1], right);}}return ans;
}

189. 輪轉數組

給定一個整數數組 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 <= 10^5
  • -2^31 <= nums[i] <= 2^31 - 1
  • 0 <= k <= 10^5
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);
}void reverse(vector<int>& nums, int left, int right) {while (left < right) {swap(nums[left++], nums[right--]);}
}

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

給你一個整數數組 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 <= 10^5
  • -30 <= nums[i] <= 30
  • 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內

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

與這題724. 尋找數組的中心下標類似。分別構建從前往后的乘積數組dp1,以及從后往前的乘積數組dp2,再初始化ans數組即可。

vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> dp1(n + 1);dp1[0] = 1;for (int i = 1; i <= n; ++i)dp1[i] = dp1[i - 1] * nums[i - 1];vector<int> dp2(n + 2);dp2[n + 1] = 1;for (int j = n; j > 0; --j)dp2[j] = dp2[j + 1] * nums[j - 1];vector<int> ans(n);for (int i = 0; i < n; ++i)ans[i] = dp1[i] * dp2[i + 2];return ans;
}

在此基礎上還可以優化空間復雜度,先用ans作為從前往后的乘積數組dp1,sum作為從后往前的乘積和,再從后往前更新ans。

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 sum = 1;for (int i = n - 1; i >= 0; --i) {ans[i] *= sum;sum *= nums[i];}return ans;
}

41. 缺失的第一個正數

給你一個未排序的整數數組 nums ,請你找出其中沒有出現的最小的正整數。

請你實現時間復雜度為 O(n) 并且只使用常數級別額外空間的解決方案。

示例 1:

輸入:nums = [1,2,0]
輸出:3
解釋:范圍 [1,2] 中的數字都在數組中。

示例 2:

輸入:nums = [3,4,-1,1]
輸出:2
解釋:1 在數組中,但 2 沒有。

示例 3:

輸入:nums = [7,8,9,11,12]
輸出:1
解釋:最小的正數 1 沒有出現。

提示:

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

哈希表,時間復雜度O(n),空間復雜度O(n)

int firstMissingPositive(vector<int>& nums) {unordered_set<int> hash;for (int num : nums) {hash.insert(num);}int ans = 1;while (1) {if (!hash.count(ans)) {return ans;}ans++;}return -1;
}

置換,時間復雜度O(n),空間復雜度O(1)

int firstMissingPositive(vector<int>& nums) {int n = nums.size();for (int i = 0; i < n; ++i) {while (nums[i] > 0 && nums[i] <= n && nums[nums[i]-1] != nums[i]) {swap(nums[nums[i] - 1], nums[i]);}}for (int i = 0; i < n; ++i) {if (nums[i] != i + 1) {return i + 1;}}return n + 1;
}

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

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

相關文章

【kafka系列】消費者組

目錄 消費者組功能點 1. 動態負載均衡 2. 容錯高可用 3. 消費進度管理 4. 并行消費能力 5. 消費隔離性 其他要點 1. Rebalance過程詳解 2. 位移提交的精確語義 3. 消費者限速策略 4. 跨機房消費設計 消費者組功能點 1. 動態負載均衡 核心機制&#xff1a;通過Rebal…

黑馬點評day01(基于Redis)

1.7 Redis代替session的業務流程 1.7.1、設計key的結構 首先我們要思考一下利用redis來存儲數據&#xff0c;那么到底使用哪種結構呢&#xff1f;由于存入的數據比較簡單&#xff0c;我們可以考慮使用String&#xff0c;或者是使用哈希&#xff0c;如下圖&#xff0c;如果使用…

Python爬蟲實戰:獲取優美圖庫各類高清圖片,為用戶提供設計素材

一、引言 在互聯網時代,高清壁紙資源豐富多樣,而優美圖庫作為一個提供大量精美壁紙的網站,吸引了眾多用戶。通過 Python 爬蟲技術,可以自動化地從該網站獲取所需的壁紙資源,為用戶節省時間和精力。然而,網站通常會采取反爬措施來防止數據被惡意抓取,因此需要在爬蟲程序…

Go反射-通過反射調用結構體的方法(帶入參)

使用反射前&#xff0c;我們需要提前做好映射配置 papckage_struct_relationship.go package reflectcommonimport (api "template/api" )// 包名到包對象的映射 var structMap map[string]func() interface{}{"template/api": func() interface{} { re…

Git_.gitignore文件簡介及使用

.gitignore 這個文件的作用就是告訴Git哪些文件不需要添加到版本管理中。實際項目中&#xff0c;很多文件都是不需要版本管理的&#xff0c;比如Python的.pyc文件&#xff0c;Git會根據這個文件里配置的這些規則來判斷是否將文件添加到版本控制中。 注意&#xff0c;直接新建文…

HarmonyOS ArkUI安全控件開發指南:粘貼、保存與位置控件的實現與隱私保護實踐

目錄 安全控件1. 粘貼控件1.1 約束與限制1.2 開發步驟 2. 保存控件2.1 約束與限制2.2 開發步驟 3. 位置控件3.1 約束與限制3.2 開發步驟 安全控件 安全控件是系統提供的一組系統實現的ArkUI組件&#xff0c;其中保存控件在用戶首次使用時&#xff0c;會彈出通知彈窗&#xff0…

C++筆記之接口`Interface`

C++筆記之接口Interface code review! 一個簡潔簡短的 C++ 接口實現示例: #include <iostream>// 1. 定義接口(抽象類) class Shape {public:

動態圖表 -- eg1

問題&#xff1a; 前端vue&#xff0c;后端springboot&#xff0c;實現動態表格樣式&#xff0c;&#xff08;表格List<Student>&#xff0c;Student類有年級&#xff0c;班級&#xff0c;文理科分類&#xff0c;姓名&#xff0c;學號&#xff0c;等屬性。先根據年級分類…

C++學習之shell高級和正則表達式

目錄 1.正則表達式 2.C中使用正則 3.復習 4.sort命令 5.uniq命令 6.wc命令 7.grep命令 8.find命令 9.xargs命令 10.sed命令 11.awk命令 12.crontab 1.正則表達式 1 管道 使用| 將多個命令拼接在一起 原理&#xff0c;就是將前一個命令的標準輸出作為后一個…

【Vue】 實現TodoList案例(待辦事項)

目錄 組件化編碼流程&#xff08;通用&#xff09; 1.實現靜態組件&#xff1a;抽取組件&#xff0c;使用組件實現靜態頁面效果 2.展示動態數據&#xff1a; 1. 常規 HTML 屬性 3.交互——從綁定事件監聽開始 什么時候要用 event&#xff1a; 什么時候不需要用 event&am…

【Bootstrap V4系列】學習入門教程之 組件-卡片(Card)

Bootstrap V4系列 學習入門教程之 組件-卡片&#xff08;Card&#xff09; 卡片&#xff08;Card&#xff09;一、Example二、Content types 內容類型2.1 Body 主體2.2 Titles, text, and links 標題、文本和鏈接2.3 Images 圖片2.4 List groups 列表組2.5 Kitchen sink 洗滌槽…

java學習之數據結構:四、樹(代碼補充)

這部分主要是用代碼實現有序二叉樹、樹遍歷、刪除節點 目錄 1.構建有序二叉樹 1.1原理 1.2插入實現 2.廣度優先遍歷--隊列實現 3.深度優先遍歷--遞歸實現 3.1先序遍歷 3.2中序遍歷 3.3后序遍歷 4.刪除 4.1刪除葉子節點 4.2刪除有一棵子樹的節點 4.3刪除有兩棵子樹的節…

架構進階:什么是數據架構,如何理解數據架構?(華為)

數據架構是企業架構的重要組成部分,DAMA、IBM 及國內大廠對其定義各有側重。它包含數據資產目錄、數據標準、數據模型和數據分布四個組件。數據資產目錄可梳理企業數據資產,數據標準統一數據含義和規則,數據模型反映業務對象關聯關系,數據分布呈現數據流動情況。數據架構是…

Unity SpriteEditor(精靈圖片編輯器)

&#x1f3c6; 個人愚見&#xff0c;沒事寫寫筆記 &#x1f3c6;《博客內容》&#xff1a;Unity3D開發內容 &#x1f3c6;&#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f50e;SpriteEditor&#xff1a; 精靈圖片編輯器 &#x1f4cc;用于編輯2D游戲開發中使用的Sp…

【網絡原理】從零開始深入理解HTTP的報文格式(一)

本篇博客給大家帶來的是網絡HTTP協議的知識點, 重點介紹HTTP的報文格式. &#x1f40e;文章專欄: JavaEE初階 &#x1f680;若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動力 . 王子,公主請閱&#x1f68…

ElasticSearch深入解析(九):Object、Nested、Flattened類型

文章目錄 一、Object 類型&#xff1a;默認的嵌套對象處理方式核心原理典型場景關鍵限制 二、Nested 類型&#xff1a;解決嵌套數組的關聯查詢核心原理典型場景使用示例注意事項 三、Join 類型&#xff1a;跨文檔的父子關聯核心原理典型場景使用示例注意事項 四、Flattened 類型…

36、C#中的?法聲明參數關鍵字params,ref,out的意義及?法

在C#中&#xff0c;params、ref 和 out 是方法聲明中用于修飾參數的關鍵字&#xff0c;它們各自有不同的用途和語義。以下是它們的詳細說明和用法&#xff1a; 1、 params 關鍵字 意義 params 允許方法接受可變數量的參數&#xff0c;這些參數會被編譯為一個數組。適用于參數…

【大模型實戰篇】華為信創環境采用vllm部署QwQ-32B模型

1. 背景 本文分享在華為昇騰機器上部署QwQ-32B模型的實踐。 首先華為自己是提供了一套在信創機器&#xff08;NPU&#xff09;上部署模型的方案【1】&#xff0c;但是部署之后&#xff0c;測試發現會有輸出截斷的現象。QwQ-32B本身是支持128k的最大上下文長度&#xff0c;定位…

前端面經-VUE3篇(二)--vue3基礎知識(二)計算屬性(computed)、監聽屬性(Watch)

一、計算屬性(computed) 計算屬性&#xff08;Computed Properties&#xff09;是 Vue 中一種特殊的響應式數據&#xff0c;它能基于已有的響應式數據動態計算出新的數據。 計算屬性有以下特性&#xff1a; 自動緩存&#xff1a;只有當它依賴的響應式數據發生變化時&#xff…

[預備知識] 5. 優化理論(一)

優化理論 梯度下降&#xff08;Gradient Descent&#xff09; 數學原理與可視化 梯度下降是優化領域的基石算法&#xff0c;其核心思想是沿負梯度方向迭代更新參數。數學表達式為&#xff1a; θ t 1 θ t ? α ? θ J ( θ t ) \theta_{t1} \theta_t - \alpha \nabla…