Re: [閒聊] 每日leetcode已回收
402. Remove K Digits
有一個array nums,裡面的元素都是非負數
現在要移除k個元素
請回傳再移除k個元素後最小的值
思路:
用一個stack儲存元素
當遇到nums[i]比目前stack最後的元素還小的時候
就把stack[len(stack)-1]Pop出來
一直重複這個動作,直到stack最後一個元素比nums[i]還小或是已經POP出k個元素
接著把nums[i] push到stack
就這樣掃過一次nums
接著如果還沒pop出k個元素就從stack的尾端繼續pop出來
記得要把stack前面的0給刪掉
golang code:
func removeKdigits(num string, k int) string {
stack := []byte{}
idx:=0
for idx<len(num){
for len(stack)>0 && num[idx]<stack[len(stack)-1] && k>0{
stack=stack[:len(stack)-1]
k--
}
stack=append(stack,num[idx])
idx++
}
for k>0 && len(stack)>0{
stack=stack[:len(stack)-1]
k--
}
for len(stack)>1 && stack[0]=='0'{
stack=stack[1:]
}
if len(stack)==0{
return "0"
}
return string(stack)
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.122.247 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1712833549.A.727.html
推
04/11 19:08,
1年前
, 1F
04/11 19:08, 1F
推
04/11 19:35,
1年前
, 2F
04/11 19:35, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 110 之 1548 篇):