算法習題-力扣446周賽題解

算法可以調度思維,讓程序員的思維發散,找到更好的解決方案。

第一題:執行指令后的得分

題目:

給你兩個數組:instructionsvalues,數組的長度均為 n。你需要根據以下規則模擬一個過程:

  • 從下標 i = 0 的第一個指令開始,初始得分為 0。

    • 如果 instructions[i]add:將 values[i] 加到你的得分中。移動到下一個指令 (i + 1)
    • 如果instructions[i]jump:移動到下標為 (i + values[i]) 的指令,但不修改你的得分。
  • 當以下任一情況發生時,過程會終止:
    越界(即 i < 0i >= n),或嘗試再次執行已經執行過的指令。被重復訪問的指令不會再次執行。返回過程結束時的得分

思路:

遍歷一遍操作數,如果如果遇到的是add,就將得分加到自己的得分中。如果遇到的是jump,那末就將循環變量自增value-1,減 1 是因為下一次循環會增 1 ,剛好抵消。

代碼實現

class Solution {public long calculateScore(String[] instructions, int[] values) {long ans = 0;for(int i = 0;i >= 0 && i < instructions.length;i++) {if("ok".equals(instructions[i])) break;String op = instructions[i];instructions[i] = "ok";if("add".equals(op)) {ans += values[i];}if("jump".equals(op)) {i += values[i]-1;}}return ans;}
}
第二題:非遞減數組的最大長度

題目:

給你一個整數數組 nums。在一次操作中,你可以選擇一個子數組,并將其替換為一個等于該子數組 最大值 的單個元素。返回經過零次或多次操作后,數組仍為 非遞減 的情況下,數組 可能的最大長度

子數組 是數組中一個連續、非空 的元素序列。

思路:

根據題意,假設遇到數組中的第i項為 a i a_i ai? 那末 a i a_i ai? 后面所有比它小的項都會被替換為 a i a_i ai? ,直到遇到下一個比它大的項,就會開啟下一輪的新的替換。

比如:4 1 2 3 5 1 3,那末,第 1 項后所有比 4 小的數,都會被替換4 ,直到遇到 5 才會開啟下一輪新的替換,因此,樣例的答案為:2 (最后的數組為:[4,5])故,只需要記錄最大的前一項即可。

代碼實現

class Solution {public int maximumPossibleSize(int[] nums) {int ans = 1,t = nums[0];for(int i = 1;i < nums.length;i++)if(t <= nums[i]) {ans ++;t = nums[i];}return ans;}
}
第三題:求出數組的X值 I

題目:

給你一個由 整數組成的數組 nums,以及一個 整數 k。你可以對 nums 執行 一次 操作,該操作中可以移除任意 不重疊 的前綴和后綴,使得 nums 仍然 非空 。你需要找出 numsx 值,即在執行操作后,剩余元素的 乘積 除以 k 后的 余數x 的操作數量。返回一個大小為 k 的數組 result,其中 result[x] 表示對于 0 <= x <= k - 1numsx 值。數組的 前綴 指從數組起始位置開始到數組中任意位置的一段連續子數組。數組的 后綴 是指從數組中任意位置開始到數組末尾的一段連續子數組。

子數組 是數組中一段連續的元素序列。注意,在操作中選擇的前綴和后綴可以是 空的

思路:

題目的意思其實就是找到一個子數組,使得子數組的乘積模k的每種情況的數量。可以設置f[i ,j]表示以第 i結尾的所有模 k 結果為 j 的所有子數組。因此,考慮 f[i-1 , j]項,設f[i,p] 項是f[i-1, j] 項轉移而來的,因此 j 是前i-1項模 k 的結果,故,當包含第 i 項時,

j = ■ % k,此時,算上最后一項,p = (nums_i * ■) % k = (nums_i % k * ■ % k) % k = j * (nums_i % k) % k

因此,轉移方程為:f[i,j * (nums_i % k) % k] += f[i-1, j]

最后,考慮剛開始時,f[i,nums_i % k] = 1 必定有一個。

代碼實現

public class Solution {public long[] resultArray(int[] nums, int k) {long[] ans = new long[k];int[][] f = new int[nums.length+1][k];for(int i = 1;i < f.length;i++) {f[i][nums[i-1] % k] = 1;for(int j = 0;j < k;j++) {f[i][j * (nums[i-1] % k) % k] += f[i-1][j];}}// 最后只需要統計一遍即可for(int i = 1;i < f.length;i++) {for(int j = 0;j < k;j++) {ans[j] += f[i][j];}}return ans;}
}
第四題:求出數組的X值 II

這題對于我現有的情況來說,已經很難了,因此,只能通過80% ~ 90%,搜到的題解有些難以理解,等我后期再理解理解

題目:

給你一個由 整數組成的數組 nums,以及一個 整數 k。你可以對 nums 執行 一次 操作,該操作中可以移除任意 不重疊 的前綴和后綴,使得 nums 仍然 非空 。你需要找出 numsx 值,即在執行操作后,剩余元素的 乘積 除以 k 后的 余數x 的操作數量。返回一個大小為 k 的數組 result,其中 result[x] 表示對于 0 <= x <= k - 1numsx 值。數組的 前綴 指從數組起始位置開始到數組中任意位置的一段連續子數組。數組的 后綴 是指從數組中任意位置開始到數組末尾的一段連續子數組。

子數組 是數組中一段連續的元素序列。注意,在操作中選擇的前綴和后綴可以是 空的

思路:

題目的意思實際就是,每次給一個下標(index) 和 替換的值(value),每次將數組中的下標為 index 的位置替換為 value,之后,給定一個起始下標(start) 和 值(x),找到從 start 開始,直到數組的末尾的所有前綴的乘積模 k 的值為 x 的前綴的個數,因此我直接通過暴力解法沒有全對。

算法實現

class Solution {public int[] resultArray(int[] nums, int k, int[][] queries) {int[] ans = new int[queries.length];for(int i = 0;i < queries.length;i++) {int index = queries[i][0];int value = queries[i][1];int start = queries[i][2];int x = queries[i][3];nums[index] = value;long res = 1;int ans_t = 0;for(int j = start;j < nums.length;j++) {res = res * nums[j] % k;if(res % k == x) ans_t ++;}ans[i] = ans_t;}return ans;}
}

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

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

相關文章

Ubuntu下MySQL的安裝

Ubuntu下MySQL的安裝 1. 查看當前操作系統版本2. 添加MySQL APT源2.1 訪問下載頁面&#xff0c;并下載發布包2.2 執行安裝指令2.3 安裝MySQL 3. 查看MySQL狀態4. 設置開機自啟動 1. 查看當前操作系統版本 通過命令lsb_release -a查看&#xff1a; 2. 添加MySQL APT源 2.1 訪問下…

航順 芯片 開發記錄 (一) 2025年4月27日19:23:32

芯片型號: HK32F030MF4P6 第一步:創建工程目錄 inc :頭文件目錄 MDK-ARM : 工程根目錄 (新建工程選擇該目錄) src :相關資源存放位置 官方函數庫相關內容 官方函數庫大致結構圖 ├─HK32F030MLib ├─CMSIS │ ├─CM0 │ │ └─Core │ │ arm_common_table…

Python 數據可視化進階:精準插入圖表到指定 Excel 工作表

Python 數據可視化進階&#xff1a;精準插入圖表到指定 Excel 工作表 在處理數據的過程中&#xff0c;我們常常需要將生成的圖表精準地插入到已存在數據的 Excel 文件的指定工作表中。借助 Python 的強大庫組合&#xff0c;這一操作得以高效實現。以下是經過優化和注釋補充的代…

集成方案 | Docusign + 甄零科技,賦能企業海外業務高效增長!

本文將詳細介紹 Docusign 與甄零科技的集成步驟及其效果&#xff0c;并通過實際應用場景來展示 Docusign 的強大集成能力&#xff0c;以證明 Docusign 集成功能的高效性和實用性。 甄零科技是一家專注于數字化合同管理系統的 SaaS 解決方案提供商&#xff0c;致力于為企業打造“…

00-算法打卡-目錄

1 數組 01-算法打卡-數組-二分查找-leetcode(704)-第一天-CSDN博客 02-算法打卡-數組-二分查找-leetcode(35)-第二天-CSDN博客 03-算法打卡-數組-二分查找-leetcode(34)-第三天_leetcode 34-CSDN博客 04-算法打卡-數組-二分查找-leetcode(69)-第四天-CSDN博客 05-算法打卡-數組…

劍指Offer(數據結構與算法面試題精講)C++版——day21

劍指Offer&#xff08;數據結構與算法面試題精講&#xff09;C版——day21 題目一&#xff1a;數據流的第k大數字題目二&#xff1a;出現頻率最高的k個數字題目三&#xff1a;和最小的k個數對附錄&#xff1a;源碼gitee倉庫 題目一&#xff1a;數據流的第k大數字 題目&#xff…

NCCL非阻塞non-blocking實現

NCCL (NVIDIA Collective Communications Library) 主要設計用于高性能的集體通信&#xff08;如all-reduce、broadcast等&#xff09;&#xff0c;但其核心函數默認是阻塞式的&#xff08;blocking&#xff09;&#xff0c;即函數返回時操作已完成。不過&#xff0c;你可以通過…

代碼隨想錄算法訓練營第60期第二十天打卡

大家好&#xff0c;今天我們繼續進入二叉樹的章節&#xff0c;二叉樹章節應該已經過半了&#xff0c;大家再堅持一下&#xff0c;那么廢話不多說&#xff0c;我們繼續今天的內容。 第一題對應力扣編號為235的二叉搜索樹的最近公共祖先 其實我們上次任務就接觸過了二叉樹的最近…

8.0 西門子PLC的S7通訊解析

PC與西門子PLC的S7通訊主要有如下幾個步驟: 1. TCP的三次握手(由Socket對象自動完成) 2.發送訪問請求:COTP 3. 交換通訊信息:setup Commnunication 一、發送訪問請求:COTP 比如向PLC請求+以及PLC返回響應的一個實際例子如下: 發送PLC:----> 03 00 00 16 11 E0 …

Nacos-SpringBoot 配置無法自動刷新問題排查

背景 Nacos SpringBoot版本中&#xff0c;提供了NacosValue注解&#xff0c;支持控制臺修改值時&#xff0c;自動刷新&#xff0c;但是今天遇見了無法自動刷新的問題。 環境 SpringBoot 2.2.x nacos-client&#xff1a;2.1.0 nacos-config-spring-boot-starter&#xff1a;0…

JAVA | 聚焦 OutOfMemoryError 異常

個人主頁 文章專欄 在正文開始前&#xff0c;我想多說幾句&#xff0c;也就是吐苦水吧…最近這段時間一直想寫點東西&#xff0c;停下來反思思考一下。 心中萬言&#xff0c;真正執筆時又不知先寫些什么。通常這個時候&#xff0c;我都會隨便寫寫&#xff0c;文風極像散文&…

基于開源技術體系的品牌賽道力重構:AI智能名片與S2B2C商城小程序源碼驅動的品類創新機制研究

摘要&#xff1a;在數字經濟與實體經濟深度融合的背景下&#xff0c;品牌競爭已從單一產品力競爭轉向生態化、技術化的賽道力競爭。本文以開源AI大模型、AI智能名片及S2B2C商城小程序源碼為核心技術載體&#xff0c;構建"技術賦能-場景貫通-生態協同"三維分析框架&am…

【vue3】購物車實戰:從狀態管理到用戶體驗的全流程實現

在電商項目中&#xff0c;購物車是核心功能之一&#xff0c;需要兼顧數據一致性、用戶體驗和邏輯復雜度。 本文結合 Vue3 Pinia 技術棧&#xff0c;詳細講解如何實現一個高效且易用的購物車系統&#xff0c;重點剖析 添加購物車 和 頭部購物車預覽 的核心邏輯與實現細節。 一…

卡洛詩西餐廳,以“中式西餐”為核心戰略

在餐飲市場的激烈競爭中&#xff0c;“本土化”是許多國際餐飲品牌難以跨越的鴻溝——要么因水土不服黯然退場&#xff0c;要么因過度妥協失去特色。然而&#xff0c;卡洛詩以“中式西餐”為核心戰略&#xff0c;將西餐與國內飲食文化深度融合&#xff0c;不僅破解了西餐本土化…

28-29【動手學深度學習】批量歸一化 + ResNet

1. 批量歸一化 1.1 原理 當神經網絡比較深的時候會發現&#xff1a;數據在下面&#xff0c;損失函數在上面&#xff0c;這樣會出現什么問題&#xff1f; 正向傳遞的時候&#xff0c;數據是從下往上一步一步往上傳遞反向傳遞的時候&#xff0c;數據是從上面往下傳遞&#xff0…

【Linux網絡】Http服務優化 - 增加請求后綴、狀態碼描述、重定向、自動跳轉及注冊多功能服務

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

AIGC(生成式AI)試用 32 -- AI做軟件程序測試 3

總結之前的AI做程序測試過程&#xff0c;試圖優化提問方式&#xff0c;整合完成的AI程序測試提問&#xff0c;探索更多可能的AI測試 AIGC&#xff08;生成式AI&#xff09;試用 30 -- AI做軟件程序測試 1 AIGC&#xff08;生成式AI&#xff09;試用 31 -- AI做軟件程序…

C語言實現迪杰斯特拉算法進行路徑規劃

使用C語言實現迪杰斯特拉算法進行路徑規劃 迪杰斯特拉算法是一種用于尋找加權圖中最短路徑的經典算法。它特別適合用于計算從一個起點到其他所有節點的最短路徑&#xff0c;前提是圖中的邊權重為非負數。 一、迪杰斯特拉算法的基本原理 迪杰斯特拉算法的核心思想是“貪心法”…

引領印尼 Web3 變革:Mandala Chain 如何助力 1 億用戶邁向數字未來?

當前 Web3 的發展正處于關鍵轉折點&#xff0c;行業亟需吸引新用戶以推動 Web3 的真正大規模采用。然而&#xff0c;大規模采用面臨著核心挑戰&#xff1a;數據泄露風險、集中存儲的安全漏洞、跨系統互操作性障礙&#xff0c;以及低效的服務訪問等問題。如何才能真正突破這些瓶…

WebSocket是h5定義的,雙向通信,節省資源,更好的及時通信

瀏覽器和服務器之間的通信更便利&#xff0c;比http的輪詢等效率提高很多&#xff0c; WebSocket并不是權限的協議&#xff0c;而是利用http協議來建立連接 websocket必須由瀏覽器發起請求&#xff0c;協議是一個標準的http請求&#xff0c;格式如下 GET ws://example.com:3…