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

Giảm phần tử để tạo mảng ngoằn ngoèo trong Python


Giả sử chúng ta có một dãy số nguyên, một phép toán di chuyển thực sự là chọn bất kỳ phần tử nào và giảm nó đi 1. Một mảng A là một mảng ngoằn ngoèo nếu 1 hoặc 2 được thỏa mãn -

Chúng ta phải tìm số lần di chuyển tối thiểu để biến đổi số mảng đã cho thành mảng ngoằn ngoèo.

Vì vậy, nếu mảng giống như [1,2,3], thì đầu ra sẽ là 2, vì chúng ta có thể giảm 2 xuống 0 hoặc 3 xuống 1

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

  • Xác định một phương thức có tên là giải quyết (), phương thức này sẽ nhận nums và bắt đầu, phương thức này sẽ hoạt động như bên dưới -

  • k:=0

  • đối với tôi trong phạm vi bắt đầu có độ dài là num, tăng 2

    • left:=100000 khi i - 1 <0, ngược lại là nums [i - 1]

    • right:=100000 khi i + 1> =độ dài của nums, ngược lại nums [i + 1]

    • temp:=(tối thiểu trái và phải) - 1 - nums [i]

    • nếu temp <0 thì k:=k + | temp |

  • trả lại k

  • Trong phương thức chính, nó sẽ là

  • ans:=giải quyết (nums, 0)

  • ans:=tối thiểu ans và giải quyết (nums, 1)

  • trả lại ans

Ví dụ (Python)

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

class Solution(object):
   def solve(self,nums,start):
      k = 0
      for i in range(start,len(nums),2):
         left = 100000 if i-1<0 else nums[i-1]
         right = 10000 if i+1>=len(nums) else nums[i+1]
         temp= (min(left,right)-1 - nums[i])
         if temp<0:
            k+=abs(temp)
      return k
   def movesToMakeZigzag(self, nums):
      ans = self.solve(nums,0)
      ans = min(ans,self.solve(nums,1))
      return ans
ob = Solution()
print(ob.movesToMakeZigzag([1,2,3]))

Đầu vào

[1,2,3]

Đầu ra

2