数组分割问题-详细版

背包问题变种:将数组分成两部分使得两部分的和的差最小 题目: 将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小。 思路:差最小就是说两部分的和最接近,而且和所有数的和SUM的一半也是最接近的。假设用sum1表示第一部分的和,sum2表示第二部分的和,SUM表示所有数的和,那么sum1+sum2=SUM。... 阅读详情

题记:这道题和《编程之美》一书中2.18节的数组分割区别不大,但本人觉得《编程之美》这一节讲的不够透彻,不好理解(或许本人愚钝微笑),故给出自己的思路,同时也给出打印其中一种方案的方法(这一点《编程之美》并没有提到)。


两个序列大小均为n,序列元素的值为任一整数,无序;

要求通过交换两个序列的元素,使序列a元素之和与序列b的元素之和的差最小(可能存在很多种组合,要求找出其中一种即可)。

如序列:1  5   7   8   9和序列6  3   11  20  17我们可以通过交换得到新的序列1  5   9   8   20和序列7   6   3   11  17,前者和为43,后者和为44,两者之差为1最小。

                

         首先对于两个素个数相等的序列a、b我们利用《编程之美》2.18节的思想,将其合并为一个序列便于后续操作,序列中有负数的情况我们可以先预处理一下, 让每个元素都加上一个初始值使得最后每个元素都为正。整个问题就转化为在一个元素个数为2n的正数数组中找出其中n个元素,使得这n个元素之和与剩下元素 之和的差最小。

        《编程之美》2.18解法二中提到,从2n个数中找n个元素,有三种可能:大于Sum/2,小于Sum/2以及等于Sum/2。而大于Sum/2与小于等于Sum/2没区别,故可以只考虑小于等于Sum/2的情况,这一点我们仍然沿用这个思想。

        下面谈谈变化的东西:

        同样,利用动态规划的思想:

        先给一个空间复杂度为O(2N*N*Sum/2)即O(N2Sum)的方法,下面会对空间复杂度进行优化:

        设F[i][j][k]表示前i个元素中选取j个元素,使得其和不超过k且最接近k。那么可以根据第i个元素是否选择来进行决策

        状态方程如下:

                           1-1

         其中,F[i-1][j][k]表示前i-1个元素中选取j个使其和不超过但最逼近k;

         F[i-1][j-1][k-A[i]]在前i-1个元素中选取j-1个元素使其和不超过但最逼近k-A[i],这样再加上A[i]即第i个元素就变成了 选择上第i个元素的情况下最逼近k的和。而第一种情况与第二种情况是完备且互斥的,所以需要将两者最大的值作为F[i][j][k]的值。

        伪代码如下:

[cpp]  view plain copy
  1. F[][][]← 0  
  2.   
  3. for i ← 1 to 2*N  
  4.   
  5.     nLimit ← min(i,N)  
  6.   
  7.     do for j ← 1 to nLimit  
  8.   
  9.         do for k ← 1 to Sum/2  
  10.   
  11.             F[i][j][k] ← F[i-1][j][k]  
  12.   
  13.             if (k >= A[i] && F[i][j][k] < F[i-1][j-1][k-A[i]]+A[i])  
  14.   
  15.                 then F[i][j][k] ← F[i-1][j-1][k-A[i]]+A[i]  
  16.   
  17. return F[2N][N][Sum/2]  

         当然,前面已经提到,要给出一种方案的打印,下面我们谈谈怎么打印一种方案。

         可以设置一个三维数组Path[][][]来记录所选择元素的轨迹。含路径的伪代码如下,只是在上述伪代码中添加了一点代码而已。

[cpp]  view plain copy
  1. F[][][]← 0  
  2.   
  3. Path[][][]← 0  
  4.   
  5. for i ← 1 to 2*N  
  6.   
  7.     nLimit ← min(i,N)  
  8.   
  9.     do for j ← 1 to nLimit  
  10.   
  11.         do for k ← 1 to Sum/2  
  12.   
  13.             F[i][j][k] ← F[i-1][j][k]  
  14.   
  15.             if (k >= A[i] && F[i][j][k] < F[i-1][j-1][k-A[i]]+A[i])  
  16.   
  17.                 then F[i][j][k] ← F[i-1][j-1][k-A[i]]+A[i]  
  18.   
  19.                      Path[i][j][k] ← 1  
  20.   
  21. return F[2N][N][Sum/2] and Path[][][]  

根据求得的Path[][][]我们可以从F[2N][N][Sum/2]往F[0][0][0]逆着推导来打印轨迹对应的元素。伪代码如下:

[cpp]  view plain copy
  1. i ← 2N  
  2.   
  3. j ← N  
  4.   
  5. k ← Sum/2  
  6.   
  7. while (i > 0 && j > 0 && k > 0)  
  8.   
  9.     do if(Path[i][j][k] = 1)  
  10.   
  11.         then Print A[i]  
  12.   
  13.              j ← j-1  
  14.   
  15.              k ← k-A[i]  
  16.   
  17.     i ← i-1  

上面的伪代码的意思是,每当找到一个Path[][][]=1,就将其对应的A[i]输出,因为已经确定一个所以j应该自减1,而k代表总和,所以也应该减去A[i]。至于为什么不管Path[][][]是否为1都需要i自减1,这一点可以参照本人博文《背包问题——“01背包”详解及实现(包含背包中具体物品的求解)》中的路径求法相关内容。

下面开始优化空间复制度为O(N*Sum/2)

         我们观察前面不含路径的伪代码可以看出,F[i][j][k]只与 F[i-1][][]有关,这一点状态方程上也能反映出来。所以我们可以用二维数组来代替三维数组来达到降低空间复杂度的目的。但是怎么代替里面存有玄 机,我们因为F[i][j][k]只与F[i-1][][]有关,所以我们用二维数组来代替的时候应该对F[i][j][k]的“j”维进行逆序遍历。为 什么?因为只有这样才能保证计算F[i][j][k]时利用的F[i-1][j][]和F[i-1][j-1][]是真正i-1这个状态的值,如果正序遍 历,那么当计算F[][j][]时,F[][j-1][]已经变化,那么计算的结果就是错误的。

       伪代码如下

[cpp]  view plain copy
  1. F[][]← 0  
  2.   
  3. for i ← 1 to 2*N  
  4.   
  5.     nLimit ← min(i,N)  
  6.   
  7.     do for j ← nLimit to 1  
  8.   
  9.         do for k ← A[i] to Sum/2  
  10.   
  11.             if (F[j][k] < F[j-1][k-A[i]]+A[i])  
  12.   
  13.                 then F[j][k] ← F[j-1][k-A[i]]+A[i]  
  14.   
  15.    
  16.   
  17. return F[N][Sum/2] and Path[][][]  

上面的伪代码基本上和《编程之美》2.18节最后所给的代码基本一致了,但是里面并不含Path,如果要打印其中一种方案,那么仍需要2N*N*Sum/2的空间来存放轨迹。即

[cpp]  view plain copy
  1. F[][]← 0  
  2.   
  3. Path[][][]← 0  
  4.   
  5. for i ← 1 to 2*N  
  6.   
  7.     nLimit ← min(i,N)  
  8.   
  9.     do for j ← nLimit to 1  
  10.   
  11.         do for k ← A[i] to Sum/2  
  12.   
  13.             if (F[j][k] < F[j-1][k-A[i]]+A[i])  
  14.   
  15.                 then F[j][k] ← F[j-1][k-A[i]]+A[i]  
  16.   
  17.                 Path[i][j][k] ← 1  
  18.   
  19. return F[N][Sum/2] and Path[][][]  

打印路径的伪代码与之前的一模一样,这里不再重写。

 

下面给出《编程之美》2.18节所讲的“数组分割”中给出的数据进行本文思想的C++代码实现

数组1   5   7   8   9   6   3   11  20  17一共10个数,拆成两个数组,使得这两个数组和之差最小。

[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <cstring>  
  3. #include "CreateArray.h"    //该头文件是动态开辟及销毁二维三维数组的,读者自己实现  
  4. using namespace std;  


 //这里参数array为整个合并后的数组序列,nLen为合并后的数组长,nToBeClosed是之前所提的Sum/2

//算法时间复杂度为O(N2Sum),空间复杂度为O(N2Sum)

[cpp]  view plain copy
  1. int AdjustArray(int array[], int nLen, int nToBeClosed)  
  2. {  
  3.     int*** F = NULL;  
  4.     int*** Path = NULL;  
  5.     CreateThreeDimArray(F,nLen+1,nLen/2+1,nToBeClosed+1);       //创建三维数组,存放每一个状态  
  6.     CreateThreeDimArray(Path,nLen+1,nLen/2+1,nToBeClosed+1);    //创建三维数组,存放轨迹  
  7.     for(int i = 1; i <= nLen; i++)  
  8.     {  
  9.         int nLimit = min(i,nLen/2);  
  10.         for(int j = 1; j <= nLimit; j++)  
  11.         {  
  12.             for(int k = 1; k <= nToBeClosed; k++)  
  13.             {  
  14.                 F[i][j][k] = F[i-1][j][k];  
  15.                 if(k >= array[i-1])  
  16.                 {  
  17.                     if(F[i][j][k] < F[i-1][j-1][k-array[i-1]]+array[i-1])  
  18.                     {  
  19.                         F[i][j][k] = F[i-1][j-1][k-array[i-1]]+array[i-1];  
  20.                         Path[i][j][k] = 1;  
  21.                     }  
  22.                 }  
  23.             }  
  24.         }  
  25.     }  
  26.   
  27.          //打印调整后的其中一个数组  
  28.     int i = nLen, j = nLen/2, k = nToBeClosed;  
  29.     while(i > 0 && j > 0 && k > 0)  
  30.     {  
  31.         if(Path[i][j][k] == 1)  
  32.         {  
  33.             cout << array[i-1] << "\t";  
  34.             k -= array[i-1];  
  35.             j--;  
  36.         }  
  37.         i--;  
  38.     }  
  39.     cout << endl;  
  40.   
  41.     int nRet = F[nLen][nLen/2][nToBeClosed];  
  42.     DestroyThreeDimArray(Path,nLen+1,nLen/2+1); //销毁轨迹表  
  43.     DestroyThreeDimArray(F,nLen,nLen/2+1);  //销毁状态表  
  44.     return nRet;  
  45. }   

//这里参数array为整个合并后的数组序列,nLen为合并后的数组长,nToBeClosed是之前所提的Sum/2

//算法时间复杂度为O(N2Sum),空间复杂度不含Path为O(NSum/2),含Path为O(N2Sum)

[cpp]  view plain copy
  1. int Fun2(int array[], int nLen, int nToBeClosed)  
  2. {  
  3.     int** F = NULL;  
  4.     int*** Path = NULL;  
  5.     CreateTwoDimArray(F,nLen/2+1,nToBeClosed+1);        //创建二维状态表  
  6.     CreateThreeDimArray(Path,nLen+1,nLen/2+1,nToBeClosed+1);//创建三维轨迹表  
  7.   
  8.     for(int i = 1; i <= nLen; i++)  
  9.     {  
  10.         int nLimit = min(i,nLen/2);  
  11.         for(int j = nLimit; j >= 1; j--)  
  12.         {  
  13.             for(int k = array[i-1]; k <= nToBeClosed; k++)  
  14.             {  
  15.                 if(F[j][k] < F[j-1][k-array[i-1]]+array[i-1])  
  16.                 {  
  17.                     F[j][k] = F[j-1][k-array[i-1]]+array[i-1];  
  18.                     Path[i][j][k] = 1;  
  19.                 }  
  20.             }  
  21.         }  
  22.     }  
  23.   
  24.          //打印调整后的其中一个数组  
  25.     int i = nLen, j = nLen/2, k = nToBeClosed;  
  26.     while(i > 0 && j > 0 && k > 0)  
  27.     {  
  28.         if(Path[i][j][k] == 1)  
  29.         {  
  30.             cout << array[i-1] << "\t";  
  31.             k -= array[i-1];  
  32.             j--;  
  33.         }  
  34.         i--;  
  35.     }  
  36.     cout << endl;  
  37.       
  38.     int nRet = F[nLen/2][nToBeClosed];  
  39.     DestroyTwoDimArray(F,nLen/2+1); //销毁二维状态表  
  40.     DestroyThreeDimArray(Path,nLen+1,nLen/2+1); //销毁三维轨迹表  
  41.     return nRet;  
  42. }  

测试代码

[cpp]  view plain copy
  1. int main()  
  2. {  
  3.     int array[] = {1,5,7,8,9,6,3,11,20,17};  
  4.     int nSum = 0;  
  5.     for(int i = 0; i < sizeof(array)/sizeof(int); i++)  
  6.         nSum += array[i];  
  7.     int nToBeClosed = nSum/2;  
  8.   
  9.     cout << Fun(array,sizeof(array)/sizeof(int),nToBeClosed) << endl;  
  10.     cout << Fun2(array,sizeof(array)/sizeof(int),nToBeClosed) << endl;  
  11.     return 0;  
  12. }  
数组分割问题(另一种说法是交换两个数组元素使两个数组和的差最小) <br />一、数组分割问题:(原帖见http://www.cppblog.com/baby-fly/archive/2009/09/24/92392.html)<br />题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。<br />假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:<br />S(k, 1) = {A[i] | 1<= i <= 阅读详情

相关推荐

从临床试验到互联网AB测试:边缘结构模型(MSM)如何解决‘时依性混杂’这个老大难问题

本文探讨边缘结构模型(MSM)如何解决时依性混杂问题,适用于临床试验和互联网AB测试。通过逆概率加权(IPTW)等方法,MSM能有效剥离混杂效应,准确评估长期干预效果。文章结合跨领域案例,详细解析MSM的核心原理、实施步骤及在推荐算法效果评估中的实战应用,帮助读者掌握这一先进因果推断工具。

weixin_28725949的博客 208

将数组分成两部分,使得这两部分的和的差最小

将数组分成两部分,使得这两部分的和的差最小 将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小。 这个问题可以转化为求数组的一个子集,使得这个子集中的元素的和尽可能接近sum/2,其中sum为数组中所有元素的和。这样转换之后这个问题就很类似0-1背包问题了:在n件物品中找到m件物品,他们的可以装入背包中,且总价值最大不过这里不考虑价值,就考虑使得这些元素的和尽量接近s

weixin_43310882 2755

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 183

将一个数组分成2个数组,使得2个数组的差值最小

/** * 用java写个程序,将一个数组分成2个数组,使得2个数组的差值最小 * 思路是: 1).先求出数组的总和sum, sum/2=mid 2).然后将数组的元素跟mid比较,取出跟mid最接近的元素,放在第一个小数组里,然后在原来数组删除刚刚被取出的元素,更新原来数组 3).接着再取出离mid最近的元素,放在第二个小数组,在原数组中删...

zhaoyunfei1的博客 1万+

在Pycharm中配置Pyqt5工具(2023年新版教程)

在Pycharm中配置Pyqt5相关的三个工具:QtDesigner、PyUIC、PYRCC

网络技术和Python 2万+

AOA(Angle of Arrival,到达角)定位算法及其误差分析的原理和MATLAB仿真_aoa定位算法

如图所示,有基站 S 1 ( x 1 , y 1 , z 1 ) , S 2 ( x 2 , y 2 , z 2 ) S_1(x_1,y_1,z_1),S_2(x_2,y_2,z_2) S1​(x1​,y1​,z1​),S2​(x2​,y2​,z2​),目标 T ( x , y , z ) T(x,y,z) T(x,y,z)。2+(z_1-z_2)^2} step1:两基站间的距离L=(x1−x2)2+(y1​−y2​)2+(z1​−z2​)2。

2401_87555613的博客 1483

和差值最小子数组划分

有一个数列,要采取怎样的划分方法把它分成2个数列,使得2个数列的各自之和的差最小。 比如一个数列(5,8,13,27,14),通过分成(5,13,14)和(8,27),这样2个数列各自的和再作差就等于35-32=3,这样差值最小。 暂时有两种想法可以做,现在只给出第一种的代码(C#) 1.      动态规划 (1)就是根据输入数组的长度(N),把这个问题看成一个N歩动态规划的问题。 (

newbie724的专栏 4417

【基于51】红外寻迹智能小车 - 代码篇

这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。

ZER00000001的博客 3万+

leecode416. 分割等和子集

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/par

TImeless的博客 212

软件测试面试题之易错题

(1)白盒测试:又称功能功能 测试、数据驱动测试和行为测试,是一种从用户观点出发的测试,被测程序为黑盒子, 通过测试来检测每个功能是否能够正常使用。(2)黑盒测试:又称结构测试和逻辑驱动 测试,是知道产品内部工作过程,通过测试来检测产品内部动作是否按照规格说明书 的规定去正常运行。(1)、测试需求分析;(2)动态白盒测试:需要对各个模块功能、模块间的接口、局部数据结构、主要执行路径、 错误处理等方面的测试。(2) 集成测试所测试的对象是模块间的接口,其目的是在找出在模块接口上面,包括整体体系结构上的问题;

m0_37449634的博客 679

Open Dynamics Engine(ODE)物理引擎教程(1)--下载与安装准备

引言 ODE是一个免费的工业级库,用于模拟关节式刚体动力学,例如地面车辆、腿部生物和虚拟现实环境中的移动对象。它具有快速、灵活、健壮和独立于平台的特点,具有先进的关节、摩擦接触和内置的碰撞检测功能。 项目主页:http://www.ode.org/ 线上手册:http://ode.org/wiki/index.php?title=Manual 本教程为博主亲自亲测过程的总结,转载请注明出处! ...

腿足机器人领域 2216

代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集

数组在推导的时候一定是取价值最大的数,如果题目给的价值都是正整数那么。,则无论是什么物品都放不下,不能产生任何价值,直接为默认值。,其他下标应该初始化多少呢?的背包,所背的物品价值可以最大为。的背包,价值总和最大是多少。,如果背包容量不够,则设置为。的物品里任意取,放进容量为。初始化第一列:对应背包容量。所背的物品的最大价值就是。初始化第一行:对应物品。非0下标都初始化为0。

weixin_44041958的博客 565

从 Integrated Configuration 到 Integration Flow,SAP PI/PO 老配置迁移的一次温和重构

很多还在运行 SAP PI/PO 的系统,Integration Directory 里都积累了不少 Integrated Configuration,也就是日常项目里常说的 ICO。它们可能稳定运行了多年,负责把采购订单、物料主数据、客户主数据、发票、发货通知从一个系统送到另一个系统。问题在于,ICO 这种对象很实用,却不够直观。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 99

数组分割—详细介绍(C语言实现)

这主要结合《编程之美-2.18数组分割》来实现,个人觉得《编程之美》中讲得不是特别详细,本人结合新浪微博中“数组分割问题-详细版”的介绍以及自己根据0-1背包问题作出如下实现思想,其中主要思想还是要感谢新浪微博中“数组分割问题-详细版,http://blog.sina.com.cn/s/blog_66223402010164ux.html”的版主的介绍与分析: 《编程之美》2.18解法二中提到,

yyme411的专栏 9238

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python的split分割数组_NumPy数组的分割

在 NumPy 中,利用 split()、hsplit() 和 vsplit() 等函数可实现数组的分割操作。split() 函数该函数可沿特定的轴将数组分割为子数组。使用 split() 函数的方法如下:numpy.split(arr,indices_or_sections,axis)其中,参数 arr 表示被分割的数组,indices_or_sections 表示从 arr 数组创建的大小相同...

weixin_39929259的博客 8811

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数组分割问题

题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。 /* ArrayPartition int data[] = {1, 5, 7, 8, 9, 6, 3, 11, 20, 17}; 将一个有2n个元素的数组分割成元素个数相等(n)的两部分,使得两部分的和值最接近 @author arhaiyun date:201

arhaiyun的专栏 1118

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

动态规划之数组分割问题

题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。 拿到题目后的解题思路就是得到2N个数和的一半,记为half,然后从2N个数中找到N个数,使得N个数相想加的和小于等于但是最接近half。 一开始计算时用了以下的代码: for(int i=1;i<=n2;i++){ for(int j=ave;j>=

sf_suifeng的专栏 4875

数组分割

问题: 1. 有一个无序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为两个子数组,子数组的元素个数不限,并使两个子数组之和最接近。 1. 解法1: 由于对两个子数组和最接近的判断不太直观,我们需要对题目进行适当转化。我们知道当一个子数组之和最接近原数组之和sum的一半时,两个子数组之和是最接近的。所以转化后的题目是:从2n个数中选出任意个数,其和尽

net_assassin的专栏 5490

算法小题:数组分割问题

数组分割前言问题描述思路分析解法一解法二解法三总结 前言 好了,今天来说说一个挺有意思的题-数组分割。其本质唯一,解法不少。 问题描述 如: 思路分析 乍一看,题目描述很简单,应该也不是很难。可思来想去半天,最终也只得出了应该使 A(两个数组中较小的数组和) 尽量接近SUM/2 (数组总和的一半) 这个结论。 很简单,看官应该都相当聪明,我这就不细说了。 那还怎么解呢? 难道从小到大排序,然后往arr1子数组中放一个,在往arr2中放一个,同时控制着它们不要立平均数太远。 好吧,这个思路我试过,但是最终

xiaopan的博客 1142

编程之美数组分割问题

假设数组A[1..2N]所有元素的和是SUM。 模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。 显然: S(k, 1) = {A[i] | 1 S(k, k) = {A[1]+A[2]+…+A[k]} S(k, i) = S(k-1, i) U {A[k] + x | x属于S(k-1, i-1) } 按照这个递推公式来计算,最后找出集合S

imzoer的专栏 2761

将一个数组分割成等长的多个数组

  有时候我们为了方便可能会把一些数据采用字符串的形式拼接成一个,传到后台时进行分割处理,处理完直接拿来用即可。这是指只用一条数据的情况下,有时候又可能是多条数据,就比如要保存某个订单的明细数据,这时候我们需要在前台传来的数据中分割出每条明细数据,然后去保存每条明细数据。下面分享一个分割这种存在多条数据的方法。   下面是封装好的用来按长度分割数组的方法,需要传两个参数,分别是需要分割的数组以及分...

qq_41708308的博客 5778

golang实现数组分割

golang 数组分割 需求:给定一个数组和一个正整数,要求把数组分割成多个正整数大小的数组,如果不够分,则最后一个数组分到剩余的所有元素。 示例1: 数组:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],正整数:2 期望结果: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] 示例2: 数组:[1, 2, 3, 4, 5, 6, 7, 8, 9],正整数:2 期望结果: [[1, 2], [3, 4], [5, 6], [7, 8], [9]

小白的成长之路 6556

数组分割 java_分割java数组

Java 数组1. 数组: 形同类型数据的集合叫做数组2 定义数组的方式2.1 int[] a = new int[10];2.2 int a[] = new int[10]2.3 type[] 变量名 ={new type[]}{逗号分割的初始化列表};红色可以省略type[] 变量名 = ...文章zting科技2017-11-10515浏览量鲁卡斯队列求黄金分割数这是2012年Java...

weixin_28973627的博客 3056
上一篇: 进程与线程的区别联系
下一篇: 内排序算法小结
otuhacker
博客等级 码龄18年 21粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值