1.取上中位数 题目: 给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数.要求:时间复杂度O(logN).      例如:          arr1 = {1,2,3,4};          arr2 = {3,4,5,6};          一共8个数则上中位数是第4个数,所以返回3.          arr1 = {0,1,2};          arr2 = {3,4,5};          一共6个数则上中位数是第3个数,所以返回2. 思…
June 8, 2015 我最喜欢的一道算法题目, 二行代码. 编程序需要很强的逻辑思维, 多问几个为什么, 可不可以简化.想一想, 二行代码, 五分钟就可以搞定; 2015年网上大家热议的 Homebrew 的作者 Max Howell 面试 Google 挂掉的一题, 二叉树反转, 七行代码, 相比二行代码, 情有可原! Problem: return the count of binary tree with only one child 想一想, 你要写几行, 六七行, 或小于十行? S…
1.题目 快速输出第K小的数 2.思路 使用快速排序的思想,递归求解.若键值位置i与k相等,返回.若大于k,则在[start,i-1]中寻找第k大的数.若小于k.则在[i+1,end]中寻找第k+start-i-1小的数. 3.代码 #include<iostream> #include<string> using namespace std; int choose(int* data,int start,int end,int k){ if(start==end) return…
一.如何找出数组中丢失的数 题目描述:给定一个由n-1个整数组成的未排序的数组序列,其原始都是1到n中的不同的整数,请写出一个寻找数组序列中缺失整数的线性时间算法 方法1:累加求和 时间复杂度是O(N) 方法2:异或法,要先对实际无缺失的arr中的值异或,然后再对估计的值异或;缺失的值就是最终异或得到的值 时间复杂度O(N) 方法3:遍历一遍,用字典记录数字出现的次数,遇到出现2次的就返回 方法1.2代码 from functools import reduce class Solution:…
给定两个有序数组arr1 和 arr2 ,再给定一个int K,返回所有的数中第K小的数 要求长度如果分别为 N M,时间复杂度O(log(min{M,N}),额外空间复杂度O(1) 解决此题的方法跟之前的求两个数组求中位数的情况,如出一辙~ 非常给力! 此题目需要分情况讨论: 假设长度较短的数组长度 lenS   较长的lenL 情况1. K<1  或者 K>lenS+lenL    k值无效 情况2. k<=lenS  分别在两数组选择第前 k个数, 然后取其中位数 情况3. k&g…
出处 http://blog.csdn.net/adong76/article/details/10071297 BFPRT算法是解决从n个数中选择第k大或第k小的数这个经典问题的著名算法,但很多人并不了解其细节.本文将首先介绍求解这个第k小数字问题的几个思路,然后重点介绍在最坏情况下复杂度仍然为O(n)的BFPRT算法. 一 基本思路 关于选择第k小的数有许多方法 将n个数排序(比如快速排序或归并排序),选取排序后的第k个数,时间复杂度为O(nlogn). 维护一个k个元素的最大堆,存储当前遇…
给定两个有序数组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})). 这题目的难度在于时间复杂度请达到O(log(min{M,N})),参…
简要介绍下快速排序的思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.时间复杂度为O(nlogn) 一.<data structure and algorithm analysis in c>中的实现,测试过,觉得该说明的已经注释  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18…
2420: C语言习题 不等长字符串排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 460  解决: 239 题目描述 在主函数中输入n(n<=10)个不等长的字符串.用另一函数对它们排序.然后在主函数输出这n个已排好序的字符串. 输入 n和n个不等长字符串 输出 n个已排好序的字符串 样例输入 5 abcd 12345678 abc 123456 ab123 样例输出 123456 12345678 ab123 abc abcd 提示 主函数已给定如下,提交时不需要包含下述主…
BFPRT算法: 1.介绍: BFPRT算法又叫中位数的中位数算法,主要用于在无序数组中寻找第K大或第K小的数,它的最坏时间复杂度为O(n),它是由Blum,Floyd,Pratt,Rivest,Tarjan提出,它的思想是修改快速选择算法(快排)的主元选取方法,提高在最坏情况下的时间复杂度. 2.具体方法: BFPRT算法主要由两部分组成:快排和基准选取函数.基准选取函数就是中位数的中位数算法的实现,具体来说--就是讲快排的基准选取策略进行了优化,改为每次尽可能的选择中位数作为基准. 所以说算…