LeetCode 精选TOP面试题 算法题 88.合并两个有序数组 -算法&测试-easy模式

LeetCode 精选TOP面试题 算法题 88.合并两个有序数组 -算法&测试-easy模式

给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。
说明:
nums1和nums2的有效元素数量分别为m和n;
你可以假设nums1有足够的空间( 空间>=(m+n) )来保存nums2中的元素。
示例:nums1 = [1,2,3,0,0,0] nums2 = [2,5,6]
输出:[1,2,2,3,5,6]

package leetcode.easy;

//import java.util.ArrayList;
import java.util.Arrays;
//import java.util.List;

//88.合并两个有序数组
public class Solution088 {
	public static void main(String[] args) {
		int[] nums1= new int[6];
		for (int i = 0; i < 3; i++) {
			nums1[i]=i+1;
		}
		int[] nums2= {2,5,6};
		S088MergeTwoArrays testMergeTwoArrays = new S088MergeTwoArrays();
		System.out.println(Arrays.toString(testMergeTwoArrays.mergeArr(nums1, 3, nums2, 3)));
	}
}

class S088MergeTwoArrays{
	//法1:合并后排序 O((m+n)log(m+n))
	//参数要求:nums1= {1,2,3,0,0,0},长度=m+n,多出来的0也会被排序; nums2= {2,5,6}
	public int[] mergeTwoArrays(int[] nums1,int m,int[] nums2,int n) {//m n为有效数据长度
		System.arraycopy(nums2, 0, nums1, m, n);
		//将nums2从下标0开始的数 拷贝到数组nums1,开始的位置是下标m,一共拷贝n个数
		Arrays.sort(nums1);
		return nums1;
	}
	
	
	//法2:三个指针 两个指针从两数组有数据的的尾部开始遍历,比较后填入nums1的尾部
	//参数要求:nums1.length = m+n
	public int[] mergeArr(int[] nums1,int m,int[] nums2,int n) {
		int index1=m-1;
		int index2=n-1;
		int index=m+n-1;
		while(index1>=0 && index2>=0) {
			if (nums1[index1]>nums2[index2]) {
				nums1[index]=nums1[index1];
				index1--;
			}else {
				nums1[index]=nums2[index2];
				index2--;
			}
			index--;
			//i--: 先计算再-1
//			nums1[index--] = nums1[index1]>nums2[index2] ? nums1[index1--] : nums2[index2--];
		}
		//nums1遍历完,nums2的数据还没拷贝完,直接全部拷贝到nums1的前部
		//将nums2从下标0开始的数 拷贝到数组nums1,开始的位置是下标0,一共拷贝(index2+1)个数
		System.arraycopy(nums2, 0, nums1, 0, index2+1);
		return nums1;
	}
	
	/*
	//法3:归并排序思想 需要额外空间
	//参数要求:int[] nums1= {1,2,3}; int[] nums2= {2,5,6};
	//可以先遍历nums1把非0的数全部取出放到新数组中,比较新数组和nums2,结果放入nums1
	public List mergeTwoSortedArrays(int[] nums1,int[] nums2) {
		List list = new ArrayList();
		int i,j;
		for ( i=0,j=0; i < nums1.length && j

参考:

  1. https://leetcode-cn.com/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetcode
  2. https://leetcode-cn.com/problems/merge-sorted-array/solution/hua-jie-suan-fa-88-he-bing-liang-ge-you-xu-shu-zu-

你可能感兴趣的:(LeetCode算法题,数据结构,leetcode,java,算法,数组)