Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem có thể làm cho cả hai mảng bằng nhau bằng cách sửa đổi một phần tử duy nhất trong Python hay không

Giả sử chúng ta có hai mảng nums1 và nums2 và một giá trị khác k. Chúng ta phải kiểm tra xem cả hai mảng có thể được tạo bằng nhau hay không bằng cách sửa đổi bất kỳ một phần tử nào từ nums1 theo cách sau (chỉ một lần):Chúng ta có thể thêm bất kỳ giá trị nào từ phạm vi [-k, k] vào bất kỳ phần tử nào của nums1.

Vì vậy, nếu đầu vào giống như nums1 =[5,7,11] nums2 =[5,5,11] k =8, thì đầu ra sẽ là True vì chúng ta có thể thêm -2 (trong phạm vi [-8,8] ) với nums1 [1] thành 5 thì nó sẽ giống như nums2.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • sắp xếp danh sách nums1 và nums2
  • tạm thời:=Sai
  • idx:=-1
  • đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện
    • nếu nums1 [i] không giống nums2 [i], thì
      • nếu tạm thời là đúng, thì
        • trả về Sai
      • temp:=True
      • idx:=i
  • nếu idx là -1 hoặc | nums1 [idx] -nums2 [idx] | <=k, sau đó
    • trả về True
  • trả về Sai

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Mã mẫu

def solve(nums1, nums2, k):
   nums1.sort()
   nums2.sort()

   temp = False

   idx = -1
   for i in range(len(nums1)):
      if nums1[i] != nums2[i]:
         if temp:
           return False
         temp = True
         idx = i

   if idx == -1 or abs(nums1[idx]-nums2[idx]) <= k:
      return True
   return False

nums1 = [5,7,11]
nums2 = [5,5,11]
k = 8
print(solve(nums1, nums2, k))

Đầu vào

[5,7,11], [5,5,11], 8

Đầu ra

True