英文:
Golang sort two slices
问题
我有两个整数切片,元素不一定是唯一的。
nums1 := [1,3,2,4]
nums2 := [12,47,23,1]
我想对nums1
进行排序,并相应地交换nums2
中的元素,即:
nums1 -> [1,2,3,4]
nums2 -> [12,23,47,1]
如果我自己进行排序,当我交换nums1
的元素时,我显然可以交换nums2
的元素。我想知道是否有可能在不编写自己的排序算法或依赖外部库的情况下实现这一点(使用sort包显然是可以的)。
英文:
I have two integer slices, the elements are not necessarily unique.
nums1 := [1,3,2,4]
nums2 := [12,47,23,1]
I wanted to sort nums1
and swap the elements in num2
accordingly, i.e:
nums1 -> [1,2,3,4]
nums2 -> [12,23,47,1]
If I were to do the sorting myself, I can obviously swap the nums2
elements whenever I swap the nums1
ones. I wonder if it is possible to achieve it without having writing the sort myself or depending on external libraries (using sort package is obviously okay).
答案1
得分: 3
package main
import (
"fmt"
"sort"
)
func main() {
nums1 := []int{1, 3, 2, 4}
nums2 := []int{12, 47, 23, 1}
sort.Slice(nums1, func(i, j int) bool {
// 检查排序条件
cond := nums1[i] < nums1[j]
if cond {
nums2[i], nums2[j] = nums2[j], nums2[i]
}
return cond
})
fmt.Println("nums1:", nums1)
fmt.Println("nums2:", nums2)
}
英文:
You can use sort package with slice function.
package main
import (
"fmt"
"sort"
)
func main() {
nums1 := []int{1, 3, 2, 4}
nums2 := []int{12, 47, 23, 1}
sort.Slice(nums1, func(i, j int) bool {
// Check for sorting
cond := nums1[i] < nums1[j]
if cond {
nums2[i], nums2[j] = nums2[j], nums2[i]
}
return cond
})
fmt.Println("nums1:", nums1)
fmt.Println("nums2:", nums2)
}
答案2
得分: -2
这是一个O(N)的解决方案。唯一的开销是临时数组的复制。
func sortSpecial(nums1 []int, nums2 []int) {
nums3 := make([]int, len(nums1))
for i := 0; i < len(nums1); i++ {
nums3[i] = nums2[nums1[i]-1]
}
copy(nums2, nums3)
}
英文:
Here's an O(N) solution. The only overhead is the temp array copy back.
func sortSpecial(nums1 []int, nums2 []int) {
nums3 := make([]int, len(nums1))
for i:= 0; i < len(nums1); i++ {
nums3[i] = nums2[nums1[i]-1]
}
copy(nums2,nums3)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论