3577. 统计计算机解锁顺序排列数
This commit is contained in:
parent
cd8b2b31e3
commit
376065acb6
36
src/main.rs
36
src/main.rs
|
|
@ -1,37 +1,19 @@
|
||||||
use std::cmp::min;
|
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn min_subarray(nums: Vec<i32>, p: i32) -> i32 {
|
pub fn count_permutations(complexity: Vec<i32>) -> i32 {
|
||||||
let mut nums = nums;
|
let md= 1e9 as i64 + 7;
|
||||||
let p = p as i64;
|
let mut ans = 1_i64;
|
||||||
let mut arr = vec![0_i64; nums.len()];
|
for i in 1..complexity.len() {
|
||||||
arr[0] = nums[0] as i64;
|
if complexity[i] <= complexity[0] {
|
||||||
for i in 1..arr.len() {
|
return 0;
|
||||||
arr[i] = arr[i-1] + nums[i] as i64;
|
|
||||||
}
|
|
||||||
let sum = arr[arr.len() - 1];
|
|
||||||
if sum % p== 0 {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
let get_right = |right_value: i64| -> i64 { ((right_value % p) - (sum % p) + p) % p };
|
|
||||||
let mut map: HashMap<i64, i32> = HashMap::new();
|
|
||||||
let mut ans = 1000000000;
|
|
||||||
// nums[right] - nums[left] ≡ sum (mod p)
|
|
||||||
// (nums[right] mod p - sum mod p + p) mod ≡ nums[left] (mod p)
|
|
||||||
map.insert(0, -1);
|
|
||||||
for i in 0..arr.len() {
|
|
||||||
if let Some(v) = map.get(&get_right(arr[i])) {
|
|
||||||
ans = min(ans, i as i32 - v);
|
|
||||||
}
|
}
|
||||||
map.insert(arr[i] % p, i as i32);
|
ans = (ans * i as i64) % md;
|
||||||
}
|
}
|
||||||
if ans >= nums.len() as i32 { -1 } else { ans }
|
ans as i32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::min_subarray(vec![3,1,3], 3);
|
let result = Solution::count_permutations(vec![1, 3, 3, 4, 4, 4]);
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue