zoukankan      html  css  js  c++  java
  • [Leetcode] LCP 14. 切分数组

    题目链接:https://leetcode-cn.com/problems/qie-fen-shu-zu/
    分析:
    是一道数学题。
    原始的想法是,访问到第i个数字,保存i之前符合要求的index,然后使用dp,这样会超时。
    换个思路第i位的结果来源于两个。

    • 一是独自构成一个子数组
    • 二是分解成质因数x,y,z等等。找到最小的那个再加1

    于是重点是如何分解质因数。使用下面的方法得到每个数字的最小质因数。得到这个表后。每次来一个数,就使用这个表迭代整除就可以得到全部的质因数。
    Python

    n = 1000001
    minPrime = [1]*n
    for i in range(2,n):
        for j in range(i, n, i):
            if minPrime[j] == 1:
                minPrime[j] = i
                        
    class Solution:
        def splitArray(self, nums: List[int]) -> int:
            
            # def gcd(x, y) -> int:a
            #     if not x:
            #         return y 
            #     else:
            #         return gcd(y%x, x)
            prev, cur = 0, 0
            dic = {}
            # for i in minPrime:
            #     dic[i] = 100000
            for i in range(len(nums)):
                cur = prev + 1
                temp = nums[i]
                while temp!=1:
                    if minPrime[temp] in dic.keys():
                        cur = min(cur, dic[minPrime[temp]]+1)
                        dic[minPrime[temp]] = min(dic[minPrime[temp]], prev)
                    else:
                        dic[minPrime[temp]] = prev
                    temp //= minPrime[temp]
                prev = cur
            return cur
    
  • 相关阅读:
    SOLID (面向对象设计) 基本原则
    进化计算安排
    Python matplotlib绘图学习笔记
    Python 语法2
    Python 语法1
    C++入门程序作业3
    C++入门程序作业2
    C++入门程序作业1
    SE1-soc入手又有的东西可以玩了
    pointer to function
  • 原文地址:https://www.cnblogs.com/zuotongbin/p/13812367.html
Copyright © 2011-2022 走看看