Re: [閒聊] 每日LeetCode已回收
※ 引述《yam276 (史萊哲林的優等生)》之銘言:
: 2009. Minimum Number of Operations to Make Array Continuous
: 計算把一個陣列變成連續陣列,以及:
: 1. 沒有重複數字
: 2. 最大值減最小值為nums.len() -1
: 所需要的次數
: 題目描述寫得有點爛
: 實際例子可以看:
: nums = [4, 2, 5, 3] 是連續陣列
: nums = [1, 2, 3, 5, 6] 不是連續陣列 要改成 [1, 2, 3, 5, 4]
難得每日會出現hard題目 當天沒看到現在補交作業
first think:
定義一個類別
包含這個數字的最小邊界跟最大邊界還有元素
interface continueArrayData {
min: number
max: number
items: number[]
}
例如nums = [4, 2, 5, 3]
data[0]={
min: 4,
max: 4,
items: []
}
然後把新數字放進去的時候更新max或min確保以後的判斷都在範圍內
每個數字都要對整個陣列做一遍
拿去跑之後 就超時了
O(N^2)
發現時間複雜度是N^2之後
想到如果拿去排序就能共用max跟min
這樣只要跑一次陣列就能直接找到答案
之後卡了一段時間一直找不到為什麼自己測沒問題 丟上去算就錯了
找了很久才發現沒有排除重複元素
弄好之後就好了
function minOperations (nums: number[]): number {
const uniqueNums: number[] = [...new Set(nums)].sort((a, b) => (a - b))
const range = nums.length
let result = nums.length
let minIndex = 0
let maxIndex = 0
for (let index = 0; index < uniqueNums.length; index++) {
const element = uniqueNums[index]
while (uniqueNums[minIndex] <= element - range) minIndex++
while (maxIndex < uniqueNums.length &&
uniqueNums[maxIndex] < element + range) maxIndex++
result = Math.min(nums.length -
Math.max(maxIndex - index, index - minIndex + 1), result)
}
return result
}
寫完之後看了yam大的思路
原來我後面想的做法就是sliding window
--
Zoosewu
Yoututbe顯示PTT推文
可以在各個網站追實況或Live時使用
預覽圖: https://i.imgur.com/ZhtXdAJ.png


完整介紹: https://github.com/zoosewu/PTTChatOnYoutube/tree/master/homepage
支援的網站: Youtube Twitch Holotools Niji-mado Holodex
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.229.33 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1697203294.A.4E7.html
噓
10/13 21:30,
2年前
, 1F
10/13 21:30, 1F
→
10/13 21:30,
2年前
, 2F
10/13 21:30, 2F
→
10/14 00:41,
2年前
, 3F
10/14 00:41, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 447 之 719 篇):