121. 买卖股票的最佳时机
struct Solution {}
impl Solution {
pub fn max_profit(prices: Vec<i32>) -> i32 {
if prices.len() <= 1 {
return 0;
}
let mut buy_price: i32 = prices[0];
let mut profit = 0;
for i in 1..prices.len() {
if prices[i] < buy_price {
buy_price = prices[i];
} else {
profit = i32::max(profit, prices[i] - buy_price);
}
}
profit
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_121() {
assert_eq!(Solution::max_profit(vec![7, 1, 5, 3, 6, 4]), 5);
assert_eq!(Solution::max_profit(vec![7, 6, 4, 3, 1]), 0);
}
}
217. 存在重复元素
struct Solution {}
impl Solution {
pub fn contains_duplicate(nums: Vec<i32>) -> bool {
if nums.is_empty() {
return false;
}
let mut nums = nums;
nums.sort_unstable();
let mut prev = nums[0];
for i in 1..nums.len() {
if nums[i] == prev {
return true;
}
prev = nums[i];
}
false
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_217() {
assert_eq!(Solution::contains_duplicate(vec![1]), false);
assert_eq!(Solution::contains_duplicate(vec![]), false);
assert_eq!(Solution::contains_duplicate(vec![1, 2, 3, 4]), false);
assert_eq!(Solution::contains_duplicate(vec![1, 2, 3, 1]), true);
}
}
219. 存在重复元素 II
use std::collections::HashMap;
struct Solution {}
impl Solution {
pub fn contains_nearby_duplicate(nums: Vec<i32>, k: i32) -> bool {
if nums.is_empty() {
return false;
}
let mut res = HashMap::with_capacity(nums.len());
for (i, &num) in nums.iter().enumerate() {
match res.get(&num) {
Some(v) => {
if i - v <= k as usize {
return true;
}
res.insert(num, i);
}
None => {
res.insert(num, i);
}
}
}
false
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_219() {
assert_eq!(
Solution::contains_nearby_duplicate(vec![1, 2, 3, 1, 2, 3], 2),
false
);
assert_eq!(
Solution::contains_nearby_duplicate(vec![1, 2, 3, 1, 2, 3], 3),
true
);
}
}