多数组K大数

来源:互联网 发布:uml数据库建模 编辑:程序博客网 时间:2024/05/01 08:52

题目描述

给定两个有序数组arr1和arr2,在给定一个整数k,返回两个数组的所有数中第K小的数。
例如:
arr1 = {1,2,3,4,5};
arr2 = {3,4,5};
K = 1;
因为1为所有数中最小的,所以返回1;

arr1 = {1,2,3};
arr2 = {3,4,5,6};
K = 4;
因为3为所有数中第4小的数,所以返回3;

要求:如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(min{M,N}))。

//多数组K大数    public int findKthNum(int[] arr1, int[] arr2, int kth) {        int len1 = arr1.length;        int len2 = arr2.length;        int k = 0;        int i =0;        int j =0;        int result;        while (i < len1 && j < len2) {            if (arr1[i] < arr2[j]) {                result = arr1[i];                ++i;            }else {                result = arr2[j];                ++j;            }            ++k;            if (k == kth) {                return result;            }        }        while (i < len1) {            ++k;            if (k == kth) {                return arr1[i];            }            ++i;        }        while (j < len2) {            ++k;            if (k == kth) {                return arr2[j];            }            ++j;        }        return 0;    }
0 0
原创粉丝点击