您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
合并两个有序数组(图文)
第十三双眼睛2023-11-25【数据结构与算法】人已围观
简介合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
第一种方法是:先将数组2合并到数组1中1去,然后对数组1进行排序。代码如下:
第二种方法,另外创建一个数组,作为数组1的备份,遍历两个数组,将两个数组中的元素进行比较,将小的元素放到数组1中去。
最后一种方法,就是,从后向前遍历两个数组,挨个比较,将大的元素放到数组的末尾。代码如下:
public static void method1(int[] nums1, int m, int[] nums2, int n) { int index = 0; for (int i = m; i < nums1.length; i++) { nums1[i] = nums2[index]; index ++; } Arrays.sort(nums1); } |
第二种方法,另外创建一个数组,作为数组1的备份,遍历两个数组,将两个数组中的元素进行比较,将小的元素放到数组1中去。
public static void method2(int[] nums1, int m, int[] nums2, int n) { int[] nums1copy = Arrays.copyOf(nums1,nums1.length); int i = 0; int j = 0; int k = 0; while (true) { if (i >= m || j >= n) { break; } if (nums1copy[i] <= nums2[j]) { nums1[k] = nums1copy[i]; i ++; } else { nums1[k] = nums2[j]; j ++; } k ++; } if (i >= m) { for (; k < nums1.length; k ++) { nums1[k] = nums2[j]; j ++; } } if (j >= n) { for (; k < nums1.length; k ++) { nums1[k] = nums1copy[i]; i ++; } } } |
最后一种方法,就是,从后向前遍历两个数组,挨个比较,将大的元素放到数组的末尾。代码如下:
public static void method3(int[] nums1, int m, int[] nums2, int n) { int i = m-1; int j = n-1; int k = nums1.length - 1; while (true) { if (i < 0 || j < 0) { break; } if (nums1[i] >= nums2[j]) { nums1[k] = nums1[i]; i --; } else { nums1[k] = nums2[j]; j --; } k --; } } |
Tags:
很赞哦! ()
相关文章
随机图文
-
搜索插入位置(图文)
搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 -
单链表(图文)
链表 -
快乐数(图文)
快乐数 编写一个算法来判断一个数 n 是不是快乐数。 快乐数定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 -
x的平方根(图文)
x的平方根