问题描述: 将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。

/*** @ Author zhangsf* @CreateTime 2019/9/20 - 8:10 PM*/
package com.bjut.qiu;import java.util.Arrays;
import java.util.Scanner;//        2
//        4
//        5 9 4 7
//        8
//        9 13 18 10 12 4 18 3
public class TX_Question_3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//代表测试用例个数int T = sc.nextInt();int n;int output[][]=new int [T][2];for (int i = 0; i < T; i++) {//每一个测试用例的长度n = sc.nextInt();int count[]= new int[n];sc.nextLine();for (int j = 0; j < n; j++) {count[j]=sc.nextInt();}output[i]=match(count);}for (int i = 0; i <output.length ; i++) {for (int j = 0; j <output[i].length ; j++) {System.out.println(output[i][j]);}}}private static int[] match(int[] arr) {int sum = Arrays.stream(arr).sum();int len =arr.length;int halfOfSum=sum/2;int matrix_firstDimensionLen=len+1;int matrix_secondDimensionLen=halfOfSum+1;int[][] matrix= new int[matrix_firstDimensionLen][matrix_secondDimensionLen];for (int i = 0; i < matrix[0].length; i++) {matrix[0][i]=0;}for (int i = 0; i < matrix.length; i++) {matrix[i][0]=0;}for (int i = 1; i <matrix_firstDimensionLen ; i++) {for (int j = 1; j < matrix_secondDimensionLen; j++) {matrix[i][j]=matrix[i-1][j];if (j-arr[i-1]>=0&& matrix[i-1][j-arr[i-1]]+arr[i-1]>matrix[i][j]){matrix[i][j] = matrix[i-1][j-arr[i-1]]+arr[i-1];}}}
//        for (int i = 0; i <matrix.length ; i++) {
//            for (int j = 0; j < matrix[i].length; j++) {
//                System.out.println(matrix[i][j]+"\t");
//            }
//            System.out.println(" ");
//        }return new int []{matrix[len][halfOfSum],(sum-matrix[len][halfOfSum])};}}

输入的两个数组分别为:

5 9 4 7   分割为两部分为 12 13
9 13 18 10 12 4 18 3   分割为两部分为 43 44

牛客_求将一个数组分割为两个差值最小的部分相关推荐

  1. 在一个数组中找 差值最大的两个数 差值最小的两个数 推广到 点对

    先求差值最大的: 1.找出最大值和最小值 然后做差,  每次比较相邻的两个数(比如先0,1  然后2,3),然后每次比较记录下最大和最小的差值,可以比较1.5N次得到结果,和分为奇数偶数位比较一样的复 ...

  2. 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...

    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0: 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1 ...

  3. 【最短路dij】牛客_免费机票

    牛客_免费机票 题意:求一张无向有权图中从起点到终点的最短路.(其中有权值为0的 k 条边,但是只能走最多一条) 思路:我们维护普通边中起点到各点的最短路,以及终点到各点的最短路.然后我们跑一个for ...

  4. 牛客题霸 [ 调整数组顺序使奇数位于偶数前面] C++题解/答案

    牛客题霸 [ 调整数组顺序使奇数位于偶数前面] C++题解/答案 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保 ...

  5. 牛客题霸 [ 旋转数组的最小数字] C++题解/答案

    牛客题霸 [ 旋转数组的最小数字] C++题解/答案 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOT ...

  6. 牛客题霸 [ 旋转数组] C++题解/答案

    牛客题霸 [ 旋转数组] C++题解/答案 题目描述 一个数组A中存有N(N&gt0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A ...

  7. Java中如何将一个数组分割成多个等长度的数组

    Java中如何将一个数组分割成多个等长度的数组,最后剩下的为一个素组 先看图 分析数据 提取公式 分装代码 1.如下我们需求 最近朋友android项目中有一个需求如下: 这一个长集合[item0, ...

  8. 牛客网数据库SQL实战54——查找排除当前最大、最小salary之后的员工的平均工资avg_salary

    牛客网数据库SQL实战54--查找排除当前最大.最小salary之后的员工的平均工资avg_salary 题目描述 查找排除当前最大.最小salary之后的员工的平均工资avg_salary. CRE ...

  9. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

最新文章

  1. linux shell数据重定向(输入重定向与输出重定向)详细分析
  2. 《数学建模:基于R》一一2.1 回归分析
  3. css案例学习之relative与absolute
  4. mysql初始化root 密码是多少_Mysql初始化root密码和允许远程访问
  5. python cnn识别图像_笨方法学习CNN图像识别(一)—— 图片预处理
  6. 如何在Telegram机器人中设置推送通知
  7. volatile指令重排_面试:为了进阿里,重新翻阅了Volatile与Synchro
  8. 【实战】Pytorch BiLSTM + CRF做NER
  9. 服务提供者框架讲解 之 myJDBC
  10. 求长方形和正方形的面积
  11. vue3+ts 实现防抖功能
  12. 【IT之路】微信小程序之美化
  13. 在Vue中使用 createjs
  14. Android谷歌推送
  15. POJ2228 Naptime 【例题精讲】
  16. ai人工智能将替代人类_只有人工智能才能将我们从假货世界中拯救出来(人工智能也在创造世界)...
  17. 图文详解在VMware Workstation 14 虚拟机上安装Kali Linux黑客专用系统
  18. html 手写签名插件jSignature
  19. 计算机桌面等检查,计算机等级考试(国家)-桌面检查、代码检查、走查与评审...
  20. EDIUS中的视频如何实现90度旋转

热门文章

  1. CANOpen SDO
  2. 区块链开发工程师和人工智能算法工程师,哪个会在未来 5 年收入更高?
  3. 哪些APP需要做ASO优化?
  4. dos的cd命令输入cd d: 怎么不能切换到D盘了?
  5. Matlab之netCDF格式文件读取方法
  6. 自然数e这家伙怎么蹦跶出来的?
  7. O2OA二次开发(一)前后端源码打包部署命令
  8. 百度病了,必应挂了,Yandex疯了。
  9. 安卓开发常用的adb命令
  10. Python实现烟花效果,祝大家2021年,牛年大吉。