CVTE一面手写代码题

题目:在有序的数组里找到和为S的两个数。
我一开始是写了O(n2)的方法,面试官说要怎么优化,那时候讲了一下,面试官问复杂度多少,我说O(logN),面完发现自己讲错了,觉得应该是第一个数是遍历数组,第二个数用二分查找,所以复杂度应该是O(NlogN),不知道大家还有没有更优的方法?
全部评论
双指针
点赞 回复 分享
发布于 2018-03-14 22:27
用hash应该可以O(n)
4 回复 分享
发布于 2018-03-14 22:28
这是道比较经典的题目了,这也是leetcode167题,请利用有序的数组这个条件,使用双索引比较好,参考如下 class Solution {     public int[] twoSum(int[] numbers, int target) {         int left=0;         int right=numbers.length-1;         while(left<right){             if(numbers[left]+numbers[right]==target)                 break;                            if(numbers[left]+numbers[right]>target)                 right--;             if(numbers[left]+numbers[right]<target)                 left++;         }         return new int[] {left,right};     } }
点赞 回复 分享
发布于 2018-03-14 22:36
有序数组,所以可以一个指针指向数组头,一个指向尾。如果两个指针的和大于S,尾部指针--,和小于S,头部指针++。 另外,请问楼主面的应届还是实习啊
点赞 回复 分享
发布于 2018-03-14 22:33
hash 
点赞 回复 分享
发布于 2018-03-17 19:56
双指针,复杂度n
点赞 回复 分享
发布于 2018-03-17 17:00
刚看到 剑指offer原题 双指针 再问一句,老哥 18,19?
点赞 回复 分享
发布于 2018-03-17 10:05
楼主cvte出结果了吗?
点赞 回复 分享
发布于 2018-03-17 08:47
双指针啊,offer原题
点赞 回复 分享
发布于 2018-03-15 16:02
夹逼
点赞 回复 分享
发布于 2018-03-15 01:12
这不是剑指offer原题吗……
点赞 回复 分享
发布于 2018-03-15 00:08
头尾逼近吧,o(n),不过我投了web后台,笔试都没过。
点赞 回复 分享
发布于 2018-03-14 23:44
2sum, 估计本来想问完你,还打算问3sum 4sum 。 把leetcode上面对应的题都刷一下就明白了。
点赞 回复 分享
发布于 2018-03-14 23:15
我也被问了这题。。我用双指针解出来了。。然而还是挂了。。整个面试就感觉linkhashmap没答出来,其他还好啊
点赞 回复 分享
发布于 2018-03-14 22:55
hashmap
点赞 回复 分享
发布于 2018-03-14 22:37
和笔试一样的题
点赞 回复 分享
发布于 2018-03-14 22:36

相关推荐

点赞 评论 收藏
分享
09-25 00:00
已编辑
电子科技大学 Java
球球与墩墩:这不是前端常考的对象扁平化吗,面试官像是前端出来的 const flattern = (obj) => { const res = {}; const dfs = (curr, path) => { if(typeof curr === 'object' && curr !== null) { const isArray = Array.isArray(curr); for(let key in curr) { const newPath = path ? isArray ? `${path}[${key}]` : `${path}.${key}` : key; dfs(curr[key], newPath); } } else { res[path] = curr } } dfs(obj); return res; }
查看3道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务