给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2\n中的元素数目。

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2\n中的元素数目。给出 O(1)复杂度方法


public class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1;
        int j = n - 1;
        int k = m + n - 1;

        while (i >= 0 && j >= 0) {
            if (nums1[i] > nums2[j]) {
                nums1[k--] = nums1[i--];
            } else {
                nums1[k--] = nums2[j--];
            }
        }

        while (j >= 0) {
            nums1[k--] = nums2[j--];
        }
    }
}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7609084
  • 除此之外, 这篇博客: 字符串相乘:2种解题思路中的 第二种:利用乘法公式,把num1,num2的每个位相乘的结果放到在数组对应的偏移位上,最终数组上的值就是相乘的结果。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • num1的第i位和num2的第j位相乘的结果在乘积中的位置是 [i+j, i+j+1]
    例如 “123” * “45”,  123的第3位 num1[2] = 3 和45的第2位 num2[1] = 5 乘积 15 存放在数组的 muls[3], muls[4]中

    数组索引 0 1 2 3 4  
      
    num1        1 2 3
    num2          4 5
            ---------
    3*5           1 5
    2*5         1 0
    1*5       0 5
            ---------
    3*4         1 2
    2*4       0 8
    1*4     0 4
            ---------
    结果     0 5 5 3 5