สมมติว่าเรามีจำนวนเต็มอาร์เรย์ การดำเนินการย้ายคือการเลือกองค์ประกอบใดๆ ก็ตามและลดลง 1 อาร์เรย์ A เป็นอาร์เรย์ซิกแซกหากพอใจกับ 1 หรือ 2 −
-
องค์ประกอบที่จัดทำดัชนีคู่ทั้งหมดมีค่ามากกว่าองค์ประกอบที่อยู่ติดกัน ดังนั้น A[0]> A[1] A[3] ... และอื่นๆ
-
องค์ประกอบดัชนีคี่ทุกตัวมีค่ามากกว่าองค์ประกอบที่อยู่ติดกัน ดังนั้น A[0] A[2] A[4] <... เป็นต้น
เราต้องหาจำนวนการเคลื่อนไหวขั้นต่ำเพื่อแปลงจำนวนอาร์เรย์ที่กำหนดให้เป็นอาร์เรย์ซิกแซก
ดังนั้นหากอาร์เรย์เป็นเหมือน [1,2,3] ผลลัพธ์จะเป็น 2 เนื่องจากเราสามารถลด 2 เป็น 0 หรือ 3 เป็น 1
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดวิธีการที่เรียกว่าแก้ปัญหา () ซึ่งจะใช้เวลา nums และเริ่มการทำงานดังต่อไปนี้ −
-
k :=0
-
สำหรับฉันอยู่ในช่วงเริ่มต้นถึงความยาวของ nums เพิ่มขึ้น 2
-
ซ้าย :=100000 เมื่อ i – 1 <0 มิฉะนั้น nums[i - 1]
-
right :=100000 เมื่อ i + 1>=ความยาวของ nums มิฉะนั้น nums[i + 1]
-
temp :=(ค่าต่ำสุดของซ้ายและขวา) – 1 – nums[i]
-
ถ้า temp <0 แล้ว k :=k + |temp|
-
-
กลับ k
-
โดยวิธีหลักก็จะเป็น
-
ตอบ :=แก้ (nums, 0)
-
ans :=ขั้นต่ำของ ans และแก้ (nums, 1)
-
กลับมาอีกครั้ง
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −
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]))
อินพุต
[1,2,3]
ผลลัพธ์
2