思路: 常规思路: 先将一个数组作为合并后的数组, 然后遍历第二个数组的每项元素, 一一对比, 直到找到合适的, 就插入进去; 简单思路: 设置数组C, 对比A和B数组的首项元素, 找到最小的, 就放入数组C,依次进行下去. 代码如下: - (NSArray *)mergeOrderArrayWithFirstArray: (NSMutableArray *)array1 secondArray: (NSMutableArray *)array2 { // 全为空不处理 if (!array1.…
面试题: 怎样把两个有序数组合并成有序数组呢 逻辑步骤: 1.假设两个数组为A和B 2.A和B都是从小到大的顺序进行排列 ** 1.我们可以直接比较两个数组的首元素,哪个小就把这个小元素放入可变数组. 2.把小元素所在的数组中的这个元素删除. 3.继续比较两个数组中的首元素,直到有一个数组为空.那么就停止进行比较.把另外一个不空的数组元素全部放入可变数组中即可. 实现代码: NSMutableArray *arrA = [NSMutableArray arrayWithArray:@[@1,@3…
[本文出自天外归云的博客园] 第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0.然后再把不为空的老数组中剩下的部分加到新数组的结尾.(好) 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <=…
def merge(a, b): """ 合并2个有序数组,默认a,b都是从小到大的有序数组 """ # 1.临时变量 i, j = 0, 0 # 分别标记2个数组的起始位置 na, nb = len(a), len(b) # 分别标记2个数组的长度 temp = [] # 临时存放空间 # 2.只要2个数组不为空:比较大小a[i]a[j],依次填入temp while i <= na - 1 and j <= nb - 1: if…
题目: 有两个数组A和B,假设A和B已经有序(从大到小),求A和B数组中所有数的第K大. 思路: 1.如果k为2的次幂,且A,B 的大小都大于k,那么 考虑A的前k/2个数和B的前k/2个数, 如果A[k/2]<B[k/2],说明A的前k/2个数一定在A和B总的前k个数中,因此只需要在A的k/2之后的数和B中查找第k/2大的数: 否则,说明A的前k/2个数一定在A和B总的前k个数中,因此只需要在B的k/2之后的数和A中查找第k/2大的数: 递归实现即可: 2.如果A+B的数组大小大于k 二分法,…
我的思路是: 用队列,  从(0,0)開始入队,每次出队的时候,选(1,0) (0,1) 之间最小的入队,假设是相等的都入队,假设入过队的就不入了,把出队的k个不同的输出来就可以 我測试了几组数据都是对的.可是可能还是会有BUG,或者我忽略的地方.以下是我的实现代码(假设有错,请大家积极指正) import java.util.LinkedList; import java.util.Queue; /** * 有两个序列 A 和 B,A=(a1,a2,...,ak),B=(b1,b2,...,b…
前几天看见一道面试题中要将两个有序数组合并成一个新的有序数组,首先使用了嵌套循环,之后想那样效率太低,又想出了以下思路,和大家分享下,如果有更好的方法,请留言指教: 思路: 1.新建一个数组大小为firArr和secArr之和的数组mergeArr 2.如果fistArr的第一个元素大于等于secArr的最后一个元素,则直接对mergeArr进行元素赋值 3.如果secArr的第一个元素大于secArr的最后一个元素,则直接对mergeArr进行元素赋值 4.若不满足上面两种情况,则需要进行数组…
一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/leetcode) 题意非常简单,给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 log 级别.回顾下中位数,对于一个有序数组,如果数组长度是奇数,那么中位数就是中间那个值,如果长度是偶数,就是中间两个数的平均数. O(nlogn) 最容易想到的解法是 O(nlogn) 的解…
题目:找出这两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 方法一:清奇思路,空间换时间(本人写的) cla…
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3]nums2 = [2] 则中位数是 2.0示例 2: nums1 = [1, 2]nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 来源:力扣(LeetCode) 代码献上 一定还有更好的解法 class Solutio…