360面试真题请教

好了,小伙伴们,我感觉我是遇到了一个假的面试官。二分搜索的复杂度是o(logn),我被面试官坑了。。。唉,还是自己太菜了,禁不起面试官忽悠。
------------------------------------------------更新------------------------------------------------
一个排好序的整形数组a,长度为n,查找第1个值为k的元素的下标,找不到返回-1;时间复杂度o(logn),注意:有重复元素!要求不要写递归。
我当时一看到这道题就立马用《剑指offer》介绍的二分法撸了起来,结果面试官让我看看复杂度,我就彻底傻眼了。话说,o(logn)方法的我也不会啊!只能用用o(n)的二分法才能做得了题这个样子。我是凉得没脾气。
求大佬们教教我!o(╥﹏╥)o
#360公司##校招#
全部评论
每比较一次,查找范围被缩短为原来1/2 当范围长度被缩短为1的时候,就完成查找了, 然后要比较多少次,这不是很简单的数学吗?一般所说的时间复杂度就是最坏的时间复杂度。二分查找最坏时间复杂度就是最后一个的时候才找到。复杂度就是logn
点赞 回复 分享
发布于 2018-08-24 22:54
int findFirsrKOfArray(vector nums, int k) { if (nums.size() == 0) return -1; if (nums[0] > k || nums[nums.size() - 1] < k) return -1; int left = 0; int right = nums.size() - 1; int mid = (left + right) / 2; while (left < right) { if (nums[mid] == k) { if (mid == 0) break; if (mid > left) { if (nums[mid - 1] != k) break; else { right = mid - 1; mid = (left + right) / 2; } } } else if (nums[mid] > k) { right = mid - 1; mid = (left + right) / 2; } else { left = mid + 1; mid = (left + right) / 2; } } if (nums[mid] == k) return mid; return -1; } 剑指offer中确实有
点赞 回复 分享
发布于 2018-08-24 20:46
我的想法是,如果你用二分搜索找到一个等于k的值,然后向左顺序搜索的话,最差的时间复杂度是O(n)。如果是一直使用二分搜索的话,时间复杂度应该是O(log n)
点赞 回复 分享
发布于 2018-08-24 19:21
二分查找的复杂度是o(logn)吧
点赞 回复 分享
发布于 2018-08-24 17:46
面完一面怎么知道有没有下一面
点赞 回复 分享
发布于 2018-08-24 17:09
你在说啥???
点赞 回复 分享
发布于 2018-08-24 17:05
二分法n????
点赞 回复 分享
发布于 2018-08-24 17:00
二分法o(n)?我做题少你别骗我
点赞 回复 分享
发布于 2018-08-24 16:59

相关推荐

评论
点赞
5
分享

创作者周榜

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