Go语言解决区分两个数组不同元素

问题描述:

给你两个数组,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]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值