• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Binary search - pytanie

+1 głos
425 wizyt
pytanie zadane 7 maja 2023 w C i C++ przez Dani Obywatel (1,450 p.)
Wiecie może jak zaimplementować binary searcha, który bierze x lub mniejszą wartość jeśli nie ma x w ciągu. Ale gdy jest x to bierze ostatnią wystąpioną wartość?
1 3 5 10 10

odpowiedzią dla x = 10 będzie indeks (zaczynamy od 0) 4.

1 odpowiedź

+2 głosów
odpowiedź 7 maja 2023 przez Great Stary wyjadacz (12,660 p.)
#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums{ 1, 3, 5, 10, 10 };
    auto it = std::upper_bound(nums.begin(), nums.end(), 10);
    auto idx = std::distance(nums.begin(), it) - 1;
    std::cout << idx  << "\n";
}
1
komentarz 7 maja 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Nie masz co zakładać, pomyśl chwile, rozrysuj sobie na kartce przykłady.
1
komentarz 10 maja 2023 przez Dani Obywatel (1,450 p.)

Cześć, napisałem coś takiego. Myślisz, że jest git? Gdy go testowałem to wszystko wychodziło dobrze, ale mogłem coś przeoczyć.

int l=-1,r=array.size();
        while(r - l > 1){
            int mid = l + (r - l) / 2;
            if(array[mid] <= x)
                l = mid;
            else
                r = mid-1;
        }
        cout << l << ' ';

 

1
komentarz 10 maja 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Wygląda git, tylko ja bym zamiast r = mid-1 pisał r = mid. Chyba, że masz jakiś powód, żeby pisać r = mid-1?
1
komentarz 10 maja 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)

A tylko nie dałeś if-a. w sensie przed cout << l << ' ', możesz dać:
 

if (l == -1)
   cout << "NIE ZNALAZLEM";
else
     cout << l;
 
 

 

 

1
komentarz 10 maja 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
I właśnie po to dajesz l = -1, żeby móc zrobić tego if-a, bo zauważ, że jeśli l = -1, to żaden element nie spełnia!

Właśnie dlatego ta metoda jest taka fajna, bo jeden if starcza, żeby sprawdzić, czy żaden nie spełnia.

Podobne pytania

0 głosów
1 odpowiedź 414 wizyt
pytanie zadane 3 marca 2016 w C i C++ przez mike_ike Użytkownik (710 p.)
0 głosów
1 odpowiedź 293 wizyt
pytanie zadane 20 listopada 2018 w Python przez kacper2410 Nowicjusz (140 p.)
+1 głos
1 odpowiedź 203 wizyt
pytanie zadane 22 kwietnia 2022 w C i C++ przez polandonion Dyskutant (7,630 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...