# 448. Find All Numbers Disappeared in an Array
題目:<https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/>
解法:把整數(1, n)對應原本陣列nums的index(0, n-1),將出現過的數字對應整列位置用0標記,採用類似遞迴的方式反覆迭代後,沒有標記為0的位置即代表消失的數字
Time Complexity : O(n)
Space Complexity : O(1)
Python3:
``` python 3
class Solution:
def findDisappearedNumbers(self, nums: list[int]) -> list[int]:
n = len(nums)
i = 0
while i < n:
j = nums[i] - 1
while nums[j] != 0:
nums[j], j = 0, nums[j] - 1
i += 1
while i < n and nums[i] == 0:
i += 1
return [i + 1 for i in range(n) if nums[i] != 0]
if __name__ == '__main__':
nums = [4, 3, 2, 7, 8, 2, 3, 1]
ans = Solution().findDisappearedNumbers(nums)
print(ans)
```
C:
``` c
#include <stdio.h>
#include <stdlib.h>
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {
int i = 0;
while (i < numsSize) {
int j = nums[i] - 1;
while (nums[j] != 0) {
int tmp = j;
j = nums[j] - 1;
nums[tmp] = 0;
}
i++;
while (i < numsSize && nums[i] == 0)
i++;
}
*returnSize = 0;
for (int i= 0; i < numsSize; i++) {
if (nums[i] != 0)
nums[(*returnSize)++] = i + 1;
}
return nums;
}
int main()
{
int nums[] = {4, 3, 2, 7, 8, 2, 3, 1};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int returnSize;
int* ans = findDisappearedNumbers(nums, numsSize, &returnSize);
for (int i = 0; i < returnSize; i++)
printf("%d ", ans[i]);
printf("\n");
return 0;
}
```
###### tags: `leetcode` `array`