Skip to content

Commit c689618

Browse files
committed
feat: add solutions to lc problem: No.0747
No.0747.Largest Number At Least Twice of Others
1 parent ac956b4 commit c689618

File tree

7 files changed

+204
-105
lines changed

7 files changed

+204
-105
lines changed

solution/0700-0799/0747.Largest Number At Least Twice of Others/README.md

Lines changed: 71 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45+
遍历数组找到最大值和次大值,最后判断是否满足条件即可。
46+
4547
<!-- tabs:start -->
4648

4749
### **Python3**
@@ -51,14 +53,15 @@
5153
```python
5254
class Solution:
5355
def dominantIndex(self, nums: List[int]) -> int:
54-
max_idx, n = 0, len(nums)
55-
for i in range(1, n):
56-
if nums[i] > nums[max_idx]:
57-
max_idx = i
58-
for i in range(n):
59-
if i != max_idx and nums[i] * 2 > nums[max_idx]:
60-
return -1
61-
return max_idx
56+
mx = mid = 0
57+
ans = -1
58+
for i, v in enumerate(nums):
59+
if v > mx:
60+
mid, mx = mx, v
61+
ans = i
62+
elif v > mid:
63+
mid = v
64+
return ans if mx >= 2 * mid else -1
6265
```
6366

6467
### **Java**
@@ -67,18 +70,20 @@ class Solution:
6770

6871
```java
6972
class Solution {
70-
public int dominantIndex(int[] nums) {
71-
int maxIndex = 0;
72-
for (int i = 0; i < nums.length; i++) {
73-
if (nums[i] > nums[maxIndex])
74-
maxIndex = i;
75-
}
76-
for (int i = 0; i < nums.length; i++) {
77-
if (nums[i] * 2 > nums[maxIndex] && i != maxIndex)
78-
return -1;
73+
public int dominantIndex(int[] nums) {
74+
int mx = 0, mid = 0;
75+
int ans = -1;
76+
for (int i = 0; i < nums.length; ++i) {
77+
if (nums[i] > mx) {
78+
mid = mx;
79+
mx = nums[i];
80+
ans = i;
81+
} else if (nums[i] > mid) {
82+
mid = nums[i];
83+
}
84+
}
85+
return mx >= mid * 2 ? ans : -1;
7986
}
80-
return maxIndex;
81-
}
8287
}
8388
```
8489

@@ -88,14 +93,19 @@ class Solution {
8893
class Solution {
8994
public:
9095
int dominantIndex(vector<int>& nums) {
91-
int maxIdx = 0, n = nums.size();
92-
for (int i = 1; i < n; ++i) {
93-
if (nums[i] > nums[maxIdx]) maxIdx = i;
96+
int mx = 0, mid = 0;
97+
int ans = 0;
98+
for (int i = 0; i < nums.size(); ++i)
99+
{
100+
if (nums[i] > mx)
101+
{
102+
mid = mx;
103+
mx = nums[i];
104+
ans = i;
105+
}
106+
else if (nums[i] > mid) mid = nums[i];
94107
}
95-
for (int i = 0; i < n; ++i) {
96-
if (i != maxIdx && nums[i] * 2 > nums[maxIdx]) return -1;
97-
}
98-
return maxIdx;
108+
return mx >= mid * 2 ? ans : -1;
99109
}
100110
};
101111
```
@@ -104,21 +114,47 @@ public:
104114
105115
```go
106116
func dominantIndex(nums []int) int {
107-
maxIndex, n := 0, len(nums)
108-
for i := 1; i < n; i++ {
109-
if nums[i] > nums[maxIndex] {
110-
maxIndex = i
117+
mx, mid := 0, 0
118+
ans := 0
119+
for i, v := range nums {
120+
if v > mx {
121+
mid, mx = mx, v
122+
ans = i
123+
} else if v > mid {
124+
mid = v
111125
}
112126
}
113-
for i := 0; i < n; i++ {
114-
if i != maxIndex && nums[i]*2 > nums[maxIndex] {
115-
return -1
116-
}
127+
if mx >= mid*2 {
128+
return ans
117129
}
118-
return maxIndex
130+
return -1
119131
}
120132
```
121133

134+
### **JavaScript**
135+
136+
```js
137+
/**
138+
* @param {number[]} nums
139+
* @return {number}
140+
*/
141+
var dominantIndex = function (nums) {
142+
let mx = 0,
143+
mid = 0;
144+
let ans = 0;
145+
for (let i = 0; i < nums.length; ++i) {
146+
if (nums[i] > mx) {
147+
mid = mx;
148+
mx = nums[i];
149+
ans = i;
150+
} else if (nums[i] > mid) {
151+
mid = nums[i];
152+
}
153+
}
154+
return mx >= mid * 2 ? ans : -1;
155+
};
156+
```
157+
122158
### **...**
123159

124160
```

solution/0700-0799/0747.Largest Number At Least Twice of Others/README_EN.md

Lines changed: 69 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -45,32 +45,35 @@ The index of value 6 is 1, so we return 1.
4545
```python
4646
class Solution:
4747
def dominantIndex(self, nums: List[int]) -> int:
48-
max_idx, n = 0, len(nums)
49-
for i in range(1, n):
50-
if nums[i] > nums[max_idx]:
51-
max_idx = i
52-
for i in range(n):
53-
if i != max_idx and nums[i] * 2 > nums[max_idx]:
54-
return -1
55-
return max_idx
48+
mx = mid = 0
49+
ans = -1
50+
for i, v in enumerate(nums):
51+
if v > mx:
52+
mid, mx = mx, v
53+
ans = i
54+
elif v > mid:
55+
mid = v
56+
return ans if mx >= 2 * mid else -1
5657
```
5758

5859
### **Java**
5960

6061
```java
6162
class Solution {
62-
public int dominantIndex(int[] nums) {
63-
int maxIndex = 0;
64-
for (int i = 0; i < nums.length; i++) {
65-
if (nums[i] > nums[maxIndex])
66-
maxIndex = i;
67-
}
68-
for (int i = 0; i < nums.length; i++) {
69-
if (nums[i] * 2 > nums[maxIndex] && i != maxIndex)
70-
return -1;
63+
public int dominantIndex(int[] nums) {
64+
int mx = 0, mid = 0;
65+
int ans = -1;
66+
for (int i = 0; i < nums.length; ++i) {
67+
if (nums[i] > mx) {
68+
mid = mx;
69+
mx = nums[i];
70+
ans = i;
71+
} else if (nums[i] > mid) {
72+
mid = nums[i];
73+
}
74+
}
75+
return mx >= mid * 2 ? ans : -1;
7176
}
72-
return maxIndex;
73-
}
7477
}
7578
```
7679

@@ -80,14 +83,19 @@ class Solution {
8083
class Solution {
8184
public:
8285
int dominantIndex(vector<int>& nums) {
83-
int maxIdx = 0, n = nums.size();
84-
for (int i = 1; i < n; ++i) {
85-
if (nums[i] > nums[maxIdx]) maxIdx = i;
86-
}
87-
for (int i = 0; i < n; ++i) {
88-
if (i != maxIdx && nums[i] * 2 > nums[maxIdx]) return -1;
86+
int mx = 0, mid = 0;
87+
int ans = 0;
88+
for (int i = 0; i < nums.size(); ++i)
89+
{
90+
if (nums[i] > mx)
91+
{
92+
mid = mx;
93+
mx = nums[i];
94+
ans = i;
95+
}
96+
else if (nums[i] > mid) mid = nums[i];
8997
}
90-
return maxIdx;
98+
return mx >= mid * 2 ? ans : -1;
9199
}
92100
};
93101
```
@@ -96,21 +104,47 @@ public:
96104
97105
```go
98106
func dominantIndex(nums []int) int {
99-
maxIndex, n := 0, len(nums)
100-
for i := 1; i < n; i++ {
101-
if nums[i] > nums[maxIndex] {
102-
maxIndex = i
107+
mx, mid := 0, 0
108+
ans := 0
109+
for i, v := range nums {
110+
if v > mx {
111+
mid, mx = mx, v
112+
ans = i
113+
} else if v > mid {
114+
mid = v
103115
}
104116
}
105-
for i := 0; i < n; i++ {
106-
if i != maxIndex && nums[i]*2 > nums[maxIndex] {
107-
return -1
108-
}
117+
if mx >= mid*2 {
118+
return ans
109119
}
110-
return maxIndex
120+
return -1
111121
}
112122
```
113123

124+
### **JavaScript**
125+
126+
```js
127+
/**
128+
* @param {number[]} nums
129+
* @return {number}
130+
*/
131+
var dominantIndex = function (nums) {
132+
let mx = 0,
133+
mid = 0;
134+
let ans = 0;
135+
for (let i = 0; i < nums.length; ++i) {
136+
if (nums[i] > mx) {
137+
mid = mx;
138+
mx = nums[i];
139+
ans = i;
140+
} else if (nums[i] > mid) {
141+
mid = nums[i];
142+
}
143+
}
144+
return mx >= mid * 2 ? ans : -1;
145+
};
146+
```
147+
114148
### **...**
115149

116150
```
Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
class Solution {
22
public:
33
int dominantIndex(vector<int>& nums) {
4-
int maxIdx = 0, n = nums.size();
5-
for (int i = 1; i < n; ++i) {
6-
if (nums[i] > nums[maxIdx]) maxIdx = i;
4+
int mx = 0, mid = 0;
5+
int ans = 0;
6+
for (int i = 0; i < nums.size(); ++i)
7+
{
8+
if (nums[i] > mx)
9+
{
10+
mid = mx;
11+
mx = nums[i];
12+
ans = i;
13+
}
14+
else if (nums[i] > mid) mid = nums[i];
715
}
8-
for (int i = 0; i < n; ++i) {
9-
if (i != maxIdx && nums[i] * 2 > nums[maxIdx]) return -1;
10-
}
11-
return maxIdx;
16+
return mx >= mid * 2 ? ans : -1;
1217
}
1318
};
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
func dominantIndex(nums []int) int {
2-
maxIndex, n := 0, len(nums)
3-
for i := 1; i < n; i++ {
4-
if nums[i] > nums[maxIndex] {
5-
maxIndex = i
2+
mx, mid := 0, 0
3+
ans := 0
4+
for i, v := range nums {
5+
if v > mx {
6+
mid, mx = mx, v
7+
ans = i
8+
} else if v > mid {
9+
mid = v
610
}
711
}
8-
for i := 0; i < n; i++ {
9-
if i != maxIndex && nums[i]*2 > nums[maxIndex] {
10-
return -1
11-
}
12+
if mx >= mid*2 {
13+
return ans
1214
}
13-
return maxIndex
15+
return -1
1416
}
Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
class Solution {
2-
public int dominantIndex(int[] nums) {
3-
int maxIndex = 0;
4-
for (int i = 0; i < nums.length; i++) {
5-
if (nums[i] > nums[maxIndex])
6-
maxIndex = i;
2+
public int dominantIndex(int[] nums) {
3+
int mx = Integer.MIN_VALUE, mid = Integer.MIN_VALUE;
4+
int ans = -1;
5+
for (int i = 0; i < nums.length; ++i) {
6+
if (nums[i] > mx) {
7+
mid = mx;
8+
mx = nums[i];
9+
ans = i;
10+
} else if (nums[i] > mid) {
11+
mid = nums[i];
12+
}
13+
}
14+
return mx >= mid * 2 ? ans : -1;
715
}
8-
for (int i = 0; i < nums.length; i++) {
9-
if (nums[i] * 2 > nums[maxIndex] && i != maxIndex)
10-
return -1;
11-
}
12-
return maxIndex;
13-
}
1416
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var dominantIndex = function (nums) {
6+
let mx = 0,
7+
mid = 0;
8+
let ans = 0;
9+
for (let i = 0; i < nums.length; ++i) {
10+
if (nums[i] > mx) {
11+
mid = mx;
12+
mx = nums[i];
13+
ans = i;
14+
} else if (nums[i] > mid) {
15+
mid = nums[i];
16+
}
17+
}
18+
return mx >= mid * 2 ? ans : -1;
19+
};

0 commit comments

Comments
 (0)