?
给定一个数组,找到数组中的两个值,使其和为n,假定数组中一定存在这样一组解。
常规的思路是两次循环,如果了解哈希表的话,我们可以用哈希表来记录遍历过的节点,找到当前节点和(n-i)节点所在的位置即可。这样可以在O(n)的时间复杂度里面解决这个问题。
大数字的加法,把两个数字都表示成链表的形式。
由于是字符串,这样的话递归或者多次循环都会导致超时。技巧还是用hash的方法来记录遍历过的字符。
从两个已经排序的数组a[m],b[n]中找到中间的数,如果m+n为偶数,则返回中间两个数的平均值,要求时间复杂度log(m+n)
如果写一个时间复杂度是o(m+n)/2 的方法,思路上就简单了,只需要实现即可。既然要求时间复杂度是log(m+n),意味着需要二分法。这道题可以转换成求第k大元素所在的位置,假设第k大元素在a[m]中的index为x,那么b[n]中的索引为k-x,我们通过二分法找x所在的位置,满足 a[x],b[k-x]中较大的一个元素同时小于a[x+1],b[k-x+1]即可。
?
?
原文:http://www.cnblogs.com/myprogram/p/5220797.html