目次
トピック: バイナリ検索 - I_Niuke の質問 Ba_Niuke.com (nowcoder.com)
トピック: 2 次元配列での検索_Niuke トピック_Niuke.com (nowcoder.com)
トピック:バイナリ検索 - I_Niuke の質問 Ba_Niuke.com (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 ( ... ) は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
}
合格した!!!
トピック: 2 次元配列での検索_Niuke トピック_Niuke.com (nowcoder.com)
質問インターフェイス:
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param array int整型二维数组
* @return bool布尔型
*/
func Find( target int , array [][]int ) bool {
// write code here
}
問題解決のアイデア:
この質問は非常に古典的ですが、標準的な二分探索の質問ではありません (なぜ Niuke がそれを二分探索のトピックに含めたのかわかりません)。理論的には二分探索を使用することは可能ですが、必須ではありません。使用するのは複雑ですが、次数はまだ 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
}
合格した!!!
最後に次のように書きます。
以上がこの記事の内容です、読んでいただきありがとうございます。
何かを得たと感じたら、ブロガーに「いいね! 」を与えることができます。
記事の内容に漏れや間違いがある場合は、ブロガーにプライベートメッセージを送信するか、コメント欄で指摘してください〜