Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-06-16 12:03:03
到底谁会在周日早上刷leetcode
330. Patching Array
有一个由小到大排序的array:nums
以及一个整数n
请问最少要往nums里面插入几个数字
才可以用nums里的元素组合出1~n之间的所有元素?
思路:
假设cur是到nums[i]可以组合出的最大范围1~cur
这时候如果nums[i+1]不是cur+1
就要想办法组合出cur+1~nums[i+1]之间的元素
举例来说:[1、2、10]
1、2可以组合出1~3之间的所有数
而第三个元素是10,所以你要想办法凑出4~9
最直接的方法就是先加入4,这时你就可以组合出1~3+4
还缺8、9,所以再加入8,就可以组合出1~3+4+8
可以得出一个判断式,当你的nums[i+1]>cur+1时
你就要插入cur+1,一直到nums[i+1]<=cur+1或是cur>=n
这样就可以得到答案了
golang code:
func minPatches(nums []int, n int) int {
cur, ans, l := 0, 0, len(nums)
for i := 0; i < l; i++ {
for nums[i] > cur+1 {
cur += cur + 1
ans++
if cur >= n {
return ans
}
}
cur += nums[i]
if cur >= n {
return ans
}
}
for cur < n {
cur += cur + 1
ans++
}
return ans
}
作者: sustainer123 (caster)   2023-06-16 12:03:00
打完周赛还有每日一题 充实的周末
作者: JenniferLope (ㄚ)   2024-06-16 12:04:00
大师
楼主: JIWP (JIWP)   2024-06-16 12:04:00
我没打周赛,我烂,对不起
作者: sustainer123 (caster)   2024-06-16 12:05:00
我周赛陪跑的 每次都只写得出前两题 渍
楼主: JIWP (JIWP)   2024-06-16 12:06:00
我只写的出第一题
作者: oin1104 (是oin的说)   2024-06-16 12:07:00
我哭了 怎么周赛有hard 每日也有

Links booklink

Contact Us: admin [ a t ] ucptt.com