美文网首页
LCP 14. 切分数组

LCP 14. 切分数组

作者: 来到了没有知识的荒原 | 来源:发表于2021-09-14 23:18 被阅读0次

LCP 14. 切分数组

const int N = 1e6 + 10;
const int INF = 1e8;
bool st[N];
int prime[N];

class Solution {
 public:
  vector<int> minprimefactor;
  void pre_process() {
    minprimefactor.resize(N, 1);
    memset(st, 0, sizeof st);

    int cnt = 0, x = 1e6;  //线性筛
    for (int i = 2; i <= x; i++) {
      if (!st[i]) {
        prime[cnt++] = i;
        minprimefactor[i] = i;
      }
      for (int j = 0; prime[j] <= x / i; j++) {
        st[prime[j] * i] = true;
        minprimefactor[prime[j] * i] = prime[j];
        if (i % prime[j] == 0) break;
      }
    }
  }

  int splitArray(vector<int>& nums) {
    pre_process();

    int n = nums.size();
    map<int, int> f;
    int x = nums[0];
    while (x != 1) {
      f[minprimefactor[x]] = 1;
      x /= minprimefactor[x];
    }
    int premin = 1;  //上一次最好的结果,就是只分成1个子数组
                     //因为nums[0]就一个数字  也是一个值的初始化
    for (int i = 1; i < n; i++) {
      x = nums[i];
      int curmin = INF;
      while (x != 1) {
        if (f.count(minprimefactor[x]) == 0)
          f[minprimefactor[x]] = premin + 1;
        else
          f[minprimefactor[x]] = min(f[minprimefactor[x]], premin + 1);
          // 如果有序列:2, 5, 3, 2, 3
          // f[minprime[3]] = 3, premin + 1 = 2;
          // 肯定要选择后者
          // 所以新加入一个质因子的时候,有两个选择:
          // 1. 和最前面的相同质因子的数合并到一个区间,不单独开辟新区间
          // 2. 单独算一个区间
        curmin = min(curmin, f[minprimefactor[x]]);
        x /= minprimefactor[x];  //质因数分解
      }
      premin = curmin;
    }
    return premin;
  }
};

相关文章

  • LCP 14. 切分数组

    LCP 14. 切分数组[https://leetcode-cn.com/problems/qie-fen-shu...

  • 快速排序及时间复杂度

    改进算法 三向切分 应用于含有大量重复元素的数组,分为大于,等于,小于切分元素的数组

  • java 数组切分

    之前跑批处理的时候,批量往数据库里插入数据,结果爆了内存溢出,发觉是循环的时候数组过大,因此需要把数据切分下,就此...

  • 归并排序(JS)

      归并排序是一种分治算法。其思想是将原始数组从中间切分成较小的左右两个数组,再将左右两个数组分别从中间切分成更小...

  • 老毛子华硕固件 lcp设置 设置错了导致网络卡

    不主动发送 lcp-echo(off) 是自动lcp响应间隔 否

  • 排序算法-归并排序-详解

    核心思想 归并排序实质是利用分治思想,先拆分,再合并。 拆分:将待排序数组从中间切分,并对切分后的子数组做同样的切...

  • 菜鸟学习javascript12

    14.数组的声明与应用 一.数组的作用 只要是批量的数据都需要使用数组声明 二.如何声明数组 1....

  • 前端优化-LCP

    什么是LCP LCP是最大内容绘制的简称。LCP是用来测量感知加载速度。感知加载速度是以用户为中心的重要指标。因为...

  • 14. 数组

    数组并不是只针对数字来说的。仅限于数字的那是数学范畴的数列。计算机编程里的数组是把一堆数据编成了组。数组可以是整型...

  • ★14.数组

    关于数组 数组有且只有length字段。 基本类型数组直接存储数据,对象类型数组存储引用。 方法可以返回数组而不需...

网友评论

      本文标题:LCP 14. 切分数组

      本文链接:https://www.haomeiwen.com/subject/kgghgltx.html