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
54會員
59內容數
我要成為 LeetCode 王!快跟我一起踏上旅程!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
LeetCode King 的其他內容
% 這個符號在 SQL 能做什麼,你都記得嗎?
班上闖來了一個陌生人!該如何快狠準揪出他?這道經典考題的解法,遠比你想的還要多種 ......
文字處理 101!把輸入內容做小寫轉換是很常見的應用唷~
動一步要花錢,動兩步卻免費,這其中藏了什麼詐?聰明的你想到了嗎?
環狀的公車路線圖,題目讀懂後會發現是個腦筋急轉彎!XD
% 這個符號在 SQL 能做什麼,你都記得嗎?
班上闖來了一個陌生人!該如何快狠準揪出他?這道經典考題的解法,遠比你想的還要多種 ......
文字處理 101!把輸入內容做小寫轉換是很常見的應用唷~
動一步要花錢,動兩步卻免費,這其中藏了什麼詐?聰明的你想到了嗎?
環狀的公車路線圖,題目讀懂後會發現是個腦筋急轉彎!XD
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
題目敘述 Find K-th Smallest Pair Distance 給定一個輸入陣列nums和 參數k。 請找出第k小的pair distance是多少? pair distance定義為 abs( nums[i] - nums[j]), i 不等於j 也就是任意兩陣列元素差值的絕對值
Thumbnail
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
Continuous Subarray Sum 給定一個整數陣列,請問是否存在一段區間和能夠整除k的連續區間,而且區間長度≥2? 如果存在,返回True。 無果無解,返回False。 例如[2,5,3,1,8,6], k = 6, 其中[3,1,8]是區間和能夠整除6的連續區間,而且區間長度≥2
Thumbnail
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
Thumbnail
高中數學主題練習—求等差數列某項與等差級數
Thumbnail
題目敘述 題目會給定我們一個輸入陣列nums,要求我們掃描美個陣列元素nums[i],計算除了nums[i]以外的陣列元素連乘積。 題目的原文敘述 測試範例 Example 1: Input: nums = [1,2,3,4] Output: [24,12,8,6] nums[0] 以
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
題目敘述 題目會給兩個陣列nums1和nums2。 題目要求我們從中同步選擇長度為k的子序列,並且最大化子序列的分數, 回傳最高的分數值。 分數的定義: 分數 = (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] ,
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
題目敘述 Find K-th Smallest Pair Distance 給定一個輸入陣列nums和 參數k。 請找出第k小的pair distance是多少? pair distance定義為 abs( nums[i] - nums[j]), i 不等於j 也就是任意兩陣列元素差值的絕對值
Thumbnail
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
Continuous Subarray Sum 給定一個整數陣列,請問是否存在一段區間和能夠整除k的連續區間,而且區間長度≥2? 如果存在,返回True。 無果無解,返回False。 例如[2,5,3,1,8,6], k = 6, 其中[3,1,8]是區間和能夠整除6的連續區間,而且區間長度≥2
Thumbnail
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
Thumbnail
高中數學主題練習—求等差數列某項與等差級數
Thumbnail
題目敘述 題目會給定我們一個輸入陣列nums,要求我們掃描美個陣列元素nums[i],計算除了nums[i]以外的陣列元素連乘積。 題目的原文敘述 測試範例 Example 1: Input: nums = [1,2,3,4] Output: [24,12,8,6] nums[0] 以
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
題目敘述 題目會給兩個陣列nums1和nums2。 題目要求我們從中同步選擇長度為k的子序列,並且最大化子序列的分數, 回傳最高的分數值。 分數的定義: 分數 = (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] ,