当前位置: 首页 > 编程笔记 >

iOS常用算法之两个有序数组合并(要求时间复杂度为0(n))

罗诚
2023-03-14
本文向大家介绍iOS常用算法之两个有序数组合并(要求时间复杂度为0(n)),包括了iOS常用算法之两个有序数组合并(要求时间复杂度为0(n))的使用技巧和注意事项,需要的朋友参考一下

思路:

常规思路:

先将一个数组作为合并后的数组, 然后遍历第二个数组的每项元素, 一一对比, 直到找到合适的, 就插入进去;

  简单思路: 设置数组C, 对比A和B数组的首项元素, 找到最小的, 就放入数组C,依次进行下去.

代码如下:

- (NSArray *)mergeOrderArrayWithFirstArray: (NSMutableArray *)array1 secondArray: (NSMutableArray *)array2 {
  // 全为空不处理
  if (!array1.count && !array2.count) {
    return @[];
  }
  // 一个为空返回另外一个
  if (!array1.count) {
    return array2;
  }
  if (!array2.count) {
    return array1;
  }
  NSMutableArray *endArray = [NSMutableArray array];
  while (1) {
    if ([array1[0] integerValue] < [array2[0] integerValue]) {
      [endArray addObject:array1[0]];
      [array1 removeObjectAtIndex:0];
    }else {
      [endArray addObject:array2[0]];
      [array2 removeObjectAtIndex:0];
    }
    if (!array1.count) {
      [endArray addObjectsFromArray:array2];
      break;
    }
    if (!array2.count) {
      [endArray addObjectsFromArray:array1];
      break;
    }
  }
  return endArray;
}

执行代码, 输入输出结果如下:


总结

以上所述是小编给大家介绍的iOS常用算法之两个有序数组合并(要求时间复杂度为0(n)),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 类似资料:
  • 下面的代码是我对以下问题的解决方案: 给定 2 个按升序排序的整数数组,编写一个函数,将这两个数组合并为一个更大的排序数组。例如,给定数组 = [[0, 3, 4, 31] 和 ,求解函数应返回数组 我的解决方案: 上面的解决方案运行良好。然而,我在分析我所使用的算法的最坏情况时间复杂度时遇到了一些麻烦。乍一看,它似乎具有线性时间复杂度O(n ),但是进一步观察,比较两个数组之间的元素的第一个循环

  • 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,

  • 让我们以合并排序的实现为例 a) 这种合并排序的时间复杂度是。并行化(1)和(2)会带来实际收益吗?从理论上讲,在对它们进行并行化之后,似乎最终也会出现。但实际上我们能得到什么好处吗? b) 这种合并排序的空间复杂度是。但是,如果我选择使用链表执行就地合并排序(不确定是否可以合理地使用数组),空间复杂性是否会变得,因为您必须考虑递归堆栈帧大小?既然它不能超过64,我们能把当作常数吗?我可能在几个地

  • 我最近了解了杂耍算法如何在线性时间内旋转数组 时间复杂度如何线性???

  • 本文向大家介绍归并算法之有序数组合并算法实现,包括了归并算法之有序数组合并算法实现的使用技巧和注意事项,需要的朋友参考一下 归并算法之有序数组合并算法实现 一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个数组,找到这两个数组中各个元素在合并数组中的位置并插入,直到某个数组指针到

  • 这是一个使用两个递归调用对数组进行排序的算法。我试图粗略地计算其时间复杂度,但不确定。我知道两个for循环需要n次,但是递归调用怎么办,我如何计算它们呢?任何人都可以用简单的数学方法帮助计算。