Ex 2_22 两个有序列表合并后的第k小元素..._第四次作业


package org.xiu68.ch02;
public class Ex2_22 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//两数组有序,寻找两数组合并后第k小元素,O(logm+logn)
int[] a=new int[]{1,3,5,7,9,11,13,15,17,19};
int[] b=new int[]{0,2,4,6,8,10,12,14,16,18};
for(int k=1;k<11;k++){
int result=find(a, b, 0, a.length-1, 0, b.length-1, k);
System.out.println(result);
}
}
public static int find(int a[],int b[],int aStart,int aEnd,int bStart,int bEnd,int k){
int aMid = (aStart + aEnd) / 2; //a数组中间元素位置
int bMid = (bStart + bEnd) / 2; //b数组中间元素位置
if (aStart > aEnd) //a数组要计算元素个数为0
return b[bStart+k-1];
if (bStart > bEnd) //b数组要计算元素个数为0
return a[aStart+k-1];
if (a[aMid] <= b[bMid]) { //b[中间位置]大于a[中间位置]的情况
if (k <= (aMid-aStart) + (bMid-bStart) + 1) //k小于两数组合并后的中间位置
return find(a,b,aStart, aEnd, bStart, bMid-1, k);
else //k大于两数组合并后的中间位置
return find(a,b,aMid+1, aEnd, bStart, bEnd, k-(aMid-aStart)-1);
} else { //a[中间位置]大于b[中间位置]的情况
if (k <= (aMid-aStart) + (bMid-bStart) + 1)
return find(a,b,aStart, aMid-1, bStart, bEnd, k);
else
return find(a,b,aStart, aEnd, bMid+1, bEnd, k-(bMid-bStart)-1);
}
}
}
Ex 2_22 两个有序列表合并后的第k小元素..._第四次作业的更多相关文章
- 求两个有序数组的中位数或者第k小元素
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...
- 有序矩阵中第k小元素
有序矩阵中第k小元素 题目: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素. 看到有序就会想 ...
- python---手动实现两个有序列表的合并
可能又和标准的实现不一样, 但是自己的实现, 印象就会不一样的. # coding = utf-8 # 两个有序列表的合并,将two_list合并到one_list def merge_order_l ...
- leetCode21: 合并两个有序列表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- LeetCode 9 合并两个有序列表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- 两个有序数组合并成一个有序数组(要求时间复杂度为O(n))
面试题: 怎样把两个有序数组合并成有序数组呢 逻辑步骤: 1.假设两个数组为A和B 2.A和B都是从小到大的顺序进行排列 ** 1.我们可以直接比较两个数组的首元素,哪个小就把这个小元素放入可变数组. ...
- 两个有序数组的中位数(第k大的数)
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 感觉这种题目挺难的,尤其是将算法完全写对.因为当初自己微软面试的时候遇到了,但是没有想出来思路. ...
- 寻找两个已序数组中的第k大元素
寻找两个已序数组中的第k大元素 1.问题描述 给定两个数组与,其大小分别为.,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第大的元素,其中,.例如,对于数组,.我们记第大的 ...
- 17082 两个有序数序列中找第k小(优先做)
17082 两个有序数序列中找第k小(优先做) 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC;VC Description 已 ...
随机推荐
- 自定义类使用泛型and方法使用泛型
使用泛型的自定义类,泛型可以使用任意的数据类型,在创建对象的时候确定是什么数据类型,创建对象的时候不使用泛型,那就默认是Object类型 格式: 使用泛型的自定义类 package cn.zhuobo ...
- ASP.NET MVC 5 笔记
1. MVC 的常用特性 1) System.Web.Mvc.ActionNameAttribute Ø 该特性用于将当前 Action 名称,改为一个指定的 Action 名称,路由匹配时 ...
- idea中配置Springboot热部署
1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...
- vim 配置一:
一.vim前期准备 安装vimsudo apt-get install vim 需要保证自己的 vim 配置在 7.4 以上,有些插件只支持 7.4 以上的 vim 在根目录下建立 .vimrc 文件 ...
- Linux centos6.7网卡配置
系统安装完成后 以此执行以下命令 相当于自动获取IP地址 setup命令——Network configuration———Device configuration———eth0 依次保存退出 实际上 ...
- 隐马尔可夫模型HMM(一)
摘自 1.李航的<统计学习方法> 2.https://www.cnblogs.com/pinard/p/6945257.html 了解HMM模型 1.隐马尔可夫模型的定义 隐马尔可夫模型是 ...
- Git配置信息相关命令
查看git所有配置项 $ git config -l or $ git config --list 全局配置用户名邮箱 $ git config --global user.name "yo ...
- luogu P4173 残缺的字符串
传送门 两种做法,一种是依次考虑每种字符,然后如果某个位置是该字符或者是\(*\)对应的值就是1,否则是0,然后把第一个串倒过来,fft卷积起来,最后看对应位置的值是否为m 然而上面那个做法在字符集大 ...
- xenserver 上传centos6.8镜像
1.宿主机操作: # mkdir /iso # xe sr-create name-label=system-iso type=iso device-config:location=/iso de ...
- Python 15 html 基础 - CSS &javascript &DOM
本节内容 CSS基础 javascript基础 DOM 前言,这边这块楼主已经很熟悉了,CSS天天用到,简单的一些javascript也是所以就挑点重点说了.然后就是dom不怎么用,但是其实也用不到, ...