#[test] fn test() { use method2::max_profit; assert_eq!(max_profit(vec![7, 1, 5, 3, 6, 4]), 5); assert_eq!(max_profit(vec![7, 6, 4, 3, 1]), 0); } // 暴力法,会超时。扫描第i天之后的股价,更新最大值 mod method1 { pub fn max_profit(prices: Vec<i32>) -> i32 { let mut ans: i32 = 0; for i in 0..(prices.len() - 1) { for j in (i + 1)..prices.len() { ans = ans.max(prices[j] - prices[i]); } } ans } } // 一次遍历,记录最低价格,同时更新最大利润 mod method2 { pub fn max_profit(prices: Vec<i32>) -> i32 { let mut min_prince: i32 = i32::MAX; let mut max_profit: i32 = 0; for price in prices { min_prince = min_prince.min(price); max_profit = max_profit.max(price - min_prince); } max_profit } }