arts week03

arts

Posted by Woncz on August 12, 2019

Algorithm

LeetCode算法题

There are two sorted arrays nums1 and nums2 of size m and n respectively.

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

You may assume nums1 and nums2 cannot be both empty.

Example1:

nums1 = [1, 3] nums2 = [2]

The median is 2.0

Example2:

nums1 = [1, 2] nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

Java 程序实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;

        int left = (len1 + len2 + 1) / 2;
        int right = (len1 + len2 + 2) / 2;
        
        return (findK(nums1, len1, 0, nums2, len2, 0, left) + findK(nums1, len1, 0, nums2, len2, 0, right)) * 0.5;
    }
    
    private int findK(int[] nums1, int len1, int offset1, int[] nums2, int len2, int offset2, int k) {
        if (k == 1) {
            return Math.min(offset1 < len1 ? nums1[offset1] : Integer.MAX_VALUE, offset2 < len2 ? nums2[offset2] : Integer.MAX_VALUE);
        }
        int pivot = k / 2;

        int p1 = len1 < offset1 + pivot ? Integer.MAX_VALUE : nums1[offset1 + pivot - 1];
        int p2 = len2 < offset2 + pivot ? Integer.MAX_VALUE : nums2[offset2 + pivot - 1];

        k = k - pivot;

        if (p1 < p2 ) {
            return findK(nums1, len1, offset1 + pivot, nums2, len2, offset2, k);
        } else {
            return findK(nums1, len1, offset1, nums2, len2, offset2 + pivot, k);
        }
    }
}

Review

Efficient query evaluation using a two-level retrieval process

WAND(Weak AND)算法,是上下文定向广告和内容推荐产品中非常实用的快速检索算法。其解决相关性搜索的基本思路是在检索阶段就引入某种评价函数,并以此函数的评价结果决定返回哪些候选。

Tip

架构师需要有全局思维,而不是事不关己高高挂起的听之任之的态度。

Share

基础知识