问题描述:
给你两个数组,arr1 和 arr2,
arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例:
输入:arr1 = [2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 20, 19, 21, 22], arr2 = [2,1,4,3,9,6]
输出:[2 2 2 1 4 3 3 9 6 7 19 20 21 22]
// new project main.go
package main
import (
"fmt"
)
func main() {
arr1 := [...]int{2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 20, 19, 21, 22} //第一个数组
arr2 := [...]int{2, 1, 4, 3, 9, 6} //第二个
arr3 := make([]int, 10) //初始化一个切片,保存出现过的元素
arr4 := make([]int, 10) //初始化第二个切片,保存未出现的元素
m, n := 0, 0
for i := 0; i < len(arr2); i++ { //将相同的值存入切片arr3中
for j := 0; j < len(arr1); j++ {
if arr1[j] == arr2[i] {
arr3[m] = arr1[j]
m++
continue
}
}
}
q, w := 0, 0
for q = 0; q < len(arr1); q++ { //将不同的值存入切片arr3中
for w = 0; w < len(arr2); w++ {
if arr1[q] == arr2[w] {
break
}
}
if w == len(arr2) { //比较完全部的值,w增为最大,此时的arr1[q]即为两个切片不同的值
arr4[n] = arr1[q]
n++
}
}
fmt.Println(arr3[0:m])
fmt.Println(arr4[0 : len(arr1)-m])
arr5 := arr3[0:m] //相同的值的切片赋给arr5
arr6 := arr4[0:n] //不相同的值的切片赋给arr6
for i := 0; i < n-1; i++ { //arr6升序
if arr6[i] > arr6[i+1] {
arr6[i], arr6[i+1] = arr6[i+1], arr6[i]
}
}
arr5 = append(arr5, arr6...) //arr5扩展
fmt.Println(arr5)
}
结果为:
[2 2 2 1 4 3 3 9 6]
[7 20 19 21 22]
[2 2 2 1 4 3 3 9 6 7 19 20 21 22]