【教3妹學編程-算法題】標記所有下標的最早秒數 II

瑟瑟發抖

3妹:2哥2哥,你有沒有看到上海女老師出軌男學生的瓜啊。
2哥 : 看到 了,真的是太毀三觀了!
3妹:是啊, 老師本是教書育人的職業,明確規定不能和學生談戀愛啊,更何況是出軌。
2哥 : 是啊,更何況男生才16,年齡也不匹配啊。
3妹:2哥高中時有早戀嗎,2哥最早談戀愛是什么時候鴨?
2哥:切,又拿我單身狗開玩笑了。
3妹:說到最早,我今天看到一個關于“最早”的題目,讓我們一起來做下吧~

吃瓜

題目:

給你兩個下標從 1 開始的整數數組 nums 和 changeIndices ,數組的長度分別為 n 和 m 。

一開始,nums 中所有下標都是未標記的,你的任務是標記 nums 中 所有 下標。

從第 1 秒到第 m 秒(包括 第 m 秒),對于每一秒 s ,你可以執行以下操作 之一 :

選擇范圍 [1, n] 中的一個下標 i ,并且將 nums[i] 減少 1 。
將 nums[changeIndices[s]] 設置成任意的 非負 整數。
選擇范圍 [1, n] 中的一個下標 i , 滿足 nums[i] 等于 0, 并 標記 下標 i 。
什么也不做。
請你返回范圍 [1, m] 中的一個整數,表示最優操作下,標記 nums 中 所有 下標的 最早秒數 ,如果無法標記所有下標,返回 -1 。

示例 1:

輸入:nums = [3,2,3], changeIndices = [1,3,2,2,2,2,3]
輸出:6
解釋:這個例子中,我們總共有 7 秒。按照以下操作標記所有下標:
第 1 秒:將 nums[changeIndices[1]] 變為 0 。nums 變為 [0,2,3] 。
第 2 秒:將 nums[changeIndices[2]] 變為 0 。nums 變為 [0,2,0] 。
第 3 秒:將 nums[changeIndices[3]] 變為 0 。nums 變為 [0,0,0] 。
第 4 秒:標記下標 1 ,因為 nums[1] 等于 0 。
第 5 秒:標記下標 2 ,因為 nums[2] 等于 0 。
第 6 秒:標記下標 3 ,因為 nums[3] 等于 0 。
現在所有下標已被標記。
最早可以在第 6 秒標記所有下標。
所以答案是 6 。
示例 2:

輸入:nums = [0,0,1,2], changeIndices = [1,2,1,2,1,2,1,2]
輸出:7
解釋:這個例子中,我們總共有 8 秒。按照以下操作標記所有下標:
第 1 秒:標記下標 1 ,因為 nums[1] 等于 0 。
第 2 秒:標記下標 2 ,因為 nums[2] 等于 0 。
第 3 秒:將 nums[4] 減少 1 。nums 變為 [0,0,1,1] 。
第 4 秒:將 nums[4] 減少 1 。nums 變為 [0,0,1,0] 。
第 5 秒:將 nums[3] 減少 1 。nums 變為 [0,0,0,0] 。
第 6 秒:標記下標 3 ,因為 nums[3] 等于 0 。
第 7 秒:標記下標 4 ,因為 nums[4] 等于 0 。
現在所有下標已被標記。
最早可以在第 7 秒標記所有下標。
所以答案是 7 。
示例 3:

輸入:nums = [1,2,3], changeIndices = [1,2,3]
輸出:-1
解釋:這個例子中,無法標記所有下標,因為我們沒有足夠的秒數。
所以答案是 -1 。

提示:

1 <= n == nums.length <= 5000
0 <= nums[i] <= 10^9
1 <= m == changeIndices.length <= 5000
1 <= changeIndices[i] <= n

思路:

思考

題意是:
你可以在任意一天完成一門課程的考試(前提是復習完成)。考試這一天不能復習。
搞定所有課程的復習+考試,至少要多少天?

提示 1
答案越大,越能夠搞定所有課程,反之越不能。

有單調性,可以二分答案。

提示 2
如果決定在第 i 天快速復習第 changeIndices[i]門課程,那么在第 i天前慢速復習這門課程是沒有意義的。同理,如果決定慢速復習某門課程,那么也沒必要對這門課程使用快速復習。

java代碼:


class Solution {public int earliestSecondToMarkIndices(int[] nums, int[] changeIndices) {int n = nums.length;int m = changeIndices.length;if (n > m) {return -1;}long slow = n; // 慢速復習+考試所需天數for (int v : nums) {slow += v;}int[] firstT = new int[n];Arrays.fill(firstT, -1);for (int t = m - 1; t >= 0; t--) {firstT[changeIndices[t] - 1] = t;}PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> a - b);int left = n - 1, right = m + 1;while (left + 1 < right) {pq.clear();int mid = (left + right) / 2;if (check(nums, changeIndices, firstT, pq, slow, mid)) {right = mid;} else {left = mid;}}return right > m ? -1 : right;}private boolean check(int[] nums, int[] changeIndices, int[] firstT, PriorityQueue<Integer> pq, long slow, int mx) {int cnt = 0;for (int t = mx - 1; t >= 0; t--) {int i = changeIndices[t] - 1;int v = nums[i];if (v <= 1 || t != firstT[i]) {cnt++; // 留給左邊,用來快速復習/考試continue;}if (cnt == 0) {if (pq.isEmpty() || v <= pq.peek()) {cnt++; // 留給左邊,用來快速復習/考試continue;}slow += pq.poll() + 1;cnt += 2; // 反悔:一天快速復習,一天考試}slow -= v + 1;cnt--; // 快速復習,然后消耗一天來考試pq.offer(v);}return cnt >= slow; // 剩余天數不能慢速復習+考試}
}

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

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

相關文章

shell 免交互ecxept樣例

語法 expect [選項] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 選項 -c&#xff1a;從命令行執行expect腳本&#xff0c;默認expect是交互地執行的 示例&#xff1a;expect -c expect "\n" {send "pressed enter\n"} -d&#xff1a;輸出調試信息 …

【Qt學習】QTextEdit 與 QComboBox 的 屬性與實例(槽函數的使用、讀取本機內容到控件)

文章目錄 1. QTextEdit2.1 介紹2.2 實例使用 - 槽函數的使用 2. QComboBox2.1 介紹2.2 實例使用案例1&#xff1a;設置下拉框項目組件的方式案例2&#xff1a;讀取本機文件內容 到QComboBox 1. QTextEdit 2.1 介紹 我們可以查閱官方文檔&#xff0c;對QTextEdit 有更深的了解&…

源碼安裝nginx保姆級教程

一.目錄存放 1./usr/lib/syste,md/system/:每個服務最主要的啟動腳本設定 2. /run/systemd/system/&#xff1a;系統執行過程中所產生的服務腳本&#xff0c;這些腳本的優先序要比 /usr/lib/systemd/system/ 高&#xff01; 3./etc/systemd/system/&#xff1a;管…

【java 基礎】閑話 ClassLoader 和 SPI (一)

文章目錄 引子雙親委派模型你真的明白了嗎&#xff1f; 雙親委派“不夠用了”SPI機制 其他瑣碎 引子 有別于 java 提供的 IO 模塊&#xff0c;java 中的classloader主要是用來加載類的&#xff0c;當然除了加載類&#xff0c;也可以加載資源文件。 那么首先我們會問一個問題&…

java基礎 - 14 Java的Deque之Deque、BlockingDeque、LinkedBlockingDeque、ArrayDeque

Java 中的 Deque&#xff08;雙端隊列&#xff09;是一種具有隊列和棧特性的數據結構&#xff0c;它允許在兩端進行插入和刪除操作。Deque 接口是 Java 集合框架中的一部分&#xff0c;它定義了雙端隊列的基本操作。 BlockingDeque 接口&#xff1a; BlockingDeque 接口是 Deq…

docker搭建git服務器

1、docker搭建git服務器 總體思路&#xff1a;服務端通過docker搭建git服務器&#xff0c;客戶端創建git的賬戶及公鑰密鑰&#xff1b; 1&#xff09;服務端# 創建容器 # --privileged 獲得完整的root權限 # /usr/sbin/init 啟動容器執行的第一個命令 以便可以使用systemctl命…

2024年FPGA可以進嗎

2024年&#xff0c;IC設計FPGA行業仍有可能是一個極具吸引力和活力的行業&#xff0c;主要原因包括&#xff1a; 1. 技術發展趨勢&#xff1a;隨著5G、人工智能、物聯網、自動駕駛、云計算等高新技術的快速發展和廣泛應用&#xff0c;對集成電路尤其是高性能、低功耗、定制化芯…

【UE 材質】制作加載圖案(2)

在上一篇&#xff08;【UE 材質】制作加載圖案&#xff09;基礎上繼續實現如下效果的加載圖案 效果 步驟 1. 復制一份上一篇制作的材質并打開 2. 添加“Floor”節點向下取整 除相同的平鋪數 此時的效果如下 刪除如下節點 通過“Ceil”向上取整&#xff0c;參數“Tiling”默認…

教師招聘和事業編d類有什么區別嗎

每年都有大批懷揣教育夢想的年輕人&#xff0c;站在職業的十字路口&#xff0c;對未來充滿期許與疑惑。他們中的許多人都會面臨這樣一個問題&#xff1a;教師招聘和事業編D類&#xff0c;到底有什么區別&#xff1f;今天&#xff0c;就讓我來為你揭開這兩者的神秘面紗。 別被這…

【大數據】Flink SQL 語法篇(五):Regular Join、Interval Join

《Flink SQL 語法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 語法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 語法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇&#xff08;三&…

ubuntu系統下大數據服務器磁盤調優測試記錄

一、背景 在kvm虛擬機ubuntu操作系統大數據平臺測試的過程中&#xff0c;遭遇了磁盤I/O性能的瓶頸&#xff0c;因有cpu綁核操作&#xff0c;故有做隔核操作驗證是否是綁核影響的磁盤I/O&#xff0c;后又對磁盤進行透傳以及掛內存盤等操作&#xff1b; 二、磁盤介紹 2.1 磁盤…

『NLP學習筆記』圖解 BERT、ELMo和GPT(NLP如何破解遷移學習)

圖解 BERT、ELMo和GPT(NLP如何破解遷移學習) 文章目錄 一. 前言二. 示例-句子分類三. 模型架構3.1. 模型輸入3.2. 模型輸出四. BERT VS卷積神經網絡五. 詞嵌入新時代5.1. 簡要回顧詞嵌入Word Embedding5.2. ELMo: 上下文語境很重要5.2.1. ELMo的秘密是什么?5.3. ULM-FiT:將遷…

藍橋杯Python B組練習——斐波那契數列

一、題目 定義 斐波那契數列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又稱黃金分割數列&#xff0c;因數學家萊昂納多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖為例子而引入&#xff0c;故又稱為“兔子數列”&#xff0c;指的是這樣一個數…

Linux x86平臺獲取sys_call_table

文章目錄 前言一、根據call *sys_call_table來獲取二、使用dump_stack三、根據MSR_LSTAR寄存器四、使用sys_close參考資料 前言 Linux 3.10.0 – x86_64 最簡單獲取sys_call_table符號的方法&#xff1a; # cat /proc/kallsyms | grep sys_call_table ffffffff816beee0 R sy…

隨想錄算法訓練營第四十七天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 public class Solution {public int Rob(int[] nums) {if(nums.Length0){return 0;}if(nums.Length1){return nums[0];}int[] dpnew int[nums.Length1];dp[0]nums[0];dp[1]Math.Max(nums[0],nums[1]);for(int i2;i<nums.Length;i){dp[i]Math.Max(dp[i-2]nums[…

什么是 HTTPS 證書?作用是什么?

HTTPS 證書&#xff0c;即超文本傳輸安全協議證書&#xff08;Hypertext Transfer Protocol Secure&#xff09;&#xff0c;是網站安全的關鍵組成部分。它通過 SSL/TLS 加密協議&#xff0c;確保用戶與網站之間的數據傳輸是加密和安全的。 什么是 HTTPS 證書&#xff1f; HT…

使用Docker -compose啟動自定義jar包

步驟1&#xff1a;編寫docker-compose.yml文件 首先我們需要編寫一個docker-compose.yml文件來定義我們的服務傳到我們的云服務器上 以下是一個示例&#xff1a; version: 3 services:app:build:context: .dockerfile: Dockerfileports:- 8080:8080volumes:- ./app.jar:/app…

可視化圖表:水球圖,展示百分比的神器。

Hi&#xff0c;我是貝格前端工場的老司機&#xff0c;本文分享可視化圖表設計的水球圖設計&#xff0c;歡迎老鐵持續關注我們。 一、水球圖及其作用 水球圖是一種特殊的可視化圖表&#xff0c;它主要用于展示百分比或比例的數據&#xff0c;并以水球的形式進行呈現。水球圖的作…

2023面試題

目錄 題目 1:JVM 整體結構是什么樣的? 8 題目 3:Object 類有哪些方法? 11 題目 4:靜態變量與實例變量區別? 11 題目 5:String 類的常用方法有哪些? 11 題目 6:數組有沒有 length()方法?String 有沒有 length() 12 題目 7:String、StringBuffer、StringBuilder 的區別…

【k8s 訪問控制--認證與鑒權】

1、身份認證與權限 前面我們在操作k8s的所有請求都是通過https的方式進行請求&#xff0c;通過REST協議操作我們的k8s接口&#xff0c;所以在k8s中有一套認證和鑒權的資源。 Kubenetes中提供了良好的多租戶認證管理機制&#xff0c;如RBAC、ServiceAccount還有各種策路等。通…