3129. 找出所有稳定的二进制数组 I
This commit is contained in:
parent
c18ad8c1b0
commit
bd8207767a
77
src/main.rs
77
src/main.rs
|
|
@ -1,62 +1,43 @@
|
|||
use std::cmp::min;
|
||||
|
||||
struct Solution;
|
||||
mod arr;
|
||||
impl Solution {
|
||||
pub fn min_flips(s: String) -> i32 {
|
||||
let mut len = s.len();
|
||||
let (mut even_zero, mut even_one, mut odd_zero, mut odd_one) = (0, 0, 0, 0);
|
||||
//let s = (s.clone() + &s).chars().collect::<Vec<_>>();
|
||||
let mut ans = 1e6 as i32;
|
||||
let mut is_even = true;
|
||||
|
||||
for c in s.chars() {
|
||||
if is_even {
|
||||
is_even = false;
|
||||
if c == '0' {
|
||||
even_zero += 1;
|
||||
} else {
|
||||
even_one += 1;
|
||||
}
|
||||
} else {
|
||||
is_even = true;
|
||||
if c == '0' {
|
||||
odd_zero += 1;
|
||||
} else {
|
||||
odd_one += 1;
|
||||
}
|
||||
pub fn number_of_stable_arrays(zero: i32, one: i32, limit: i32) -> i32 {
|
||||
let md = 1e9 as i64 + 7;
|
||||
let mut dp = vec![vec![vec![0; 2]; one as usize + 1]; zero as usize + 1];
|
||||
for i in 1..=limit as usize {
|
||||
if i <= one as usize {
|
||||
dp[0][i][1] = 1;
|
||||
}
|
||||
if i <= zero as usize {
|
||||
dp[i][0][0] = 1;
|
||||
}
|
||||
}
|
||||
for c in s.chars() {
|
||||
ans = min(ans, min(odd_zero + even_one, odd_one + even_zero));
|
||||
if len & 1 == 1 {
|
||||
if c == '0' {
|
||||
odd_zero += 1;
|
||||
for i in 1..=zero as usize {
|
||||
for j in 1..=one as usize {
|
||||
dp[i][j][0] = (((dp[i - 1][j][0] + dp[i - 1][j][1]
|
||||
- if i as i32 - limit - 1 >= 0 {
|
||||
dp[i - limit as usize - 1][j][1]
|
||||
} else {
|
||||
odd_one += 1;
|
||||
}
|
||||
} else {
|
||||
if c == '0' {
|
||||
even_zero += 1;
|
||||
0
|
||||
}) as i64
|
||||
+ md)
|
||||
% md) as i32;
|
||||
dp[i][j][1] = (((dp[i][j - 1][0] + dp[i][j - 1][1]
|
||||
- if j as i32 - limit - 1 >= 0 {
|
||||
dp[i][j - limit as usize - 1][0]
|
||||
} else {
|
||||
even_one += 1;
|
||||
}
|
||||
}
|
||||
(even_zero, even_one, odd_zero, odd_one) = (odd_zero, odd_one, even_zero, even_one);
|
||||
if c == '0' {
|
||||
odd_zero -= 1;
|
||||
} else {
|
||||
odd_one -= 1;
|
||||
0
|
||||
}) as i64
|
||||
+ md)
|
||||
% md) as i32;
|
||||
}
|
||||
}
|
||||
ans
|
||||
((dp[zero as usize][one as usize][0] as i64 + dp[zero as usize][one as usize][1] as i64) % md) as i32
|
||||
}
|
||||
}
|
||||
// 111000 o0 1 o1 2 j0 2 j1 1
|
||||
// 1110001 o0 1 o1 3 j0 2 j1 1
|
||||
// 1110001 o0 2 o1 1 j0 1 j1 3
|
||||
// 110001 2 1 1 2
|
||||
|
||||
fn main() {
|
||||
let result = Solution::min_flips("111000".to_string());
|
||||
let result = Solution::number_of_stable_arrays(39, 20, 18);
|
||||
// let result = Solution::number_of_stable_arrays(200, 200, 25);
|
||||
println!("{:?}", result);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue