Skip to content

Commit 1a6ab2a

Browse files
authoredDec 28, 2024
feat: update solutions to lc problems: No.0189,0238,0041 (#3896)
1 parent 141af5c commit 1a6ab2a

File tree

16 files changed

+144
-273
lines changed

16 files changed

+144
-273
lines changed
 

‎solution/0000-0099/0041.First Missing Positive/README.md

+43-59
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,13 @@ tags:
7373
```python
7474
class Solution:
7575
def firstMissingPositive(self, nums: List[int]) -> int:
76-
def swap(i, j):
77-
nums[i], nums[j] = nums[j], nums[i]
78-
7976
n = len(nums)
8077
for i in range(n):
8178
while 1 <= nums[i] <= n and nums[i] != nums[nums[i] - 1]:
82-
swap(i, nums[i] - 1)
79+
j = nums[i] - 1
80+
nums[i], nums[j] = nums[j], nums[i]
8381
for i in range(n):
84-
if i + 1 != nums[i]:
82+
if nums[i] != i + 1:
8583
return i + 1
8684
return n + 1
8785
```
@@ -93,12 +91,12 @@ class Solution {
9391
public int firstMissingPositive(int[] nums) {
9492
int n = nums.length;
9593
for (int i = 0; i < n; ++i) {
96-
while (nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
94+
while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
9795
swap(nums, i, nums[i] - 1);
9896
}
9997
}
10098
for (int i = 0; i < n; ++i) {
101-
if (i + 1 != nums[i]) {
99+
if (nums[i] != i + 1) {
102100
return i + 1;
103101
}
104102
}
@@ -121,12 +119,12 @@ public:
121119
int firstMissingPositive(vector<int>& nums) {
122120
int n = nums.size();
123121
for (int i = 0; i < n; ++i) {
124-
while (nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
122+
while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
125123
swap(nums[i], nums[nums[i] - 1]);
126124
}
127125
}
128126
for (int i = 0; i < n; ++i) {
129-
if (i + 1 != nums[i]) {
127+
if (nums[i] != i + 1) {
130128
return i + 1;
131129
}
132130
}
@@ -141,12 +139,12 @@ public:
141139
func firstMissingPositive(nums []int) int {
142140
n := len(nums)
143141
for i := range nums {
144-
for nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i]-1] {
142+
for 0 < nums[i] && nums[i] <= n && nums[i] != nums[nums[i]-1] {
145143
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
146144
}
147145
}
148-
for i, v := range nums {
149-
if i+1 != v {
146+
for i, x := range nums {
147+
if x != i+1 {
150148
return i + 1
151149
}
152150
}
@@ -159,18 +157,18 @@ func firstMissingPositive(nums []int) int {
159157
```ts
160158
function firstMissingPositive(nums: number[]): number {
161159
const n = nums.length;
162-
let i = 0;
163-
while (i < n) {
164-
const j = nums[i] - 1;
165-
if (j === i || j < 0 || j >= n || nums[i] === nums[j]) {
166-
i++;
167-
} else {
160+
for (let i = 0; i < n; i++) {
161+
while (nums[i] >= 1 && nums[i] <= n && nums[i] !== nums[nums[i] - 1]) {
162+
const j = nums[i] - 1;
168163
[nums[i], nums[j]] = [nums[j], nums[i]];
169164
}
170165
}
171-
172-
const res = nums.findIndex((v, i) => v !== i + 1);
173-
return (res === -1 ? n : res) + 1;
166+
for (let i = 0; i < n; i++) {
167+
if (nums[i] !== i + 1) {
168+
return i + 1;
169+
}
170+
}
171+
return n + 1;
174172
}
175173
```
176174

@@ -180,21 +178,18 @@ function firstMissingPositive(nums: number[]): number {
180178
impl Solution {
181179
pub fn first_missing_positive(mut nums: Vec<i32>) -> i32 {
182180
let n = nums.len();
183-
let mut i = 0;
184-
while i < n {
185-
let j = nums[i] - 1;
186-
if (i as i32) == j || j < 0 || j >= (n as i32) || nums[i] == nums[j as usize] {
187-
i += 1;
188-
} else {
189-
nums.swap(i, j as usize);
181+
for i in 0..n {
182+
while nums[i] > 0 && nums[i] <= n as i32 && nums[i] != nums[nums[i] as usize - 1] {
183+
let j = nums[i] as usize - 1;
184+
nums.swap(i, j);
185+
}
186+
}
187+
for i in 0..n {
188+
if nums[i] != (i + 1) as i32 {
189+
return (i + 1) as i32;
190190
}
191191
}
192-
(nums
193-
.iter()
194-
.enumerate()
195-
.position(|(i, &v)| (v as usize) != i + 1)
196-
.unwrap_or(n) as i32)
197-
+ 1
192+
return (n + 1) as i32;
198193
}
199194
}
200195
```
@@ -231,56 +226,45 @@ public class Solution {
231226
```c
232227
int firstMissingPositive(int* nums, int numsSize) {
233228
for (int i = 0; i < numsSize; ++i) {
234-
while (nums[i] >= 1 && nums[i] <= numsSize && nums[i] != nums[nums[i] - 1]) {
235-
swap(&nums[i], &nums[nums[i] - 1]);
229+
while (nums[i] > 0 && nums[i] <= numsSize && nums[i] != nums[nums[i] - 1]) {
230+
int j = nums[i] - 1;
231+
int t = nums[i];
232+
nums[i] = nums[j];
233+
nums[j] = t;
236234
}
237235
}
238236
for (int i = 0; i < numsSize; ++i) {
239-
if (i + 1 != nums[i]) {
237+
if (nums[i] != i + 1) {
240238
return i + 1;
241239
}
242240
}
243241
return numsSize + 1;
244242
}
245-
246-
void swap(int* a, int* b) {
247-
int t = *a;
248-
*a = *b;
249-
*b = t;
250-
}
251243
```
252244
253245
#### PHP
254246
255247
```php
256248
class Solution {
257249
/**
258-
* @param integer[] $nums
259-
* @return integer
250+
* @param Integer[] $nums
251+
* @return Integer
260252
*/
261-
262253
function firstMissingPositive($nums) {
263254
$n = count($nums);
264-
265-
for ($i = 0; $i < $n; $i++) {
266-
if ($nums[$i] <= 0) {
267-
$nums[$i] = $n + 1;
268-
}
269-
}
270-
271255
for ($i = 0; $i < $n; $i++) {
272-
$num = abs($nums[$i]);
273-
if ($num <= $n) {
274-
$nums[$num - 1] = -abs($nums[$num - 1]);
256+
while ($nums[$i] >= 1 && $nums[$i] <= $n && $nums[$i] != $nums[$nums[$i] - 1]) {
257+
$j = $nums[$i] - 1;
258+
$t = $nums[$i];
259+
$nums[$i] = $nums[$j];
260+
$nums[$j] = $t;
275261
}
276262
}
277-
278263
for ($i = 0; $i < $n; $i++) {
279-
if ($nums[$i] > 0) {
264+
if ($nums[$i] != $i + 1) {
280265
return $i + 1;
281266
}
282267
}
283-
284268
return $n + 1;
285269
}
286270
}

‎solution/0000-0099/0041.First Missing Positive/README_EN.md

+43-59
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,13 @@ The time complexity is $O(n)$, where $n$ is the length of the array. The space c
7575
```python
7676
class Solution:
7777
def firstMissingPositive(self, nums: List[int]) -> int:
78-
def swap(i, j):
79-
nums[i], nums[j] = nums[j], nums[i]
80-
8178
n = len(nums)
8279
for i in range(n):
8380
while 1 <= nums[i] <= n and nums[i] != nums[nums[i] - 1]:
84-
swap(i, nums[i] - 1)
81+
j = nums[i] - 1
82+
nums[i], nums[j] = nums[j], nums[i]
8583
for i in range(n):
86-
if i + 1 != nums[i]:
84+
if nums[i] != i + 1:
8785
return i + 1
8886
return n + 1
8987
```
@@ -95,12 +93,12 @@ class Solution {
9593
public int firstMissingPositive(int[] nums) {
9694
int n = nums.length;
9795
for (int i = 0; i < n; ++i) {
98-
while (nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
96+
while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
9997
swap(nums, i, nums[i] - 1);
10098
}
10199
}
102100
for (int i = 0; i < n; ++i) {
103-
if (i + 1 != nums[i]) {
101+
if (nums[i] != i + 1) {
104102
return i + 1;
105103
}
106104
}
@@ -123,12 +121,12 @@ public:
123121
int firstMissingPositive(vector<int>& nums) {
124122
int n = nums.size();
125123
for (int i = 0; i < n; ++i) {
126-
while (nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
124+
while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {
127125
swap(nums[i], nums[nums[i] - 1]);
128126
}
129127
}
130128
for (int i = 0; i < n; ++i) {
131-
if (i + 1 != nums[i]) {
129+
if (nums[i] != i + 1) {
132130
return i + 1;
133131
}
134132
}
@@ -143,12 +141,12 @@ public:
143141
func firstMissingPositive(nums []int) int {
144142
n := len(nums)
145143
for i := range nums {
146-
for nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i]-1] {
144+
for 0 < nums[i] && nums[i] <= n && nums[i] != nums[nums[i]-1] {
147145
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
148146
}
149147
}
150-
for i, v := range nums {
151-
if i+1 != v {
148+
for i, x := range nums {
149+
if x != i+1 {
152150
return i + 1
153151
}
154152
}
@@ -161,18 +159,18 @@ func firstMissingPositive(nums []int) int {
161159
```ts
162160
function firstMissingPositive(nums: number[]): number {
163161
const n = nums.length;
164-
let i = 0;
165-
while (i < n) {
166-
const j = nums[i] - 1;
167-
if (j === i || j < 0 || j >= n || nums[i] === nums[j]) {
168-
i++;
169-
} else {
162+
for (let i = 0; i < n; i++) {
163+
while (nums[i] >= 1 && nums[i] <= n && nums[i] !== nums[nums[i] - 1]) {
164+
const j = nums[i] - 1;
170165
[nums[i], nums[j]] = [nums[j], nums[i]];
171166
}
172167
}
173-
174-
const res = nums.findIndex((v, i) => v !== i + 1);
175-
return (res === -1 ? n : res) + 1;
168+
for (let i = 0; i < n; i++) {
169+
if (nums[i] !== i + 1) {
170+
return i + 1;
171+
}
172+
}
173+
return n + 1;
176174
}
177175
```
178176

@@ -182,21 +180,18 @@ function firstMissingPositive(nums: number[]): number {
182180
impl Solution {
183181
pub fn first_missing_positive(mut nums: Vec<i32>) -> i32 {
184182
let n = nums.len();
185-
let mut i = 0;
186-
while i < n {
187-
let j = nums[i] - 1;
188-
if (i as i32) == j || j < 0 || j >= (n as i32) || nums[i] == nums[j as usize] {
189-
i += 1;
190-
} else {
191-
nums.swap(i, j as usize);
183+
for i in 0..n {
184+
while nums[i] > 0 && nums[i] <= n as i32 && nums[i] != nums[nums[i] as usize - 1] {
185+
let j = nums[i] as usize - 1;
186+
nums.swap(i, j);
187+
}
188+
}
189+
for i in 0..n {
190+
if nums[i] != (i + 1) as i32 {
191+
return (i + 1) as i32;
192192
}
193193
}
194-
(nums
195-
.iter()
196-
.enumerate()
197-
.position(|(i, &v)| (v as usize) != i + 1)
198-
.unwrap_or(n) as i32)
199-
+ 1
194+
return (n + 1) as i32;
200195
}
201196
}
202197
```
@@ -233,56 +228,45 @@ public class Solution {
233228
```c
234229
int firstMissingPositive(int* nums, int numsSize) {
235230
for (int i = 0; i < numsSize; ++i) {
236-
while (nums[i] >= 1 && nums[i] <= numsSize && nums[i] != nums[nums[i] - 1]) {
237-
swap(&nums[i], &nums[nums[i] - 1]);
231+
while (nums[i] > 0 && nums[i] <= numsSize && nums[i] != nums[nums[i] - 1]) {
232+
int j = nums[i] - 1;
233+
int t = nums[i];
234+
nums[i] = nums[j];
235+
nums[j] = t;
238236
}
239237
}
240238
for (int i = 0; i < numsSize; ++i) {
241-
if (i + 1 != nums[i]) {
239+
if (nums[i] != i + 1) {
242240
return i + 1;
243241
}
244242
}
245243
return numsSize + 1;
246244
}
247-
248-
void swap(int* a, int* b) {
249-
int t = *a;
250-
*a = *b;
251-
*b = t;
252-
}
253245
```
254246
255247
#### PHP
256248
257249
```php
258250
class Solution {
259251
/**
260-
* @param integer[] $nums
261-
* @return integer
252+
* @param Integer[] $nums
253+
* @return Integer
262254
*/
263-
264255
function firstMissingPositive($nums) {
265256
$n = count($nums);
266-
267-
for ($i = 0; $i < $n; $i++) {
268-
if ($nums[$i] <= 0) {
269-
$nums[$i] = $n + 1;
270-
}
271-
}
272-
273257
for ($i = 0; $i < $n; $i++) {
274-
$num = abs($nums[$i]);
275-
if ($num <= $n) {
276-
$nums[$num - 1] = -abs($nums[$num - 1]);
258+
while ($nums[$i] >= 1 && $nums[$i] <= $n && $nums[$i] != $nums[$nums[$i] - 1]) {
259+
$j = $nums[$i] - 1;
260+
$t = $nums[$i];
261+
$nums[$i] = $nums[$j];
262+
$nums[$j] = $t;
277263
}
278264
}
279-
280265
for ($i = 0; $i < $n; $i++) {
281-
if ($nums[$i] > 0) {
266+
if ($nums[$i] != $i + 1) {
282267
return $i + 1;
283268
}
284269
}
285-
286270
return $n + 1;
287271
}
288272
}

0 commit comments

Comments
 (0)