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