374. Guess Number Higher or Lower

LeetCode easy original: C# #csharp #easy #leetcode #search
Il testo del problema è tradotto dal russo per la lingua selezionata. Il codice resta invariato.

Мы играем в игру "Угадай number". Правила игры следующие:

Я загадываю number от 1 до n. Вам нужно угадать, какое number я загадал.

Каждый раз, когда вы угадываете неправильно, я говорю вам, загаданное number больше или меньше вашего предположения.

Вы вызываете предопределенный API int guess(int num), который returns один из трех возможных результатов:

-1: Ваше предположение больше загаданного числа (т.е. num > pick).

1: Ваше предположение меньше загаданного числа (т.е. num < pick).

0: Ваше предположение равно загаданному числу (т.е. num == pick).

return загаданное number.

Esempio:

Input: n = 10, pick = 6

Output: 6

C# soluzione

abbinato/originale
public class Solution : GuessGame {
    public int GuessNumber(int n) {
        int low = 1;
        int high = n;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            int res = guess(mid);
            if (res == 0)
                return mid;
            else if (res < 0)
                high = mid - 1;
            else
                low = mid + 1;
        }
        return -1;
    }
}

C++ soluzione

bozza automatica, rivedere prima dell'invio
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public class Solution : GuessGame {
    public int GuessNumber(int n) {
        int low = 1;
        int high = n;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            int res = guess(mid);
            if (res == 0)
                return mid;
            else if (res < 0)
                high = mid - 1;
            else
                low = mid + 1;
        }
        return -1;
    }
}

Java soluzione

abbinato/originale
public class Solution extends GuessGame {
    public int guessNumber(int n) {
        int low = 1;
        int high = n;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            int res = guess(mid);
            if (res == 0)
                return mid;
            else if (res < 0)
                high = mid - 1;
            else
                low = mid + 1;
        }
        return -1;
    }
}

JavaScript soluzione

abbinato/originale
var guessNumber = function(n) {
    let low = 1, high = n;
    while (low <= high) {
        let mid = low + Math.floor((high - low) / 2);
        let res = guess(mid);
        if (res === 0) {
            return mid;
        } else if (res < 0) {
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    return -1;
};

Python soluzione

abbinato/originale
class Solution:
    def guessNumber(self, n: int) -> int:
        low, high = 1, n
        while low <= high:
            mid = low + (high - low) // 2
            res = guess(mid)
            if res == 0:
                return mid
            elif res < 0:
                high = mid - 1
            else:
                low = mid + 1
        return -1

Go soluzione

abbinato/originale
package main

func guessNumber(n int) int {
    low, high := 1, n
    for low <= high {
        mid := low + (high - low) / 2
        res := guess(mid)
        if res == 0 {
            return mid
        } else if res < 0 {
            high = mid - 1
        } else {
            low = mid + 1
        }
    }
    return -1
}

Algorithm

Применяем бинарный поиск для нахождения загаданного числа. Начинаем с числа, расположенного в середине диапазона. Передаем это number функции guess.

Если функция guess returns -1, это означает, что загаданное number меньше предположенного. Продолжаем бинарный поиск в диапазоне чисел, меньших данного.

Если функция guess returns 1, это означает, что загаданное number больше предположенного. Продолжаем бинарный поиск в диапазоне чисел, больших данного.

😎

Vacancies for this task

offerte attive with overlapping task tags are mostrati.

Tutte le offerte
Non ci sono ancora offerte attive.