diff --git a/src/main.rs b/src/main.rs index 87d3353..d3092f7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,37 +1,19 @@ -use std::cmp::min; -use std::collections::HashMap; - struct Solution; mod arr; impl Solution { - pub fn min_subarray(nums: Vec, p: i32) -> i32 { - let mut nums = nums; - let p = p as i64; - let mut arr = vec![0_i64; nums.len()]; - arr[0] = nums[0] as i64; - for i in 1..arr.len() { - 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 = 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); + pub fn count_permutations(complexity: Vec) -> i32 { + let md= 1e9 as i64 + 7; + let mut ans = 1_i64; + for i in 1..complexity.len() { + if complexity[i] <= complexity[0] { + return 0; } - 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() { - let result = Solution::min_subarray(vec![3,1,3], 3); + let result = Solution::count_permutations(vec![1, 3, 3, 4, 4, 4]); println!("{:?}", result); }