牛客_求将一个数组分割为两个差值最小的部分
问题描述: 将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。
/*** @ 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.找出最大值和最小值 然后做差, 每次比较相邻的两个数(比如先0,1 然后2,3),然后每次比较记录下最大和最小的差值,可以比较1.5N次得到结果,和分为奇数偶数位比较一样的复 ...
- 数组分成两组差值最小 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 ...
- 【最短路dij】牛客_免费机票
牛客_免费机票 题意:求一张无向有权图中从起点到终点的最短路.(其中有权值为0的 k 条边,但是只能走最多一条) 思路:我们维护普通边中起点到各点的最短路,以及终点到各点的最短路.然后我们跑一个for ...
- 牛客题霸 [ 调整数组顺序使奇数位于偶数前面] C++题解/答案
牛客题霸 [ 调整数组顺序使奇数位于偶数前面] C++题解/答案 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保 ...
- 牛客题霸 [ 旋转数组的最小数字] C++题解/答案
牛客题霸 [ 旋转数组的最小数字] C++题解/答案 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOT ...
- 牛客题霸 [ 旋转数组] C++题解/答案
牛客题霸 [ 旋转数组] C++题解/答案 题目描述 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A ...
- Java中如何将一个数组分割成多个等长度的数组
Java中如何将一个数组分割成多个等长度的数组,最后剩下的为一个素组 先看图 分析数据 提取公式 分装代码 1.如下我们需求 最近朋友android项目中有一个需求如下: 这一个长集合[item0, ...
- 牛客网数据库SQL实战54——查找排除当前最大、最小salary之后的员工的平均工资avg_salary
牛客网数据库SQL实战54--查找排除当前最大.最小salary之后的员工的平均工资avg_salary 题目描述 查找排除当前最大.最小salary之后的员工的平均工资avg_salary. CRE ...
- 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案
牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...
最新文章
- linux shell数据重定向(输入重定向与输出重定向)详细分析
- 《数学建模:基于R》一一2.1 回归分析
- css案例学习之relative与absolute
- mysql初始化root 密码是多少_Mysql初始化root密码和允许远程访问
- python cnn识别图像_笨方法学习CNN图像识别(一)—— 图片预处理
- 如何在Telegram机器人中设置推送通知
- volatile指令重排_面试:为了进阿里,重新翻阅了Volatile与Synchro
- 【实战】Pytorch BiLSTM + CRF做NER
- 服务提供者框架讲解 之 myJDBC
- 求长方形和正方形的面积
- vue3+ts 实现防抖功能
- 【IT之路】微信小程序之美化
- 在Vue中使用 createjs
- Android谷歌推送
- POJ2228 Naptime 【例题精讲】
- ai人工智能将替代人类_只有人工智能才能将我们从假货世界中拯救出来(人工智能也在创造世界)...
- 图文详解在VMware Workstation 14 虚拟机上安装Kali Linux黑客专用系统
- html 手写签名插件jSignature
- 计算机桌面等检查,计算机等级考试(国家)-桌面检查、代码检查、走查与评审...
- EDIUS中的视频如何实现90度旋转