diff --git a/src/main.rs b/src/main.rs index c7c71f3..a3b2cb3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,33 +1,32 @@ struct Solution; impl Solution { - pub fn find_anagrams(s: String, p: String) -> Vec { - if s.len() < p.len() { - return vec![]; - } - let mut res = vec![]; - let mut p_count = [0; 26]; - let mut s_count = [0; 26]; - for i in 0..p.len() { - p_count[(p.as_bytes()[i] - b'a') as usize] += 1; - } - for i in 0..p.len() { - s_count[(s.as_bytes()[i] - b'a') as usize] += 1; - } - for i in p.len()..s.len() { - if p_count == s_count { - res.push((i - p.len()) as i32); + pub fn first_missing_positive(mut nums: Vec) -> i32 { + for i in 0..nums.len(){ + if nums[i] <= 0 || nums[i] > nums.len() as i32 { + continue; + } + let mut temp = nums[i]; + nums[i] = -1; + while temp > 0 && temp <= nums.len() as i32 { + let temp2 = nums[temp as usize - 1]; + nums[temp as usize - 1] = temp; + if temp == temp2 { + break; + } + temp = temp2; } - s_count[(s.as_bytes()[i] - b'a') as usize] += 1; - s_count[(s.as_bytes()[i - p.len()] - b'a') as usize] -= 1; } - if p_count == s_count { - res.push((s.len() - p.len()) as i32); + println!("{:?}", nums); + for i in 0..nums.len(){ + if nums[i] != (i as i32 + 1) { + return i as i32 + 1; + } } - res + nums.len() as i32 + 1 } } fn main() { - let sl = Solution::find_anagrams("cbaebabacd".to_string(), "abc".to_string()); + let sl = Solution::first_missing_positive(vec![1]); println!("{:?}", sl); }