在两个升序数组中找到第k小的数据
来源:互联网 发布:金投顾软件 编辑:程序博客网 时间:2024/06/12 22:29
public static void main(String[] args) { int[] a=new int[]{1,2,3,4,5,6,11,12,13,14,15,21,22}; int[] b=new int[]{7,8,9,10,16,17,18,19,20}; System.out.println(kth_data(a, b, a.length, b.length, 17)); } /** * 保证数组a为长度较小的数组,这样在算法实现时,只需考虑a的下标是否出界,简化问题 */ public static int kth_data(int[] a,int[] b,int al,int bl,int k){ if(al<=bl){ return kth_data(a, b, al-1, bl-1, (al-1)/2,k<=al-1?k-1:al-1,k); }else{ return kth_data(b, a, bl-1, al-1, (bl-1)/2,k<=bl-1?k-1:bl-1,k); } } /** * 用pa和pb分别标记数组a和b的当前比较元素 * pa+pb=k-1 该条件满足在pa之前有pa个元素,在pb之前有pb个元素 * 当a[pa]==b[pb]时,a[pa]和b[pb]同时为第k个元素; * 当a[pa]<b[pb]时,1.如果此时pb==0,则a[pa]是第k个元素; * 2.如果a[pa]>=b[pb-1],则a[pa]是第k个元素; * 3.如果a[pa]<b[pb-1]且pa==a.length-1,则b[pb-1]是第k个元素; * 4.除以上三种情况外,pa右移,pb左移,移动长度delt * 当a[pa]>b[pb]时,1.如果此时pa==0,则b[pb]是第k个元素; * 2.如果b[pb]>=a[pa-1],则b[pb]是第k个元素; * 3.如果b[pb]<a[pa-1]且pb==b.length-1,则a[pa-1]是第k个元素; * 4.除以上三种情况外,pa左移,pb右移,移动长度delt * 继续递归。 (以上解释的逻辑顺序和代码顺序一致) */ public static int kth_data(int[] a,int[] b,int al,int bl,int delt,int pa,int k){ int pb=k-1-pa; if(a[pa]==b[pb]){ return a[pa]; }else if(a[pa]<b[pb]){ if(pb==0||a[pa]>=b[pb-1]){ return a[pa]; } if(pa==al&&a[pa]<b[pb-1]){ return b[pb-1]; } pa+=delt; }else{ if(pa==0||b[pb]>=a[pa-1]){ return b[pb]; } if(pb==bl&&b[pb]<a[pa-1]){ return a[pa-1]; } pa-=delt; pa=pa<0?0:pa; } return kth_data(a, b, al, bl, delt/2, pa, k); }
0 0
- 在两个升序数组中找到第k小的数据
- 在两个有序数组中找到第k小的数
- 在两个排序数组中找到第k小的数
- 其他题目---在两个排序数组中找到第K小的数
- 在升序排列的2个数组中找到第K大的数值
- 在数组中找到第 k 小的数
- (java)求两个排序数组(升序)中第K小的数
- 在O(n)时间内找到数组中任意第K小的数
- 在两个排序数组中查找第k小元素
- 无序数组中找到第K小的数(或者找到最小的K个数)
- 在无序数组中找到第k大的数
- 在数组中找到第k大的元素
- 两个有序数组中第k小的数字
- 4 两个有序数组中第k小的数
- 在升序后降序数组中 找到最大的数
- 求两个等长升序序列中每个序列取一个元素求和的第K小元素
- 两个排序的数组,找到第k大的元素
- LeetCode--找到两个排序数组中第k大的元素
- C++28、 创建dll,导出单个函数以及导出类
- Android状态栏微技巧,带你真正理解沉浸式模式
- 石墨文档的云端表格实时压缩策略
- python-初级
- 微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
- 在两个升序数组中找到第k小的数据
- Android 用 XStream 将复杂xml解析为javabean
- sleep, yield, wait的区别
- angularJs中filter的用法及api解释
- 每次maven-update project ,又变成compile level变为1.5解决方法
- 微信小程序开发之本地图片上传(leancloud)
- Spring boot集成Mybatis
- IDEA15 配置使用
- Leetcode 26 Remove Duplicates from Sorted Array