dart 实现88_合并两个有序数组

[toc]

题目:https://leetcode-cn.com/problems/merge-sorted-array/
要求
合并两个给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

思路

  • 双索引
  • 复制一个数组出来
  • 遍历两个数组赋值

代码


class LeetCode88 {
  static List<int> num1Copy = [];
  static merge(List<int> nums1, int m, List<int> nums2, int n) {
    int num1Index = 0;
    int num2Index = 0;
    num1Copy.clear();
    //备份num1数组
    for (var i = 0; i < m; i++) {
      num1Copy.add(nums1[i]);
    }
    int num1CopyIndex = 0; //记录备份数组索引
    //两个数组都得比较完
    while (num2Index < n || num1CopyIndex < m) {
      if (num1CopyIndex < m && num2Index < n) {
        //正常情况
        if (num1Copy[num1CopyIndex] < nums2[num2Index]) {
          nums1[num1Index] = num1Copy[num1CopyIndex];
          num1CopyIndex += 1;
        } else {
          nums1[num1Index] = nums2[num2Index];
          num2Index += 1;
        }
      } else {
        if (num1CopyIndex < m) {//num1还没比较完
          nums1[num1Index] = num1Copy[num1CopyIndex];
          num1CopyIndex += 1;
        } else {//num2还没比较完阿
          nums1[num1Index] = nums2[num2Index];
          num2Index += 1;
        }
      }
      num1Index += 1;
    }
    print(nums1);
  }
}

main(List<String> args) {
  LeetCode88.merge([2, 0], 1, [1], 1);
}

执行结果结果

[1, 2]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容