标签:public turn 一个 vector leetcode void col table info
解法:
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]; } };
标签:public turn 一个 vector leetcode void col table info
原文地址:https://www.cnblogs.com/FEIIEF/p/12796276.html