java数组合并排序_Java将两排序数组合并
早些天给深圳芒果网投了一份简历,接到了面试电话,经过三轮面试,最后也拿到了offer。前两轮面试还好,问的问题都还答的出,到第三轮的时候,出了一道算法题,可能太紧张,思考许久也只给出了解题思路,没有将具体代码想明白,回来花了些时间写了下,记录下来,以防以后忘记。
题目很简单,如下:
数组A与数组B均已排好序,用最有效率的办法将其合并成为数组C,要考虑到重复的数字将其去重
我的代码如下:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
int[] a = { 1, 3, 5, 7, 9, 10, 11, 22 };
int[] b = { 2, 5, 7, 8, 9 };
System.out.print("合并前的数组A:");
for (int data : a) {
System.out.print(data + " ");
}
System.out.println();
System.out.print("合并前的数组B:");
for (int data : b) {
System.out.print(data + " ");
}
List c = sort(a, b);
System.out.println();
System.out.print("合并后的数组C:");
for (int data : c) {
System.out.print(data + " ");
}
}
/**
* 对两个有序数组进行合并
*
* @param a
* @param b
* @return 合并后的排序数组
*/
private static List sort(int[] a, int[] b) {
// 用于返回的新数组,长度可能不为a,b数组之和,因为可能有重复的数字需要去掉
List c = new ArrayList();
// a数组下标
int aIndex = 0;
// b数组下标
int bIndex = 0;
// 对a、b两数组的值进行比较,并将小的值加到c,并将该数组下标+1,
// 如果相等,则将其任意一个加到c,两数组下标均+1
// 如果下标超出该数组长度,则退出循环
while (true) {
if (aIndex > a.length - 1 || bIndex > b.length - 1) {
break;
}
if (a[aIndex] < b[bIndex]) {
c.add(a[aIndex]);
aIndex++;
} else if (a[aIndex] > b[bIndex]) {
c.add(b[bIndex]);
bIndex++;
} else {
c.add(a[aIndex]);
aIndex++;
bIndex++;
}
}
// 将没有超出数组下标的数组其余全部加到数组c中
// 如果a数组还有数字没有处理
if (aIndex <= a.length - 1) {
for (int i = aIndex; i <= a.length - 1; i++) {
c.add(a[i]);
}
// 如果b数组中还有数字没有处理
} else if (bIndex <= b.length - 1) {
for (int i = bIndex; i <= b.length - 1; i++) {
c.add(b[i]);
}
}
return c;
}
}
java数组合并排序_Java将两排序数组合并相关推荐
- java数组的扩容,将两个数组合并成一个数组
java数组的扩容,将两个数组合并成一个数组 //将下列两个数组合成一个数组 public class Test04 {public static void main(String[] args) { ...
- c语言怎么把两个数组连接到一起,连接两个数组的方法
可以直接连接的叫链表 数组是顺序存储的,只能先声明一个新数组,容量是那两个数组的容量和. Labview 怎么连接两个不同维度的数组啊的? 对于可变数组长度,有个方法是先建一个空数组,然后利用Buil ...
- java 两个list排序_java实现两个不同list对象合并后并排序
工作上遇到一个要求两个不同list对象合并后并排序 1.问题描述 从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序. 2.思路 从数据库中查询到的数据放到各自list中, ...
- java 数据合并算法_Java与算法之(11) - 合并排序
天下事,合久必分,分久必合.合并排序的基本思想正是先分再合. 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序.合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于 ...
- java两个数组中不同的数字_java将两个数组中不同的数字去掉一个剩下的保存到一个新的数组中...
展开全部 package co; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * java ...
- java 二维链表_Java数据结构与算法----数组与链表
数据类型 1 数据类型介绍 数据类型的分类(按照结构划分):线性结构和非线性结构 线性结构:线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序 ...
- java 数组下标 变量_Java基础语法:数组
一.简介 描述: 数组是相同类型数据的有序集合. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 基本特点: 数组的长度是确定的.数组一旦被创建,它的大小就是不可以改变的. ...
- java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...
此类实现: 输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组. 并交换两个子数组的位置,保持子数组中的元素序号不变. 如:原数组为7,9,8,5,3,2 以下标3为分割点, ...
- java二维数组怎么看_java、二维数组详解!
/* java 二维数组的概念 使用方法! 1.什么是二维数组? 答案:数组的数组! 他的每一个元素都是数组!二维数组是(存储一维数组的)一维数组. 2.如何定义?(以二维数组为列) int arr[ ...
最新文章
- ubuntu 编译源码包 dsc diff.gz orig.tar.gz
- eclipse系列: Cannot change version of project facet Dynamic web的解决方法
- uva 707(记忆化搜索)
- Nginx 和 PHP的安装配置
- POI实现Excel导入Cannot get a text value from a numeric cell
- c++学习笔记之成员函数
- SpringBatch 写xml文件(StaxEventItemWriter)用法(十四)
- Smarty中的ob_start问题
- 容器源码分析之ArrayList(二)
- c++ 命名规则 private_【译】代码中如何写出更有意义的命名
- Linux系统文件编程(1)
- ajax eval html,Ajax eval的应用示例
- 喜用神最正确的算法_各种电磁仿真算法的优缺点和适用范围(FDTD, FEM和MOM等)...
- ShaderLab学习小结(四)简单产生阴影
- 【入门教程】无人机烧录过程
- java中ImageIcon路径问题
- 优秀的代码是如何分层的?
- 计算机网络 第四章网络层笔记
- 朗文3000词汇表带音标_SBS朗文国际英语教程第二册单词表(带音标)
- 栈的主要特点及实例应用