2022-10-9 周记 0x001October 9, 2022 · LifeAlgorithm LC 4. 寻找两个正序数组的中位数 分析: nums1: xxx X xxx nums2: yyy Y yyyyy 在两个数组里找第k/2个数 当X<Y时,说明第k个数一定不在数组nums1[start,k/2]里,因为nums1[start,k/2]有个k/2个数都小于Y,加上nums2[start,k/2 - 1]的个数才有k-1个数。 同理当Y<X时 细节: k分配不一定均匀,nums1数组元数可能不够k/2个 写个函数findKth(nums1, nums2, i, j, k) 确保nums1里元数个数 < nums2里元数个数 当左边数组遍历完了(i==nums1.size()) 返回nums2中的第k个数 当k==1时返回两个数组里的最小值 class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size() + nums2.size(); if (n % 2 == 0) { return (findKth(nums1, nums2, 0, 0, n / 2) + findKth(nums1, nums2, 0, 0, n / 2 + 1)) / 2.0; } else { return findKth(nums1, nums2, 0, 0, n / 2 + 1); } } int findKth(vector<int> &nums1, vector<int> &nums2, int i, int j, int k) { if (nums1.size() - i > nums2.size() - j) { return findKth(nums2, nums1, j, i, k); } if (i == nums1.size()) return nums2[j + k - 1]; if (k == 1) return std::min(nums1[i], nums2[j]); int k1 = std::min((int)nums1.size() - i, k / 2); int k2 = k - k1; if (nums1[i + k1 - 1] < nums2[j + k2 - 1]) { return findKth(nums1, nums2, i + k1, j, k2); } else { return findKth(nums1, nums2, i, j + k2, k1); } } }; Review Simple Go project layout with modules Link 了解内部包,导出包,命令行程序包。 Tip Better Code: 更好的异常日志打印 Link 解决 vscode 安装 go 插件失败问题 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct 重启 vscode, install all。 Share 征集你所知道的 Rust 学习资料、上手项目、玩具/工具、落地场景等 Link