41. 缺失的第一个正数

This commit is contained in:
li-chx 2025-09-06 16:56:09 +08:00
parent 56e2221c76
commit da982f01aa
1 changed files with 21 additions and 22 deletions

View File

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