Skip to content

Commit 3b4a836

Browse files
authored
feat: add solutions to lc problem: No.2057 (#3837)
No.2057.Smallest Index With Equal Value
1 parent 6e410a4 commit 3b4a836

File tree

8 files changed

+134
-30
lines changed

8 files changed

+134
-30
lines changed

solution/2000-2099/2057.Smallest Index With Equal Value/README.md

+49-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,13 @@ i=3: 3 mod 10 = 3 != nums[3].
7676

7777
<!-- solution:start -->
7878

79-
### 方法一
79+
### 方法一:遍历
80+
81+
我们直接遍历数组,对于每个下标 $i$,我们判断是否满足 $i \bmod 10 = \textit{nums}[i]$,如果满足则返回当前下标 $i$。
82+
83+
如果遍历完数组都没有找到满足条件的下标,则返回 $-1$。
84+
85+
时间复杂度 $O(n)$,其中 $n$ 是数组的长度。空间复杂度 $O(1)$。
8086

8187
<!-- tabs:start -->
8288

@@ -85,8 +91,8 @@ i=3: 3 mod 10 = 3 != nums[3].
8591
```python
8692
class Solution:
8793
def smallestEqual(self, nums: List[int]) -> int:
88-
for i, v in enumerate(nums):
89-
if i % 10 == v:
94+
for i, x in enumerate(nums):
95+
if i % 10 == x:
9096
return i
9197
return -1
9298
```
@@ -112,9 +118,11 @@ class Solution {
112118
class Solution {
113119
public:
114120
int smallestEqual(vector<int>& nums) {
115-
for (int i = 0; i < nums.size(); ++i)
116-
if (i % 10 == nums[i])
121+
for (int i = 0; i < nums.size(); ++i) {
122+
if (i % 10 == nums[i]) {
117123
return i;
124+
}
125+
}
118126
return -1;
119127
}
120128
};
@@ -124,8 +132,8 @@ public:
124132
125133
```go
126134
func smallestEqual(nums []int) int {
127-
for i, v := range nums {
128-
if i%10 == v {
135+
for i, x := range nums {
136+
if i%10 == x {
129137
return i
130138
}
131139
}
@@ -137,13 +145,45 @@ func smallestEqual(nums []int) int {
137145

138146
```ts
139147
function smallestEqual(nums: number[]): number {
140-
for (let i = 0; i < nums.length; i++) {
141-
if (i % 10 == nums[i]) return i;
148+
for (let i = 0; i < nums.length; ++i) {
149+
if (i % 10 === nums[i]) {
150+
return i;
151+
}
142152
}
143153
return -1;
144154
}
145155
```
146156

157+
#### Rust
158+
159+
```rust
160+
impl Solution {
161+
pub fn smallest_equal(nums: Vec<i32>) -> i32 {
162+
for (i, &x) in nums.iter().enumerate() {
163+
if i % 10 == x as usize {
164+
return i as i32;
165+
}
166+
}
167+
-1
168+
}
169+
}
170+
```
171+
172+
#### Cangjie
173+
174+
```cj
175+
class Solution {
176+
func smallestEqual(nums: Array<Int64>): Int64 {
177+
for (i in 0..nums.size) {
178+
if (i % 10 == nums[i]) {
179+
return i
180+
}
181+
}
182+
-1
183+
}
184+
}
185+
```
186+
147187
<!-- tabs:end -->
148188

149189
<!-- solution:end -->

solution/2000-2099/2057.Smallest Index With Equal Value/README_EN.md

+51-11
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ tags:
2828
<pre>
2929
<strong>Input:</strong> nums = [0,1,2]
3030
<strong>Output:</strong> 0
31-
<strong>Explanation:</strong>
31+
<strong>Explanation:</strong>
3232
i=0: 0 mod 10 = 0 == nums[0].
3333
i=1: 1 mod 10 = 1 == nums[1].
3434
i=2: 2 mod 10 = 2 == nums[2].
@@ -40,7 +40,7 @@ All indices have i mod 10 == nums[i], so we return the smallest index 0.
4040
<pre>
4141
<strong>Input:</strong> nums = [4,3,2,1]
4242
<strong>Output:</strong> 2
43-
<strong>Explanation:</strong>
43+
<strong>Explanation:</strong>
4444
i=0: 0 mod 10 = 0 != nums[0].
4545
i=1: 1 mod 10 = 1 != nums[1].
4646
i=2: 2 mod 10 = 2 == nums[2].
@@ -70,7 +70,13 @@ i=3: 3 mod 10 = 3 != nums[3].
7070

7171
<!-- solution:start -->
7272

73-
### Solution 1
73+
### Solution 1: Traversal
74+
75+
We directly traverse the array. For each index $i$, we check if it satisfies $i \bmod 10 = \textit{nums}[i]$. If it does, we return the current index $i$.
76+
77+
If we traverse the entire array and do not find a satisfying index, we return $-1$.
78+
79+
The time complexity is $O(n)$, where $n$ is the length of the array. The space complexity is $O(1)$.
7480

7581
<!-- tabs:start -->
7682

@@ -79,8 +85,8 @@ i=3: 3 mod 10 = 3 != nums[3].
7985
```python
8086
class Solution:
8187
def smallestEqual(self, nums: List[int]) -> int:
82-
for i, v in enumerate(nums):
83-
if i % 10 == v:
88+
for i, x in enumerate(nums):
89+
if i % 10 == x:
8490
return i
8591
return -1
8692
```
@@ -106,9 +112,11 @@ class Solution {
106112
class Solution {
107113
public:
108114
int smallestEqual(vector<int>& nums) {
109-
for (int i = 0; i < nums.size(); ++i)
110-
if (i % 10 == nums[i])
115+
for (int i = 0; i < nums.size(); ++i) {
116+
if (i % 10 == nums[i]) {
111117
return i;
118+
}
119+
}
112120
return -1;
113121
}
114122
};
@@ -118,8 +126,8 @@ public:
118126
119127
```go
120128
func smallestEqual(nums []int) int {
121-
for i, v := range nums {
122-
if i%10 == v {
129+
for i, x := range nums {
130+
if i%10 == x {
123131
return i
124132
}
125133
}
@@ -131,13 +139,45 @@ func smallestEqual(nums []int) int {
131139

132140
```ts
133141
function smallestEqual(nums: number[]): number {
134-
for (let i = 0; i < nums.length; i++) {
135-
if (i % 10 == nums[i]) return i;
142+
for (let i = 0; i < nums.length; ++i) {
143+
if (i % 10 === nums[i]) {
144+
return i;
145+
}
136146
}
137147
return -1;
138148
}
139149
```
140150

151+
#### Rust
152+
153+
```rust
154+
impl Solution {
155+
pub fn smallest_equal(nums: Vec<i32>) -> i32 {
156+
for (i, &x) in nums.iter().enumerate() {
157+
if i % 10 == x as usize {
158+
return i as i32;
159+
}
160+
}
161+
-1
162+
}
163+
}
164+
```
165+
166+
#### Cangjie
167+
168+
```cj
169+
class Solution {
170+
func smallestEqual(nums: Array<Int64>): Int64 {
171+
for (i in 0..nums.size) {
172+
if (i % 10 == nums[i]) {
173+
return i
174+
}
175+
}
176+
-1
177+
}
178+
}
179+
```
180+
141181
<!-- tabs:end -->
142182

143183
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
func smallestEqual(nums: Array<Int64>): Int64 {
3+
for (i in 0..nums.size) {
4+
if (i % 10 == nums[i]) {
5+
return i
6+
}
7+
}
8+
-1
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
class Solution {
22
public:
33
int smallestEqual(vector<int>& nums) {
4-
for (int i = 0; i < nums.size(); ++i)
5-
if (i % 10 == nums[i])
4+
for (int i = 0; i < nums.size(); ++i) {
5+
if (i % 10 == nums[i]) {
66
return i;
7+
}
8+
}
79
return -1;
810
}
9-
};
11+
};
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
func smallestEqual(nums []int) int {
2-
for i, v := range nums {
3-
if i%10 == v {
2+
for i, x := range nums {
3+
if i%10 == x {
44
return i
55
}
66
}
77
return -1
8-
}
8+
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Solution:
22
def smallestEqual(self, nums: List[int]) -> int:
3-
for i, v in enumerate(nums):
4-
if i % 10 == v:
3+
for i, x in enumerate(nums):
4+
if i % 10 == x:
55
return i
66
return -1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
impl Solution {
2+
pub fn smallest_equal(nums: Vec<i32>) -> i32 {
3+
for (i, &x) in nums.iter().enumerate() {
4+
if i % 10 == x as usize {
5+
return i as i32;
6+
}
7+
}
8+
-1
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
function smallestEqual(nums: number[]): number {
2-
for (let i = 0; i < nums.length; i++) {
3-
if (i % 10 == nums[i]) return i;
2+
for (let i = 0; i < nums.length; ++i) {
3+
if (i % 10 === nums[i]) {
4+
return i;
5+
}
46
}
57
return -1;
68
}

0 commit comments

Comments
 (0)