904. 水果成篮
This commit is contained in:
parent
b690117f42
commit
ea97356b74
55
src/main.rs
55
src/main.rs
|
@ -1,44 +1,35 @@
|
|||
use std::cmp::max;
|
||||
use std::mem::swap;
|
||||
|
||||
struct Solution;
|
||||
impl Solution {
|
||||
pub fn max_total_fruits(fruits: Vec<Vec<i32>>, start_pos: i32, k: i32) -> i32 {
|
||||
let mut left = fruits
|
||||
.binary_search_by(|x| x[0].cmp(&(start_pos - k)))
|
||||
.unwrap_or_else(|x| x);
|
||||
let (mut right, mut temp_ans) = (left, 0);
|
||||
while right < fruits.len() && fruits[right][0] <= start_pos {
|
||||
temp_ans += fruits[right][1];
|
||||
right += 1;
|
||||
}
|
||||
let mut ans = temp_ans;
|
||||
while right < fruits.len() && fruits[right][0] <= start_pos + k {
|
||||
temp_ans += fruits[right][1];
|
||||
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
|
||||
{
|
||||
temp_ans -= fruits[left][1];
|
||||
left += 1;
|
||||
pub fn total_fruit(fruits: Vec<i32>) -> i32 {
|
||||
let mut ans = 0;
|
||||
let (mut a,mut b) = (-1,-1);
|
||||
let mut temp_ans = 0;
|
||||
let mut sub_temp_ans = 0;
|
||||
for fruit in fruits {
|
||||
if fruit != a && fruit != b {
|
||||
ans = max(ans, temp_ans);
|
||||
temp_ans = sub_temp_ans + 1;
|
||||
sub_temp_ans = 1;
|
||||
b = a;
|
||||
a = fruit;
|
||||
}
|
||||
else {
|
||||
temp_ans += 1;
|
||||
sub_temp_ans += 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() {
|
||||
let sl = Solution::max_total_fruits(
|
||||
vec![
|
||||
vec![0, 9],
|
||||
vec![4, 1],
|
||||
vec![5, 7],
|
||||
vec![6, 2],
|
||||
vec![7, 4],
|
||||
vec![10, 9],
|
||||
],
|
||||
5,
|
||||
4,
|
||||
);
|
||||
let sl = Solution::total_fruit(vec![3,3,3,1,2,1,1,2,3,3,4]);
|
||||
println!("{:?}", sl);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue