Leetcode.2369 檢查數組是否存在有效劃分

題目鏈接

Leetcode.2369 檢查數組是否存在有效劃分 rating : 1780

題目描述

給你一個下標從 0 0 0 開始的整數數組 n u m s nums nums ,你必須將數組劃分為一個或多個 連續 子數組。

如果獲得的這些子數組中每個都能滿足下述條件 之一 ,則可以稱其為數組的一種 有效 劃分:

  1. 子數組 2 2 2 個相等元素組成,例如,子數組 [ 2 , 2 ] [2,2] [2,2]
  2. 子數組 3 3 3 個相等元素組成,例如,子數組 [ 4 , 4 , 4 ] [4,4,4] [4,4,4]
  3. 子數組 3 3 3 個連續遞增元素組成,并且相鄰元素之間的差值為 1 1 1 。例如,子數組 [ 3 , 4 , 5 ] [3,4,5] [3,4,5] ,但是子數組 [ 1 , 3 , 5 ] [1,3,5] [1,3,5] 不符合要求。

如果數組 至少 存在一種有效劃分,返回 true ,否則,返回 false

示例 1:

輸入:nums = [4,4,4,5,6]
輸出:true
解釋:數組可以劃分成子數組 [4,4] 和 [4,5,6] 。
這是一種有效劃分,所以返回 true 。

示例 2:

輸入:nums = [1,1,1,2]
輸出:false
解釋:該數組不存在有效劃分。

提示:
  • 2 ≤ n u m s . l e n g t h ≤ 1 0 5 2 \leq nums.length \leq 10^5 2nums.length105
  • 1 ≤ n u m s [ i ] ≤ 1 0 6 1 \leq nums[i] \leq 10^6 1nums[i]106

解法:dp

我們定義 f ( i ) f(i) f(i) 考慮 n u m s nums nums 中的前 i i i 個數是否存在有效劃分。根據定義, n u m s nums nums n n n 個元素,那么 f ( n ) f(n) f(n) 就是最終要返回的答案。

我們直接考慮前 i i i 個數:

  1. 如果 i ≥ 2 i \geq 2 i2 并且 n u m s [ i ] = n u m s [ i ? 1 ] nums[i] = nums[i - 1] nums[i]=nums[i?1],那么 f [ i ] = f [ i ? 2 ] f[i] = f[i - 2] f[i]=f[i?2]
  2. 如果 i ≥ 3 i \geq 3 i3
  • 如果 n u m s [ i ? 2 ] = n u m s [ i ? 1 ] a n d n u m s [ i ? 1 ] = n u m s [ i ] nums[i-2]=nums[i-1]\ and\ nums[i-1]=nums[i] nums[i?2]=nums[i?1]?and?nums[i?1]=nums[i],那么 f [ i ] = f [ i ? 3 ] f[i] = f[i - 3] f[i]=f[i?3]
  • 如果 n u m s [ i ? 2 ] + 1 = n u m s [ i ? 1 ] a n d n u m s [ i ? 1 ] + 1 = n u m s [ i ] nums[i-2]+1=nums[i-1]\ and\ nums[i-1]+1=nums[i] nums[i?2]+1=nums[i?1]?and?nums[i?1]+1=nums[i],那么 f [ i ] = f [ i ? 3 ] f[i] = f[i - 3] f[i]=f[i?3]

只要上述三種情況有一個為真,那么 f [ i ] f[i] f[i] 就為真!

初始時, f [ 0 ] = t r u e f[0] = true f[0]=true,即沒有元素也是一種有效劃分!

注意: f [ 1 ] f[1] f[1] 表示第一個元素,而 n u m s [ 0 ] nums[0] nums[0] 表示第一個元素。所以關于 n u m s nums nums ,下標都要減 1 1 1

最終:

  1. 如果 i ≥ 2 i \geq 2 i2 并且 n u m s [ i ? 1 ] = n u m s [ i ? 2 ] nums[i - 1] = nums[i - 2] nums[i?1]=nums[i?2],那么 f [ i ] = f [ i ? 2 ] f[i] = f[i - 2] f[i]=f[i?2]
  2. 如果 i ≥ 3 i \geq 3 i3
  • 如果 n u m s [ i ? 3 ] = n u m s [ i ? 2 ] a n d n u m s [ i ? 2 ] = n u m s [ i ? 1 ] nums[i-3]=nums[i-2]\ and\ nums[i-2]=nums[i-1] nums[i?3]=nums[i?2]?and?nums[i?2]=nums[i?1],那么 f [ i ] = f [ i ? 3 ] f[i] = f[i - 3] f[i]=f[i?3]
  • 如果 n u m s [ i ? 3 ] + 1 = n u m s [ i ? 2 ] a n d n u m s [ i ? 2 ] + 1 = n u m s [ i ? 1 ] nums[i-3]+1=nums[i-2]\ and\ nums[i-2]+1=nums[i-1] nums[i?3]+1=nums[i?2]?and?nums[i?2]+1=nums[i?1],那么 f [ i ] = f [ i ? 3 ] f[i] = f[i - 3] f[i]=f[i?3]

時間復雜度: O ( n ) O(n) O(n)

C++代碼:

class Solution {
public:bool validPartition(vector<int>& nums) {int n = nums.size();vector<int> f(n + 1);f[0] = 1;for(int i = 2;i <= n;i++){if(nums[i - 1] == nums[i - 2]) f[i] |= f[i - 2];if(i >= 3){if(nums[i - 1] == nums[i - 2] && nums[i - 2] == nums[i - 3]) f[i] |= f[i - 3];if(nums[i - 3] + 1 == nums[i - 2] && nums[i - 2] + 1 == nums[i - 1]) f[i] |= f[i - 3];}}return f[n];}
};

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

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

相關文章

推薦6款SSH遠程連接工具

1、Xshell 介紹&#xff1a; xshell是一個非常強大的安全終端模擬軟件&#xff0c;它支持SSH1, SSH2, 以及Windows平臺的TELNET 協議。Xshell可以在Windows界面下用來訪問遠端不同系統下的服務器&#xff0c;從而比較好的達到遠程控制終端的目的。 業界最強大的SSH客戶機 官…

數據分析-Pandas數據的直方圖探查

數據分析-Pandas數據的直方圖探查 數據分析和處理中&#xff0c;難免會遇到各種數據&#xff0c;那么數據呈現怎樣的規律呢&#xff1f;不管金融數據&#xff0c;風控數據&#xff0c;營銷數據等等&#xff0c;莫不如此。如何通過圖示展示數據的規律&#xff1f; 數據表&…

農產品質量追溯系統—功能介紹(2)

儲藏管理 儲藏信息管理對需要儲藏的農產品,記錄儲藏的相關信息,如儲藏開始時間、存放倉庫、操作人員、儲藏原因等; 倉庫信息管理物流管理 物流公司管理對相關的物流公司信息進行登記,以便于管理和追溯; 車輛管理

我的秋招數據分析崗面經分享(京東,美團,阿里,拼多多,vivo,滴滴)

節前&#xff0c;我們社群組織了一場技術&面試討論會&#xff0c;邀請了一些互聯網大廠同學、參加社招和校招面試的同學&#xff0c;針對新手如何入門數據分析、機器學習算法、該如何備戰面試、面試常考點分享等熱門話題進行了深入的討論。 基于社群的討論&#xff0c;今天…

力扣爆刷第84天之hot100五連刷6-10

力扣爆刷第84天之hot100五連刷6-10 文章目錄 力扣爆刷第84天之hot100五連刷6-10一、15. 三數之和二、42. 接雨水三、3. 無重復字符的最長子串四、438. 找到字符串中所有字母異位詞五、560. 和為 K 的子數組 一、15. 三數之和 題目鏈接&#xff1a;https://leetcode.cn/problem…

JAVA學習筆記13(位運算)

1.位運算 1.1 原碼、反碼、補碼 ? *規則&#xff1a; ? 1.二進制的最高位是符號位&#xff1a;0表示正數&#xff0c;1表示負數 ? 2.正數的原碼&#xff0c;反碼&#xff0c;補碼都一樣&#xff08;三碼合一&#xff09; ? 3.負數的反碼 他的原碼符號位不變&#xff…

從metashape導出深度圖,從深度圖恢復密集點云

從metashape導出深度圖&#xff0c;從深度圖恢復密集點云 1.從metashape導出深度圖 參考&#xff1a;https://blog.csdn.net/WHU_StudentZhong/article/details/123107072?spm1001.2014.3001.5502 2.從深度圖建立密集點云 首先從metashape導出blockExchange格式的xml文件&…

OpenHarmony、HarmonyOS打開編輯 PDF 等操作的三方組件使用教程

項目場景: 隨著數字化時代的發展,PDF 文檔成為廣泛應用于各行業的重要文件格式。為了提高OpenHarmony/HarmonyOS生態系統的功能性和用戶體驗,我們需要一款支持打開、編輯PDF文件的應用程序。 使用戶能夠輕松打開、瀏覽和編輯PDF文件。該應用將充分利用OpenHarmony/HarmonyO…

【NTN 衛星通信】衛星和無人機配合的應用場景

1 場景概述 衛星接入網是一種有潛力的技術&#xff0c;可以為地面覆蓋差地區的用戶提供無處不在的網絡服務。然而&#xff0c;衛星覆蓋范圍對于位于考古或采礦地點內部/被茂密森林覆蓋的村莊/山谷/靠近山丘或大型建筑物的用戶可能很稀疏。因此&#xff0c;涉及衛星接入和無人駕…

HarmonyOS Full SDK的安裝

OpenHarmony的應用開發工具HUAWEI DevEco Studio現在隨著OpenHarmony版本發布而發布,只能在版本發布說明中下載,例如最新版本的OpenHarmony 4.0 Release。對應的需要下載DevEco Studio 4.0 Release,如下圖。 圖片 下載Full SDK主要有兩種方式,一種是通過DevEco Studio下載…

教你用Fiddler捕獲HTTPS請求

安裝Fiddler 這里不特別說明了&#xff0c;網上搜索一大把&#xff0c;根據安裝引導一步步安裝即可。&#xff08;這里采用的是fiddler v4.6&#xff09; 配置Fiddler 1、打開fiddler配置Tools –>Telerik Fiddler Options。 2、打開HTTPS配置項&#xff0c;勾選“Captur…

【程序員養生延壽系列-萬人關注的養生指南 4 】

1.早起一杯溫水&#xff0c;疏通腸胃&#xff0c;補充水分。 2.早十點和下午三點左右活動活動身體&#xff08;運動or健身&#xff09;&#xff0c;放松緊張疲憊的身體&#xff0c;幫助消化&#xff0c;給身體透個氣。 3.每天散步&#xff0c;好處多多&#xff08;減肥健身&a…

ctf_show筆記篇(web入門---爆破)

爆破 21&#xff1a;直接bp抓包跑字典&#xff0c;需base64加密 22&#xff1a;可用工具跑也可用瀏覽器找還可以用網上做好的域名查找去找 23&#xff1a;此題需跑腳本已經附上自寫腳本 最后跑出來六個答案一個一個嘗試得到答案為3j import hashlibm "0123456789qwert…

C++_AVL樹

目錄 1、AVL的概念 2、平衡因子的調整概念 3、AVL樹的插入 3.1 調整平衡因子代碼實現 3.2 右旋操作 3.2 左旋操作 3.3 雙旋-先右旋再左旋 3.4 雙旋-先左旋再右旋 3.5 旋轉操作的小結 4、AVL的驗證與實現 結語 前言&#xff1a; 在C中&#xff0c;AVL樹是在二叉搜索…

2024中國眼博會,山東省眼科醫學技術交流大會

以展帶會&#xff0c;以會促展&#xff0c;展與會有機結合&#xff0c;立足山東打造具全國影響力的眼康產業發展盛會&#xff1b; ——隨著時代的高速發展&#xff0c;科技的進步&#xff0c;現代生活節奏的加快&#xff0c;青少年近視問題日益嚴重&#xff0c;對兒童青少年的…

舊的Spring Security OAuth已停止維護,全面擁抱新解決方案Spring SAS

Spring Authorization Server 替換 Shiro 指引 背景 Spring 團隊正式宣布 Spring Security OAuth 停止維護&#xff0c;該項目將不會再進行任何的迭代 目前 Spring 生態中的 OAuth2 授權服務器是 Spring Authorization Server 已經可以正式生產使用作為 SpringBoot 3.0 的最新…

如何使用naive 做一個模態框的方式

1.我的問題使用了一個table 表格&#xff0c;在表格中設置倆個按鈕 最后做出來的效果 <template><div><h1>測試文件</h1><!-- 表格 --><n-data-table :columns"columns" :data"data" :pagination"pagination" …

Linux內核隊列queue.h

文章目錄 一、簡介二、SLIST單向無尾鏈表2.1 介紹2.2 操作2.3 例子 三、STAILQ單向有尾鏈表四、LIST雙向無尾鏈表五、TAILQ雙向有尾鏈表六、CIRCLEQ循環鏈表七、queue源碼參考 一、簡介 queue.h是一個非常經典的文件&#xff0c;定義了一系列宏的操作&#xff0c;它定義了一系…

筆記72:關于IMU(慣性測量單元)傳感器的作用【不涉及公式推導】

一、IMU傳感器是什么&#xff1a; 慣性測量單元IMU&#xff08;Inertial Measurement Unit&#xff09;是一種使用【加速度計】和【陀螺儀】來測量【物體三軸姿態角&#xff08;空間姿態&#xff09;】的裝置&#xff1b;IMU在坐標系的每個坐標軸上&#xff0c;均安裝有1個陀螺…

90-子集2(回溯算法)

題目 給你一個整數數組 nums &#xff0c;其中可能包含重復元素&#xff0c;請你返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。返回的解集中&#xff0c;子集可以按 任意順序 排列。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,2] …