原始问题是here
以下代码段的空间复杂性是多少?我知道时间复杂度为O(log(m+n))
。我认为空间复杂度也是O(log(m + n))
,但我不确定。
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int lens1, lens2, sumLens;
lens1 = nums1.length;
lens2 = nums2.length;
sumLens = nums1.length + nums2.length;
if (sumLens % 2 != 0) {
return findKthSmallest(nums1, 0, lens1, nums2, 0, lens2, sumLens / 2 + 1);
} else {
return (findKthSmallest(nums1, 0, lens1, nums2, 0, lens2, sumLens / 2 + 1) + findKthSmallest(nums1, 0, lens1, nums2, 0, lens2, sumLens / 2)) / 2.0;
}
}
private int findKthSmallest(int[] nums1, int begin1, int end1, int[] nums2, int begin2, int end2, int k) {
if (end1 > end2) {
return findKthSmallest(nums2, begin2, end2, nums1, begin1, end1, k);
}
if (end1 == 0) {
return nums2[begin2 + k - 1];
}
if (k == 1) {
return Math.min(nums1[begin1], nums2[begin2]);
}
int partA = Math.min(k / 2, end1);
int partB = k - partA;
if (nums1[begin1 + partA - 1] == nums2[begin2 + partB - 1]) {
return nums1[begin1 + partA - 1];
} else if (nums1[begin1 + partA - 1] > nums2[begin2 + partB - 1]) {
return findKthSmallest(nums1, begin1, end1, nums2, begin2 + partB, end2 - partB, k - partB);
} else {
return findKthSmallest(nums1, begin1 + partA, end1 - partA, nums2, begin2, end2, k - partA);
}
}
答案 0 :(得分:0)
初看起来,由于没有使用辅助数据结构,因此该算法似乎是就地的,因此具有O(1)空间复杂度。
- 编辑 -
因此,对于每个递归调用,将向调用堆栈添加一个恒定大小的数据块,从而将空间增加为O(lg(m + n))的调用数。