码迷,mamicode.com
首页 > 编程语言 > 详细

LC LCP 14. 切分数组

时间:2020-04-28 19:00:01      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:public   turn   一个   vector   leetcode   void   col   table   info   

link

技术图片

 

 解法:

maxprime存一个数的最大质因数,primeMin[i] 一个数n的质因数存在i,以n结尾所分得的最小子数组数。

class Solution {
public:
    static const int maxn=1000000;
    int maxprime[maxn+1];
    int primeMin[maxn+1];
    void primetable(){
        for(int i=2;i<=maxn;i++){
            maxprime[i]=1;
        }
        vector<int> primes;
        for(int i=2;i<=maxn;i++){
            if(maxprime[i]==1){
                for(int j=i;j<=maxn;j+=i){
                    maxprime[j]=i;
                }
            }
        }
    }

    int splitArray(vector<int>& nums) {
        primetable();
        int n=nums.size();
        vector<int> dp(n+1,0);
        for(int i=0;i<n;i++){
            int num=nums[i];
            int idx=0;
            dp[i+1]=1+dp[i];
            while(num!=1){
                int prime=maxprime[num];
                if(primeMin[prime]==0) primeMin[prime]=dp[i]+1;
                else primeMin[prime]=min(primeMin[prime],dp[i]+1);
                dp[i+1]=min(dp[i+1],primeMin[prime]);
                num/=prime;
            }
        }
        return dp[n];
    }
};

 

LC LCP 14. 切分数组

标签:public   turn   一个   vector   leetcode   void   col   table   info   

原文地址:https://www.cnblogs.com/FEIIEF/p/12796276.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!