zoukankan      html  css  js  c++  java
  • 548. 将数组分割成和相等的子数组

    描述

    给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) :

    0 < i, i + 1 < j, j + 1 < k < n - 1
    子数组 (0, i - 1),(i + 1, j - 1),(j + 1, k - 1),(k + 1, n - 1) 的和应该相等。
    这里我们定义子数组 (L, R) 表示原数组从索引为L的元素开始至索引为R的元素。
    示例:

    输入: [1,2,1,2,1,2,1]
    输出: True
    解释:
    i = 1, j = 3, k = 5.
    sum(0, i - 1) = sum(0, 0) = 1
    sum(i + 1, j - 1) = sum(2, 2) = 1
    sum(j + 1, k - 1) = sum(4, 4) = 1
    sum(k + 1, n - 1) = sum(6, 6) = 1

    注意:
    1 <= n <= 2000。
    给定数组中的元素会在 [-1,000,000, 1,000,000] 范围内。

    思路

    前缀和(数组和的问题很多都可以用这个方法)加剪枝,关键是寻找剪枝的条件:
    sum(0,i-1)+sum(i+1,j-1) = sum(j+1,k-1)+sum(k+1,n-1)
    =>sum(0,j-1)-nums[i] = sum(j+1,n-1)-nums[k]
    =>sum(0,j-1)-sum(j+1,n-1) = nums[i]-nums[k]
    =>|sum(0,j-1)-sum(j+1,n-1)| = |nums[i]-nums[k]| <= max-min

    bool splitArray(int* nums, int numsSize){
        if(numsSize<7){
            return false;
        }
        int sum_map[numsSize+1];
        memset(sum_map,0,numsSize+1);
        int max=nums[0],min=nums[0];
        for(int i=0;i<numsSize;i++){
            sum_map[i+1]=sum_map[i]+nums[i];
            max=max>nums[i]?max:nums[i];
            min=min<nums[i]?min:nums[i];
        }
        for(int j=3;j<=numsSize-4;j++){
            if(abs(sum_map[j]+sum_map[j+1]-sum_map[numsSize])<=max-min){
                for(int i=1;i<=j-2;i++){
                    if(sum_map[i]==sum_map[j]-sum_map[i+1]){
                        for(int k=j+2;k<numsSize-1;k++){
                            if(sum_map[k]-sum_map[j+1]==sum_map[i]&&sum_map[numsSize]-sum_map[k+1]==sum_map[i]){
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return false;
    }
    
  • 相关阅读:
    如何将DataTable转换成List<T>呢?
    mySql中SUBSTRING_INDEX函数用法
    常用 Git 命令清单
    git学习笔记
    MySql 获取表的字段名
    mysql从身份证号中提取生日、性别
    年月日转大写汉字
    ExtJs服务器端代理(Ajax)
    ExtJS客户端代理
    ExtJS 数据模型
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12519967.html
Copyright © 2011-2022 走看看