1502. Can Make Arithmetic Progression From Sequence (判斷能否形成等

更新 發佈閱讀 2 分鐘


英文版點我中文版點我


↑看個小廣告,支持好內容↑


從結果來看,如果能組成等差數列,整組數字必定存在公差,使得排序後相鄰兩項的差值相同。


Sorting

所以直觀的解法已經出爐:我們就實地排一次,檢查每兩項的差是否唯一。一旦違反必代表無法滿足條件,複雜度 nlogn+n ≈ nlogn


❷ Set

當然,能不排的話還是盡量避免,另一種思路是從等差數列的兩端著手,在已知最大、最小值和項數後,其實已經能推出等差數列的樣貌了:

// arr=[22,15,7,18,2]

1. 以迴圈找出數列中的最大、最小值 (222)
2. ​數列共有五項,公差應為 (22-2)/(5-1)=5
3. 得到等差數列 [2,7,12,17,22]


倘若每個數字都有出現,就能湊出一個等差數列。我們當然可以依序檢查 arr.indexOf(2)!=-1arr.indexOf(7)!=-1 ...,但每次都要重翻陣列,更好的辦法是轉成集合 (Set)

// 陣列是否有某個數:O(n)
arr.indexOf(x) // 有則回傳 index,否則回傳 -1

// 集合是否有某個數:O(1)
set.has(x) // true/false


參考程式碼:

var canMakeArithmeticProgression = function(arr) {
// 取得最大、最小值及公差
let min=Infinity, max=-Infinity;
for(let i=0; i<arr.length; i++){
min=Math.min(min, arr[i]);
max=Math.max(max, arr[i]);
}
let diff=(max-min)/(arr.length-1);

// 依序檢查每個數是否出現
let set=new Set(arr);
while(min<max){
min+=diff;
if(!set.has(min)){return false};
}
return true;
};



  • 本題分類標籤:ArraySorting
  • 本題正解率=69.9%

❤️ 若內容對你實用,歡迎追蹤本專題,或小額贊助支持~
⭐ 這是我的第 6 篇刷題筆記,完整解題索引看這裡 → Here

留言
avatar-img
留言分享你的想法!
avatar-img
LeetCode King
55會員
59內容數
我要成為 LeetCode 王!快跟我一起踏上旅程!
LeetCode King的其他內容
2024/05/09
在比賽裡這就是大家拚手速的題目了,準備好了嗎?
Thumbnail
2024/05/09
在比賽裡這就是大家拚手速的題目了,準備好了嗎?
Thumbnail
2023/11/19
千萬不要傻傻乘開啦,這題有好幾種優雅的做法~
Thumbnail
2023/11/19
千萬不要傻傻乘開啦,這題有好幾種優雅的做法~
Thumbnail
2023/11/15
索引很好用,但一定要做索引才能解決計數問題嗎?超車對手的機會來了!
Thumbnail
2023/11/15
索引很好用,但一定要做索引才能解決計數問題嗎?超車對手的機會來了!
Thumbnail
看更多
你可能也想看
Thumbnail
十一月底正好要去斯里蘭卡,之前趁雙十一時就把旅行必備東西陸續買齊。 現在我依然在斯里蘭卡的旅行路上,邊當旅人邊推薦旅行好物給你們!(這篇記得收藏起來喔!)
Thumbnail
十一月底正好要去斯里蘭卡,之前趁雙十一時就把旅行必備東西陸續買齊。 現在我依然在斯里蘭卡的旅行路上,邊當旅人邊推薦旅行好物給你們!(這篇記得收藏起來喔!)
Thumbnail
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
Thumbnail
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
Thumbnail
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Thumbnail
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
本文章討論如何使用動態規劃和回頭查看技巧來計算最長遞增子序列的長度,並提供了相關的測試案例和範例。本文還包括了詳細的演算法和程式碼示例,以及時間和空間複雜度的分析。
Thumbnail
本文章討論如何使用動態規劃和回頭查看技巧來計算最長遞增子序列的長度,並提供了相關的測試案例和範例。本文還包括了詳細的演算法和程式碼示例,以及時間和空間複雜度的分析。
Thumbnail
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
Thumbnail
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
Thumbnail
這篇文章,會帶著大家複習以前學過的數列DP框架, 並且以費式數列、爬樓梯、骨牌拚接的應用與遞迴數列概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 數列DP與遞迴數列常見的形式 如果是遞迴數列,常常看到以函數型式表達
Thumbnail
這篇文章,會帶著大家複習以前學過的數列DP框架, 並且以費式數列、爬樓梯、骨牌拚接的應用與遞迴數列概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 數列DP與遞迴數列常見的形式 如果是遞迴數列,常常看到以函數型式表達
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News