`
fover1985
  • 浏览: 1227 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一道数组分割题

阅读更多
有一个无序、元素个数为2n订的正整数数组,要求:如何能把这个数组分割成元素个数为n的两个数组,并使子数组的和最接近?

以下是我写的代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		ArrayList heap[];
		int num[],n,i,j,sum=0,temp;
		Iterator it;
		//读取数组元素
		Scanner in = new Scanner(System.in);
		n = in.nextInt();
		num = new int[n+1];
		heap = new ArrayList[n/2+1];//用来保存从数组中取i个元素所能产生的和
		for(i=1;i<=n;i++){
			num[i] = in.nextInt();
			sum += num[i];
		}
		//初始化
		heap[0] = new ArrayList();
		heap[0].add(0);
		
		for(i=1;i<=n;i++){
			int j_max = i < n/2-1 ? i : n/2-1;
			
			for(j=j_max;j>=0;j--){
				if(heap[j] == null) heap[j] = new ArrayList();
				it = heap[j].iterator();
				while(it.hasNext()){
					temp = (Integer)(it.next());
					if(temp + num[i] < sum / 2){//只取和小于总和一般的数
						if(heap[j+1] == null) heap[j+1] = new ArrayList();
						heap[j+1].add(num[i] + temp);
					}
				}
				
			}
		}
		
		it = heap[n/2].iterator();
		int max = 0;
		while(it.hasNext()){
			temp = (Integer)it.next();
			if(temp > max) max = temp;
			
		}
		System.out.println(max + ":" + (sum-max));
	}

}



还有什么更好的方法吗?
分享到:
评论

相关推荐

    oj题.zip

    4. **140.py** - 可能是LeetCode的140题,"Word Break II"(单词拆分II),这是一道动态规划问题,需要构建一个动态规划数组来解决。 5. **139.py** - 这可能是LeetCode的139题,"Word Break"(单词拆分),与140题...

    程序员笔试常见简答题

    2. **区间合并**:这是一道数据结构和算法题,主要考察区间合并和排序。可以使用并查集或者线段树来处理这种问题,首先按区间起点排序,然后依次合并相邻的区间。 3. **最长字符串输出**:这是字符串处理和排序的...

    java面试-leetcode面试java编程题解之第4题寻找两个正序数组的中位数-java题解.zip

    本题解将深入探讨LeetCode上的第4题——“寻找两个正序数组的中位数”,这是一道涉及到数组操作和查找策略的问题,对于理解数据结构和算法有着重要意义。 首先,我们要明确“中位数”的概念。在一组数值中,中位数...

    ADVANCE 技术测试题

    本题是一道经典的图论问题,目标是在一个有向无环图中寻找一条从指定起点出发的路径,使得该路径上的节点权重之和最大。 **知识点解析**: 1. **图的基本概念**:首先需要了解图的基本构成要素,包括节点(顶点)...

    蓝桥杯java历年真题

    Java 实现串处理可以使用 String 类的相关方法,例如 toUpperCase() 方法将字符串转换为大写,split() 方法将字符串分割成多个子串,trim() 方法将字符串两端的空格去除。 3. 递归算法 递归算法是指函数调用自身的...

    全国计算机等级考试三级上机题库/上机100题

    3. **字符串分割**:找到每个字符串中的最后一个“o”字符,并将其作为分割点。 4. **字符串重组**:将字符串分为两部分,重新组合后将结果存储回原数组。 #### 题目四:字母字符串的提取与重组 **题目概述**: ...

    历年NOIP联赛第一题题目.pdf

    该题的解法是通过数学分析和计算,可以按照位数将1到n的数字范围分割开,对每个位数的范围计算x出现的次数,最后将这些次数相加即可。这道题目考察了对整数各个位数的处理和频数统计的算法。 NOIP2012年普及组第一...

    算法设计期末考试题第四章

    归并排序是一种稳定的排序算法,它通过分治策略将数组分割成两半,递归地排序每一半,然后将它们合并成一个有序数组。 #### 复杂度分析 - **时间复杂度**:归并排序的平均和最坏时间复杂度均为O(nlogn),这使得它在...

    微软面试100题

    颜色识别问题在图像处理和计算机视觉中非常常见,通常需要运用色彩空间转换、阈值分割等技术来实现。 #### 18. 面试题18:桶排序算法 桶排序是一种分布式排序算法,通过将元素分配到若干个“桶”中,然后对每个桶...

    python-leetcode面试题解之寻找两个正序数组的中位数.zip

    "寻找两个正序数组的中位数"是LeetCode上的一道经典题目,涉及到数组操作和排序算法。本题解将详细探讨这个问题的解决方案及其背后的逻辑。 首先,我们需要明确问题的要求:给定两个长度为n和m的正序数组nums1和...

    USACO月赛十年题典

    - **3.1.1 Spots**:该题要求设计一种方法来统计斑点的数量,涉及到**图像处理**或**数组操作**的相关知识。 - **3.1.2 Cowfix**:本题考察了**字符串处理**技巧,可能需要用到模式匹配算法。 - **3.1.3 Route**:...

    《数据结构》课后习题答案[收集].pdf

    - 在解答题中,有一道题目要求实现数组的反转,这可以通过两个指针分别从两端开始交换元素来实现,如参考程序所示。 5. 算法设计: - 主要考察的是如何根据给定的逻辑设计出相应的程序,如找出数组中的最大元素并...

    javascript-leetcode面试题解动态规划问题之第416题分割等和子集-题解.zip

    在本压缩包中,我们关注的是一个与JavaScript编程、LeetCode面试及动态规划相关的知识点——第416题“分割等和子集”。这是一道经典的算法问题,常见于求职面试,尤其是对于寻找前端开发职位的应聘者。下面将详细...

    计算机三级网络南开100题(最新版)

    首先,题集的开篇便通过一道涉及素数计算的编程题,引导考生进入算法设计的门槛。素数作为数学领域的一个基本概念,其计算和判断是程序员必须掌握的基础技能。在本题中,考生需要实现一个名为`num`的函数,该函数...

    蓝桥杯:2013年第四届java A组蓝桥杯省赛真题

    这是一道关于数组排序的问题,目标是将数组分为负数、0和正数三个部分,但每个部分内部无需排序。可以采用双指针法,一个指针从左侧开始,一个从右侧开始,中间位置作为0的存放位置。在遍历过程中,将元素移动到正确...

    蓝桥杯算法练习题

    在本题中,我们面临的是一个经典的动态数组问题,需要处理数组元素的修改、区间求和以及区间最大值的查询。 **问题描述:** 给定一个由`n`个格子组成的数组,初始时每个格子有一个权值。我们需要处理`m`次操作,...

    华为od最新题库.docx

    该题要求求解数组中具有相同和的所有连续子数组中的最小长度。 **核心知识点**: 1. **前缀和**:利用前缀和快速计算子数组的和。 2. **滑动窗口**:使用滑动窗口技巧来寻找符合条件的子数组。 3. **哈希表**:记录...

    Java二级南开上机100题和答案

    在备考过程中,不仅要通过做题来提高解题速度和准确度,还要注重理论知识的巩固,理解每一道题背后的原理。同时,实践操作是关键,不断动手编写代码,遇到问题及时解决,才能在实际考试中游刃有余。希望这份"Java...

    初级C++练习题

    对于初学者来说,这是一道很好的练习题,旨在帮助他们熟悉C++中的基本数据结构和算法。 **详细解析:** - **输入处理:** 首先读入一个整数`n`,表示木棍的数量。接着读入`n`个整数,表示每根木棍的长度。 - **排序...

    北邮2011复试上机真题回忆版

    处理这种问题通常可以使用字符串处理函数,如分割字符串、反转数组等方法。 2. **成绩管理** 这道题目要求实现一个成绩管理系统,可以插入成绩并查询。首先,输入一个整数T,代表有T组数据。每组数据开始时,输入...

Global site tag (gtag.js) - Google Analytics