20220429, 不通过
|
```javascript
/**
- @param {number[]} nums1
- @param {number[]} nums2
@return {number} */ // 21:25 -> var findMedianSortedArrays = function(nums1, nums2) { const len1 = nums1.length; const len2 = nums2.length; const len = len1 + len2; if (len1 > len2) { return findMedianSortedArrays(nums2, nums1); } let start = 0, end = len1 -1; // while(start < end) { // bug: while(start <= end) { let i = (start + end) >> 2; let j = ((len1 + len2 + 1) >> 2) - i; // const l1 = i < 0 ? -Infinity : nums1[i-1]; // bug: const l1 = i < 1 ? -Infinity : nums1[i-1]; const r1 = i > len1 - 1 ? Infinity : nums1[i]; // const l2 = j < 0 ? -Infinity: nums2[j-1]; // bug const l2 = j < 1 ? -Infinity: nums2[j-1]; const r2 = j > len2 - 1 ? Infinity : nums2[j]; console.log(l1, l2, r1, r2) if(l1 > r2) { start—; } else if(l2 > r2) { end—; } else { return len % 2 === 0 ? ((Math.max(l1, l2) + Math.min(r1, r2)) / 2) : Math.max(l1, l2); } } };
改成能通过:```javascript
// 21:25 -> 21:57
var findMedianSortedArrays = function(nums1, nums2) {
const len1 = nums1.length;
const len2 = nums2.length;
const len = len1 + len2;
if (len1 > len2) {
return findMedianSortedArrays(nums2, nums1);
}
// let start = 0, end = len1 -1;
let start = 0, end = len1;
let i; let j;
// while(start < end) { // bug:
while(start <= end) {
// let i = (start + end) >> 2;
// let j = ((len1 + len2 + 1) >> 2) - i;
i = (start + end) >> 1;
j = ((len + 1) >> 1) - i;
// const l1 = i < 0 ? -Infinity : nums1[i-1]; // bug:
// const l1 = i < 1 ? -Infinity : nums1[i-1];
const l1 = i === 0 ? -Infinity : nums1[i-1];
// const r1 = i > len1 - 1 ? Infinity : nums1[i];
const r1 = i === len1 ? Infinity : nums1[i];
// const l2 = j < 0 ? -Infinity: nums2[j-1]; // bug
// const l2 = j < 1 ? -Infinity: nums2[j-1];
const l2 = j === 0 ? -Infinity: nums2[j-1];
// const r2 = j > len2 - 1 ? Infinity : nums2[j];
const r2 = j === len2 ? Infinity : nums2[j];
if(l1 > r2) {
// start--;
end = i - 1;
// } else if(l2 > r2) {
}else if(l2 > r1){
// end--;
start = i + 1;
} else {
return len % 2 === 0 ? ((Math.max(l1, l2) + Math.min(r1, r2)) / 2) : Math.max(l1, l2);
}
}
};
| | —- |