java解一个比较特殊的数组合并题
更新时间:2014年06月11日 08:48:31 作者:
这篇文章主要介绍了java解一个比较特殊的数组合并题,需要的朋友可以参考下
给定两个排序后的数组A和B,其中A的末端有足够的空间容纳B,编写一个方法将B合并到A并排序。
拿到这个题后,最直接的想法就是比较A和B中的元素,并按顺序插入数组,直到遍历完A和B中的所有元素。但是这样做会有一个不好的地方:如果元素的插入位置在数组A的前端,那就必须将原来的数组往后移动。这会增加开销。但是我们可以使用另外的一种办法将元素插入数组A的末端。这样我们不会出现元素移动的情况!代码如下:
拿到这个题后,最直接的想法就是比较A和B中的元素,并按顺序插入数组,直到遍历完A和B中的所有元素。但是这样做会有一个不好的地方:如果元素的插入位置在数组A的前端,那就必须将原来的数组往后移动。这会增加开销。但是我们可以使用另外的一种办法将元素插入数组A的末端。这样我们不会出现元素移动的情况!代码如下:
复制代码 代码如下:
/*
* lastA:a中的实际元素数 lastB:b中的实际元素数 mergeIndex是新数组的实际空间大小
*/
public static void mergeOrder(int[] a, int[] b, int lastA, int lastB) {
int indexA = lastA - 1;
int indexB = lastB - 1;
int mergeIndex = lastA + lastB - 1;
while (indexA >= 0 && indexB >= 0) {
if (a[indexA] > b[indexB]) {
a[mergeIndex] = a[indexA];
mergeIndex --;
indexA --;
} else {
a[mergeIndex] = b[indexB];
mergeIndex --;
indexB --;
}
}
while (indexB >= 0) {
a[mergeIndex] = b[indexB];
mergeIndex --;
indexB --;
}
}
* lastA:a中的实际元素数 lastB:b中的实际元素数 mergeIndex是新数组的实际空间大小
*/
public static void mergeOrder(int[] a, int[] b, int lastA, int lastB) {
int indexA = lastA - 1;
int indexB = lastB - 1;
int mergeIndex = lastA + lastB - 1;
while (indexA >= 0 && indexB >= 0) {
if (a[indexA] > b[indexB]) {
a[mergeIndex] = a[indexA];
mergeIndex --;
indexA --;
} else {
a[mergeIndex] = b[indexB];
mergeIndex --;
indexB --;
}
}
while (indexB >= 0) {
a[mergeIndex] = b[indexB];
mergeIndex --;
indexB --;
}
}
相关文章
Spring Security+JWT如何实现前后端分离权限控制
本篇将手把手教你用 Spring Security + JWT 搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04
解决mybatisPlus 中的field-strategy配置失效问题
这篇文章主要介绍了解决mybatisPlus 中的field-strategy配置失效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-02-02
java组件commons-fileupload文件上传示例
这篇文章主要为大家详细介绍了java组件commons-fileupload实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10
Spring cloud网关gateway进行websocket路由转发规则配置过程
这篇文章主要介绍了Spring cloud网关gateway进行websocket路由转发规则配置过程,文中还通过实例代码介绍了Spring Cloud Gateway--配置路由的方法,需要的朋友可以参考下2023-04-04


最新评论