作者:
JIWP (JIWP)
2025-01-25 11:41:572948. Make Lexicographically Smallest Array by Swapping Elements
思路:
建立一個idx矩陣:idx[i]=[i]
接著把idx跟nums按照nums的大小排序
再來就是去判斷
如果nums[i]-nums[i-1]<=limit
那這兩個就是同一個group
我們就這樣紀錄每個group的start和end
接著把idx[start:end]按照大小排序
從j=start~end把ans[idx[j]]=nums[j]
這樣就好
golang code :
func lexicographicallySmallestArray(nums []int, limit int) []int {
n := len(nums)
idx, ans := make([]int, n), make([]int, n)
for i := range idx {
idx[i] = i
}
slices.SortFunc(idx, func(a, b int) int { return nums[a] - nums[b] })
slices.Sort(nums)
start := 0
for i := 1; i < n; i++ {
if nums[i]-nums[i-1] > limit {
slices.Sort(idx[start:i])
for j := start; j < i; j++ {
ans[idx[j]] = nums[j]
}
start = i
}
}
slices.Sort(idx[start:n])
for j := start; j < n; j++ {
ans[idx[j]] = nums[j]
}
return ans
}