在Python中查找具有最小操作次数的相等和数组

在Python中查找具有最小操作次数的相等和数组

假设我们有两个名为nums1和nums2的数组。 数组中的值介于1和6(包括1和6)之间。 在一次操作中,我们可以将任何数组中的任何值更新为介于1和6之间的任何值。 我们必须找到使nums1中的值的总和等于nums2中的值的总和所需的最小操作数。 如果不可能,则我们必须返回-1。

因此,如果输入是nums1 = [1,5,6],nums2 = [4,1,1],则输出将为2,因为我们可以将nums2从[4,1,1]更改为[4,1,6]在第一次操作中,然后在第二个操作中[4,2,6]以使其等于nums1。

要解决此问题,我们将按照以下步骤执行 –

  • s1:nums1中所有元素的总和

  • s2:nums2中所有元素的总和

  • 对列表nums1和列表nums2进行排序

  • 如果s1>s2,则

    • 交换nums1和nums2

    • 交换s1和s2

  • ans:= 0

  • left:= 0,right:= nums2的大小-1

  • 当left=0时执行以下操作

    • 如果s1与s2相同,则
      • 返回ans
    • curr_left:= nums1左侧的元素(如果left

    • curr_right:= nums2右侧的元素(如果right>=0,则为0)

    • 如果6-curr_left≥ curr_right-1,则

      • s1:= s1 + 6-curr_left和s2-s1中的最小值

      • left:= left + 1

    • 否则,

      • s2:= s2- curr_right-1和s2-s1中的最小值

      • right:= right- 1

    • ans:= ans + 1

  • 如果s1与s2不同,则返回-1,否则返回ans

示例

让我们看一下以下实现,以更好的理解 –

 def solve(nums1, nums2):
  s1 = sum(nums1)
  s2 = sum(nums2)
  nums1.sort()
  nums2.sort()
  if s1>s2:
    nums1,nums2 = nums2,nums1
    s1,s2 = s2,s1

  ans = 0
  left,right = 0,len(nums2)-1
  while(left=0):
     if s1==s2:
         返回词
      curr_left = nums1[left] if left=0 else 0
      if 6-curr_left>=curr_right-1:
        s1+= min(6-curr_left, s2-s1)
        left+=1
      else:
        s2-= min(curr_right-1, s2-s1)
        right-=1
      ans+=1
  return -1 if s1!=s2 else ans

nums1 = [1,5,6]
nums2 = [4,1,1]
print(solve(nums1, nums2))

输入

[1,5,6],[4,1,1]

输出

2

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程