Ostatnie wystąpienie [Wyszukiwanie liniowe] łatwe
Znajdź i wydrukuj indeks ostatniego wystąpienia elementu w tablicy.
Daniel Gustaw
• 2 min read
Została Ci podana tablica o rozmiarze N składająca się z liczb całkowitych. Dodatkowo otrzymałeś element M, którego musisz szukać i wydrukować indeks ostatniego wystąpienia tego elementu M w tablicy, jeśli on istnieje, w przeciwnym razie wydrukuj -1. Uważaj, że ta tablica ma indeksowanie zaczynające się od 1.
Format wejściowy:
Pierwsza linia składa się z 2 liczb całkowitych N i M, oznaczających rozmiar tablicy oraz element, którego należy szukać w tablicy. Następna linia zawiera N liczb całkowitych oddzielonych spacjami, które oznaczają elementy tablicy.
Format wyjściowy
Wydrukuj jedną liczbę całkowitą oznaczającą indeks ostatniego wystąpienia liczby M w tablicy, jeśli istnieje, w przeciwnym razie wydrukuj -1.
Ograniczenia
1 \le N \le 10^5
1 \le A[i] \le 10^9
1 \le M \le 10^9
PRZYKŁADOWE WEJŚCIE
5 1
1 2 3 4 1
PRZYKŁADOWY WYNIK
5
Rozwiązanie
W main.rs
możemy dodać funkcję główną, która przetwarza strumienie wejściowe i wyjściowe.
use linear_sort_reverse_search_rust_easy::reverse_search;
use std::io;
fn main() -> io::Result<()> {
reverse_search(&mut io::stdin(), &mut io::stdout())
}
w lib.rs
znajduje się reszta naszego kodu
use std::io::{Error, Read, Write};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn basic_test() {
let mut output: Vec<u8> = Vec::new();
reverse_search(&mut "5 1
1 2 3 4 1".as_bytes(), &mut output).unwrap();
assert_eq!(&output, b"5\n");
}
#[test]
fn not_found_test() {
let mut output: Vec<u8> = Vec::new();
reverse_search(&mut "5 7
1 2 3 4 1".as_bytes(), &mut output).unwrap();
assert_eq!(&output, b"-1\n");
}
}
pub fn reverse_search(
handle: &mut impl Read ,
output: &mut impl Write,
) -> Result<(), Error> {
let mut buffer = "".to_string();
let mut out = "".to_string();
handle.read_to_string(&mut buffer)?;
let mut lines = buffer.lines();
let mut some_line = match lines.next() {
Some(line) => line,
_ => ""
};
let mut iterator = some_line.split_ascii_whitespace();
let mut len: usize = match iterator.next() {
Some(p) => p.trim().parse().expect("can't read"),
None => 0
};
let needle = match iterator.next() {
Some(p) => p.trim().parse().expect("can't read"),
None => 0
};
some_line = match lines.next() {
Some(line) => line,
_ => ""
};
let mut vec:Vec<i32> = vec![0; len];
iterator = some_line.split_ascii_whitespace();
for n in 0..len {
vec[n] = match iterator.next() {
Some(p) => p.trim().parse().expect("can't read"),
None => 0
};
}
let mut iter = vec.iter().rev();
while let Some(num) = iter.next() {
if *num == needle {
out = format!("{}\n", len);
break;
}
len -= 1;
}
if len == 0 {
out = format!("-1\n");
}
output.write_all(out.to_uppercase().as_bytes())?;
Ok(())
}
Other articles
You can find interesting also.
Fetch, Promise i Template String na przykładzie Listy Zadań w JavaScript
Ten prosty projekt jest doskonałym wprowadzeniem do programowania w JavaScript. Nacisk kładzie się na elementy ES6 i frontend.
Daniel Gustaw
• 13 min read
Jeszcze jedna instrukcja instalacji Arch Linux (i3)
Instalacja Arch Linux za każdym razem uczy mnie czegoś nowego na temat dysków, sieci, systemów operacyjnych. Polecam Ci ją jeśli chcesz mieć system skrojony pod Twoje wymagania.
Daniel Gustaw
• 15 min read
Ostatnie wystąpienie [Wyszukiwanie liniowe] łatwe
Znajdź i wydrukuj indeks ostatniego wystąpienia elementu w tablicy.
Daniel Gustaw
• 2 min read