题目链接:力扣https://leetcode.cn/problems/equal-sum-arrays-with-minimum-number-of-operations/description/
解题思路:
1.无法相等的情况:当一个数组的长度 比 另一个数组长度*6 还长时 无法相等
2.将两个数组求和(sum_nums)并排序,将和值较大的数组作为数组一,另一个为数组二
3.用i标记数组一(nums1)的最后一个数据,用j标记数组二(nums2)的最后一个数据
4.循环比较nums1[i]-1 和 6-nums2[j] 用min_step=0 记录操作次数
若nums1[i]-1大,则sum_nums1-(nums1[i]-1),并且 i-1,min_step+1
若6-nums2[j]大,则sum_nums2+(6-nums[j]),并且 j+1,min_step+1
5.当sum_nums1<=sum_nums2时 循环结束 输出min_step
注意点:
1.交换数组时,用于记录数组的和、长度的变量都要交换
2.当i或者j达到边界时,无需进行第3步的比较 直接选择未到边界的进行循环
样例图解:
我的代码:(语言:GO)
package main
import (
"fmt"
"sort"
)
func minOperations(nums1 []int, nums2 []int) int {
//记录数组长度 len函数
len1, len2 := len(nums1), len(nums2)
//数组排序 sort函数
sort.Ints(nums1)
sort.Ints(nums2)
//数组求和
sum1, sum2 := 0, 0
for _, v1 := range nums1 {
sum1 = sum1 + v1
}
for _, v2 := range nums2 {
sum2 = sum2 + v2
}
//判断是否不能相等 或者 已经相等
if len1 > (len2 * 6) {
return -1
} else if len2 > (len1 * 6) {
return -1
} else if sum1 == sum2 {
return 0
}
//实现数组交换
if sum1 < sum2 {
sum1, sum2 = sum2, sum1
nums1, nums2 = nums2, nums1
len1, len2 = len2, len1
}
//fmt.Println(nums1, nums2)
//fmt.Println(sum1, sum2)
MinNumber := 0 //记录操作次数
i, j := len1-1, 0 //i,j分别记录数组一,数组二下标
//开始循环 当sum1<=sum2时结束循环 因为我在语句中加了sum1=sum2 所以我的判断是sum1!=sum2
for sum1 != sum2 {
if i == -1 {
fmt.Println("1")
if sum1 <= sum2+(6-nums2[j]) {
sum1 = sum2
MinNumber = MinNumber + 1
return MinNumber
} else {
sum2 = sum2 + (6 - nums2[j])
MinNumber = MinNumber + 1
j = j + 1
}
} else if j == len2-1 {
fmt.Println("2")
if sum1-(nums1[i]-1) <= sum2 {
sum1 = sum2
MinNumber = MinNumber + 1
return MinNumber
} else {
sum1 = sum1 - (nums1[i] - 1)
MinNumber = MinNumber + 1
i = i - 1
}
} else if (nums1[i] - 1) >= (6 - nums2[j]) {
//fmt.Println("3")
if sum1-(nums1[i]-1) <= sum2 {
//fmt.Println("3->1")
sum1 = sum2
MinNumber = MinNumber + 1
return MinNumber
} else {
//fmt.Println("3->2")
sum1 = sum1 - (nums1[i] - 1)
MinNumber = MinNumber + 1
i = i - 1
}
} else {
//fmt.Println("4")
if sum1 <= sum2+(6-nums2[j]) {
sum1 = sum2
MinNumber = MinNumber + 1
return MinNumber
} else {
sum2 = sum2 + (6 - nums2[j])
MinNumber = MinNumber + 1
j = j + 1
}
}
//fmt.Println(sum1, sum2)
//fmt.Println(MinNumber)
}
return MinNumber
}
func main() {
nums1 := []int{5, 6, 4, 3, 1, 2}
nums2 := []int{6, 3, 3, 1, 4, 5, 3, 4, 1, 3, 4}
MinNumber := minOperations(nums1, nums2)
fmt.Println(MinNumber)
}