Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1a6ab2a

Browse files
feat: update solutions to lc problems: No.0189,0238,0041 (doocs#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‎

Lines changed: 43 additions & 59 deletions
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‎

Lines changed: 43 additions & 59 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /