สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums ซึ่งแสดงถึงขนาดและทิศทางของจรวด จำนวนเต็มบวกหมายถึงด้านขวา และจำนวนลบหมายถึงด้านซ้าย และค่าสัมบูรณ์ของตัวเลขแสดงถึงขนาดของจรวด ตอนนี้เมื่อจรวดสองลูกชนกัน จรวดขนาดเล็กกว่าจะถูกทำลาย และจรวดขนาดใหญ่กว่าจะเดินทางต่อไปโดยไม่เปลี่ยนแปลง เมื่อพวกมันเป็นจรวดขนาดเดียวกันและชนกัน พวกมันจะทำลายทั้งคู่ เมื่อจรวดสองตัวเคลื่อนที่ไปในทิศทางเดียวกัน พวกมันจะไม่ชนกัน (สมมติว่าความเร็วของจรวดเท่ากัน) เราต้องหาสถานะของจรวดหลังจากการชนกันทั้งหมด
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[3, 8, 5, -5] เอาต์พุตจะเป็น [3, 8] เนื่องจาก 5 และ -5 จะถูกทำลาย ส่วนที่เหลือจะคงอยู่
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ls :=รายการใหม่ที่มีหนึ่งองค์ประกอบ nums[0]
- สำหรับฉันในช่วง 1 ถึงขนาดของ nums - 1 ทำ
- ถ้า nums[i]>=0 แล้ว
- ใส่ nums[i] ต่อท้าย ls
- มิฉะนั้น
- ใส่ nums[i] ต่อท้าย ls
- j :=ขนาดของ ls - 2
- ในขณะที่ j>=0 และ ls[j]>=0, ทำ
- ถ้า |องค์ประกอบสุดท้ายของ ls|> ls[j] แล้วก็
- ลบองค์ประกอบ jth ออกจาก ls
- มิฉะนั้น เมื่อ |องค์ประกอบสุดท้ายของ ls| เหมือนกับ ls[j] แล้ว
- ลบองค์ประกอบ jth ออกจาก ls
- ลบองค์ประกอบสุดท้ายออกจาก ls
- ออกมาจากวงจร
- มิฉะนั้น
- ลบ -องค์ประกอบสุดท้ายจาก ls
- ออกมาจากวงจร
- j :=j - 1
- ถ้า |องค์ประกอบสุดท้ายของ ls|> ls[j] แล้วก็
- ถ้า nums[i]>=0 แล้ว
- ผลตอบแทน ls
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, nums): ls = [nums[0]] for i in range(1, len(nums)): if nums[i] >= 0: ls.append(nums[i]) else: ls.append(nums[i]) j = len(ls) - 2 while j >= 0 and ls[j] >= 0: if abs(ls[-1]) > ls[j]: ls.pop(j) elif abs(ls[-1]) == ls[j]: ls.pop(j) ls.pop(-1) break else: ls.pop(-1) break j -= 1 return ls ob = Solution() nums = [3, 8, 5, -5] print(ob.solve(nums))
อินพุต
[3, 8, 5, -5]
ผลลัพธ์
[3, 8]