สมมติว่าเรามีรายการตัวเลขที่ไม่ซ้ำกันซึ่งเรียกว่า nums ดังนั้นเราต้องหาชุดย่อยที่ใหญ่ที่สุดเพื่อให้องค์ประกอบทุกคู่ในเซตย่อย เช่น (i, j) เป็นไปตาม i % j =0 หรือ j % i =0 ดังนั้นเราจึง ต้องหาขนาดของเซตย่อยนี้
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[3, 6, 12, 24, 26, 39] เอาต์พุตจะเป็น 4 เนื่องจากเซตย่อยที่ถูกต้องที่สุดคือ [3, 6, 12, 24]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- dp :=รายการขนาด nums และเติม 1
- เรียงเลขรายการ
- n :=ขนาดของ nums
- ถ้า n <=1 แล้ว
- ส่งคืน n
- ตอบ :=0
- สำหรับฉันในช่วง 1 ถึง n ทำ
- สำหรับ j ในช่วง 0 ถึง i ทำ
- ถ้า nums[i] หารด้วย nums[j] ลงตัว ดังนั้น
- dp[i] :=สูงสุดของ dp[i] และ dp[j] + 1
- ถ้า nums[i] หารด้วย nums[j] ลงตัว ดังนั้น
- ans :=สูงสุดของ ans และ dp[i]
- สำหรับ j ในช่วง 0 ถึง i ทำ
- คืนสินค้า
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution: def solve(self, nums): dp = [1] * len(nums) nums.sort() n = len(nums) if n <= 1: return n ans = 0 for i in range(1, n): for j in range(0, i): if nums[i] % nums[j] == 0: dp[i] = max(dp[i], dp[j] + 1) ans = max(ans, dp[i]) return ans ob = Solution() nums = [3, 6, 12, 24, 26, 39] print(ob.solve(nums))
อินพุต
[3, 6, 12, 24, 26, 39]
ผลลัพธ์
4