2210. 统计数组中峰和谷的数量
This commit is contained in:
parent
911aa923cb
commit
ca0e9fdd9e
43
src/main.rs
43
src/main.rs
|
@ -1,30 +1,37 @@
|
||||||
struct Solution;
|
struct Solution;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn max_subarrays(n: i32, mut conflicting_pairs: Vec<Vec<i32>>) -> i64 {
|
pub fn count_hill_valley(nums: Vec<i32>) -> i32 {
|
||||||
let mut arr: Vec<Vec<i32>> = vec![vec![]; (n + 1) as usize];
|
let mut down = false;
|
||||||
for pair in conflicting_pairs.iter_mut() {
|
for i in 1..nums.len() {
|
||||||
if pair[0] > pair[1] {
|
if nums[i] != nums[0]{
|
||||||
pair.swap(0, 1);
|
down = nums[i] < nums[0];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
arr[pair[0] as usize].push(pair[1]);
|
|
||||||
}
|
}
|
||||||
let mut ans: i64 = 0;
|
let mut ans = 0;
|
||||||
let mut extra: Vec<i64> = vec![0; (n + 2) as usize];
|
for i in 2..nums.len() {
|
||||||
let mut b: Vec<i64> = vec![(n + 1) as i64; (n + 1) as usize];
|
if nums[i] == nums[i-1]
|
||||||
for i in (1..=n as usize).rev() {
|
{
|
||||||
b.extend(arr[i].iter().map(|&x| x as i64));
|
continue;
|
||||||
b.sort_unstable();
|
}
|
||||||
b.truncate(2);
|
if down && nums[i] >nums[i-1]
|
||||||
|
{
|
||||||
ans += (b[0] as i64) - (i as i64);
|
ans += 1;
|
||||||
extra[b[0] as usize] += b[1] - b[0];
|
down = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if !down && nums[i] < nums[i-1] {
|
||||||
|
ans += 1;
|
||||||
|
down = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ans + *extra.iter().max().unwrap() as i64
|
ans
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let sl = Solution::max_subarrays(5, vec![vec![1, 2], vec![2, 5], vec![3, 5]]);
|
let sl = Solution::count_hill_valley(vec![6,6,5,5,4,1]);
|
||||||
println!("{}", sl);
|
println!("{}", sl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue