904. 水果成篮

This commit is contained in:
li-chx 2025-08-04 16:26:50 +08:00
parent b690117f42
commit ea97356b74
1 changed files with 23 additions and 32 deletions

View File

@ -1,44 +1,35 @@
use std::cmp::max; use std::cmp::max;
use std::mem::swap;
struct Solution; struct Solution;
impl Solution { impl Solution {
pub fn max_total_fruits(fruits: Vec<Vec<i32>>, start_pos: i32, k: i32) -> i32 { pub fn total_fruit(fruits: Vec<i32>) -> i32 {
let mut left = fruits let mut ans = 0;
.binary_search_by(|x| x[0].cmp(&(start_pos - k))) let (mut a,mut b) = (-1,-1);
.unwrap_or_else(|x| x); let mut temp_ans = 0;
let (mut right, mut temp_ans) = (left, 0); let mut sub_temp_ans = 0;
while right < fruits.len() && fruits[right][0] <= start_pos { for fruit in fruits {
temp_ans += fruits[right][1]; if fruit != a && fruit != b {
right += 1; ans = max(ans, temp_ans);
} temp_ans = sub_temp_ans + 1;
let mut ans = temp_ans; sub_temp_ans = 1;
while right < fruits.len() && fruits[right][0] <= start_pos + k { b = a;
temp_ans += fruits[right][1]; a = fruit;
while fruits[right][0] - fruits[left][0] + fruits[right][0] - start_pos > k }
&& fruits[right][0] - fruits[left][0] + start_pos - fruits[left][0] > k else {
{ temp_ans += 1;
temp_ans -= fruits[left][1]; sub_temp_ans += 1;
left += 1; if b == fruit {
swap(&mut a, &mut b);
sub_temp_ans = 1;
}
} }
ans = max(ans, temp_ans);
right += 1;
} }
ans max(ans, temp_ans)
} }
} }
fn main() { fn main() {
let sl = Solution::max_total_fruits( let sl = Solution::total_fruit(vec![3,3,3,1,2,1,1,2,3,3,4]);
vec![
vec![0, 9],
vec![4, 1],
vec![5, 7],
vec![6, 2],
vec![7, 4],
vec![10, 9],
],
5,
4,
);
println!("{:?}", sl); println!("{:?}", sl);
} }