题目:二分查找-I_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param target int整型 * @return int整型 */ func search( nums []int , target int ) int { // write code here }
解题思路:
这是最基本的二分查找算法,就是在一个普通的升序数组中写二分,非常的简单,直接进行二分查找就行了,下面是我的二分模板:
while (left <= right) {
int mid = left + (right - left) / 2;
if ( ... ) left = mid + 1;
else if ( ... ) right = mid - 1;
else if ( ... ) return mid;
}
(这个是我当年写 C++ 的时候总结的二分模板,其实算法都是相通的)
代码:
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param target int整型 * @return int整型 */ func search( nums []int , target int ) int { left, right := 0, len(nums)-1 for left <= right { mid := left + (right - left) / 2 if nums[mid] > target { right = mid - 1 } else if nums[mid] < target { left = mid + 1 } else { return mid } } return -1 }
过啦!!!
题目:二维数组中的查找_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param target int整型 * @param array int整型二维数组 * @return bool布尔型 */ func Find( target int , array [][]int ) bool { // write code here }
解题思路:
这道题很经典,但是并不是算是一道标准的二分查找的题目(不知道牛客为什么要放进二分专题里面),用二分查找理论上也是可以的,但是没有必要,使用的二分查找的复杂度依然是 O(N),所以没必要,
这道经典的题目有一个很经典的解法,我比较习惯就是从右上角开始查找,如果大了就往左,如果小了就往下(这道题其实是剑指 Offer 里面的经典题目)
代码:
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param target int整型 * @param array int整型二维数组 * @return bool布尔型 */ func Find( target int , array [][]int ) bool { i, j := len(array)-1, 0 for i >= 0 && j < len(array[0]) { if array[i][j] > target { i-- } else if array[i][j] < target { j++ } else { return true } } return false }
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~