0 0

两个有序的List merge的问题5

两个有序的List a,b 里面存放的是Integer类型的数字,请完成下列方法

public List merge(List a, List b){

}

要求产出一个有序的List(请注意,需要merge的List已经是有序的)
2008年7月04日 22:59

1个答案 按时间排序 按投票排序

0 0

采纳的答案

首先说一下思路:
1.因为你这个是有序的,我假定他是升序排列
2.首先建立一个新的List c,然后本别比较a和b中的值,将较小的值追加到c的末尾
3.如果a,b当前值相等,则将a,b当前的值都追加到c的末尾
4.如果a和b有一个查找到了最后,则将另一个没有到结尾的list后面的所有项都追缴到c的后面

这样可以保证速度最快,请参考:

	public List<Integer> merage(List<Integer> a, List<Integer> b) {
		List<Integer> c = new ArrayList<Integer>();
		int aIndex = 0;
		int bIndex = 0;
		while (a.size() > aIndex && b.size() > bIndex) {
			if (a.get(aIndex) < b.get(bIndex)) {
				c.add(a.get(aIndex));
				aIndex++;
			} else if (a.get(aIndex) > b.get(bIndex)) {
				c.add(b.get(bIndex));
				bIndex++;
			} else {//如果相等
				c.add(a.get(aIndex));
				c.add(b.get(bIndex));
				aIndex++;
				bIndex++;
			}
		}
		if (a.size() < aIndex) {
			for (int i = bIndex; i < b.size(); i++) {
				c.add(b.get(i));
			}
		} else {
			for (int i = aIndex; i < a.size(); i++) {
				c.add(a.get(i));
			}
		}
		System.out.println(c);
		return c;
	}

2008年7月05日 04:03

相关推荐

    MergeList_Sq.zip_MergeList Sq_MergeList_Sq

    ”明确了我们要解决的具体问题:给定两个已排序的线性表(数组或链表),目标是合并这两个表并保持非递减的排序顺序。 线性表的合并通常有两种方法:一种是基于数组的合并,另一种是基于链表的合并。对于C++编程,...

    两个有序链表序列的合并_C语言_

    在编程领域,特别是数据结构和算法中,"两个有序链表序列的合并"是一个常见的问题。这个问题要求我们合并两个已排序的链表,使得合并后的链表仍然保持非降序排列。在这里,我们主要讨论如何使用C语言来解决这个问题...

    实现两个有序单链表的合并

    这里我们关注的是如何实现两个有序单链表的合并,这是一个常见的面试题目,也是理解和优化数据处理效率的重要实践。首先,我们需要理解单链表的基本概念,然后探讨如何对其进行排序,最后学习如何合并两个已排序的...

    两个集合比较(新增、编辑、删除)

    当我们需要找出两个List之间的差异,即在第二个List中新增的元素时,可以使用`ArrayList`或`LinkedList`的`containsAll()`方法。如果第二个List包含第一个List不包含的所有元素,则这些元素是新增的。例如: ```...

    mergelist.cpp

    此外,合并链表的算法复杂度分析也很重要,比如在合并两个有序链表时,时间复杂度通常是O(n),其中n是两个链表总节点数。 另外,由于文件标题中没有明确的标签信息提供,我们无法得知这个“mergelist.cpp”文件是否...

    如何将两个有序链表并为一个有序链表

    ### 如何将两个有序链表合并为一个有序链表 #### 背景与目标 在数据结构的学习中,链表是一种重要的线性结构之一,它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。有序链表是指链表中的元素按照...

    两个有序链表序列的合并-收藏学习.docx

    ### 两个有序链表序列的合并 在计算机科学中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据元素以及指向下一个节点的链接。本篇文章将详细介绍如何合并两个已排序的链表,并提供一个C语言的...

    05 MergeList.zip

    分治法将一个复杂的问题分解为两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 2. **合并过程**:在合并排序中,首先将原始列表分为两半,然后分别对这两半...

    数据结构(Java语言描述) 案例02 有序顺序表的合并.docx

    `merge`方法接受两个已排序的`SeqList`对象(listA和listB)以及一个空的`SeqList`对象(listC)作为参数。在方法内部,我们使用while循环进行比较和插入操作。 测试类`MergeListTest`创建了两个有序数组a和b,然后...

    05 MergeList.rar

    “05 MergeList.rar”中的源代码文件可能是对以上理论知识的具体实现,通过阅读和理解代码,我们可以加深对合并列表算法的理解,掌握如何在实际问题中运用这一技术。同时,这也是提高编程技能和问题解决能力的良好...

    将两个链表的合并实验报告

    实验的核心任务是合并两个已排序的循环链表,形成一个新的有序循环链表。在这个过程中,我们需要理解链表的基本操作,如创建、插入、合并以及输出链表。 1. 链表结构: 在C语言中,链表节点通常定义为一个结构体,...

    已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C。

    根据给定的文件信息,本篇文章将详细解析如何设计一种算法来合并两个递增有序的顺序表(数组)A和B,并确保合并后的结果也是一个递增有序的顺序表C。 ### 一、问题背景 在计算机科学中,数据结构与算法是极其重要...

    list to list 将list内容移到另一个list

    例如,`$.merge()` 函数可以合并两个数组。 综上所述,`list to list` 涉及到的是列表或数组的内容迁移、复制或合并,这是编程中常见的数据操作,特别是在处理大量数据时。`listtolist.js` 文件可能提供了一些方便...

    c语言链表的基本操作之合并两个有序链表.zip

    合并两个有序链表的目的是创建一个新的链表,其中包含两个输入链表的所有元素,且新链表仍然保持排序顺序。例如,如果链表1为1-&gt;3-&gt;5,链表2为2-&gt;4-&gt;6,则合并后的链表应为1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;6。 以下是合并两个有序...

    数据结构实验报告-- 有序表合并

    - `MergeList`:核心功能函数,将两个有序顺序表La和Lb合并成一个新的有序顺序表Lc。 4. **界面设计**:程序的界面设计要求简洁易懂,所有操作提示和结果均以中文显示,提高用户体验。 5. **编码实现**:在代码中...

    合并有序单链表

    在这个场景中,提供的压缩包文件名`mergeList`可能包含了一些示例输入数据,如两个已排序的单链表的节点信息。你可以根据这些数据创建相应的链表对象,然后调用`mergeTwoLists`函数进行合并。例如,创建链表并进行...

    两个递减线性表的合并

    - `void MergeList_L(LNode* La, LNode* Lb, LNode*& Lc)` 实现了两个递减有序链表的合并操作。 - 使用三个指针 `pa`, `pb`, `pc` 分别指向链表 A、B 和结果链表 C 的当前节点。 - 比较两个链表当前节点的数据...

    7-9算法Merge1

    总结来说,"7-9算法Merge1"是归并排序的一个实现,重点在于高效地合并两个已排序的子序列,以构建一个大的有序序列。其核心是通过比较和交换元素,确保合并过程的顺序性。这个算法的时间复杂度为O(n log n),其中n是...

    Merge-linked-list.zip_linkedlist合并

    本文将详细探讨如何合并两个双向链表,以实现标题中提到的"Merge-linked-list.zip_linkedlist合并"功能。我们将通过分析描述中的代码实现,深入理解这个过程,并探讨其可扩展性。 首先,我们要了解双向链表的基本...

Global site tag (gtag.js) - Google Analytics