first two problems solved

This commit is contained in:
Luca Lombardo
2023-09-25 19:03:24 +02:00
parent 4d59a022b3
commit b8a53afc00
7 changed files with 121 additions and 1 deletions
@@ -0,0 +1,8 @@
[package]
name = "learders_in_an_array"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
+30
View File
@@ -0,0 +1,30 @@
# Comments on the solution
We know for sure that there will be at least one leader in the array (the last one). We can start from the end and keep track of the maximum value we have seen so far. If the current value is greater than the maximum value, then we have found a new leader. We can store it in a list and update the maximum value. In this way, we will have the leaders in the reverse order.
So after we have iterated through all the array, we can reverse the list and return it.
### Complexity
- **Time Complexity:** `O(n)` since we iterate through the array once and reverse the list once.
- **Space Complexity:** `O(n)` since we store the leaders in a list.
---
### Rust solution
```rust
fn leaders_in_an_array(arr: &[i32]) -> Vec<i32> {
let mut leaders = Vec::new();
let mut max = arr[arr.len() - 1];
leaders.push(max);
for i in (0..arr.len() - 1).rev() {
if arr[i] > max {
max = arr[i];
leaders.push(max);
}
}
leaders.reverse();
leaders
}
```
@@ -0,0 +1,27 @@
// Given an array A of positive integers. Your task is to find the leaders in the array. An element of array is leader if it is greater than or equal to all the elements to its right side. The rightmost element is always a leader.
// Declare a function that takes a slice of i32 as input and returns a Vec<i32>
fn leaders_in_an_array(arr: &[i32]) -> Vec<i32> {
// Empty vector to store the leaders
let mut leaders = Vec::new();
// Set the max value to the last element of the array
let mut max = arr[arr.len() - 1];
// Add the max value to the leaders vector
leaders.push(max);
// Iterate through the array in reverse order
for i in (0..arr.len() - 1).rev() {
if arr[i] > max {
// Set the max value to the current element
max = arr[i];
leaders.push(max);
}
}
leaders.reverse();
leaders
}
fn main() {
let arr = [16, 17, 4, 3, 5, 2];
let leaders = leaders_in_an_array(&arr);
println!("{:?}", leaders);
}