Skip to content

Commit 899afed

Browse files
author
Aarzoo
committed
add solutions, explanation and update README file of the day 2601
1 parent c78c971 commit 899afed

File tree

8 files changed

+423
-0
lines changed

8 files changed

+423
-0
lines changed

Algorithms/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
| 2491 | Divide Players Into Teams of Equal Skill | [C++](./Algorithms/src/2491.%20Divide%20Players%20Into%20Teams%20of%20Equal%20Skill/Code/solution.cpp), [Java](./Algorithms/src/2491.%20Divide%20Players%20Into%20Teams%20of%20Equal%20Skill/Code/solution.java), [JavaScript](./Algorithms/src/2491.%20Divide%20Players%20Into%20Teams%20of%20Equal%20Skill/Code/solution.js), [Python](./Algorithms/src/2491.%20Divide%20Players%20Into%20Teams%20of%20Equal%20Skill/Code/solution.py), [Go](./Algorithms/src/2491.%20Divide%20Players%20Into%20Teams%20of%20Equal%20Skill/Code/solution.go) | [Explanation](./Algorithms/src/2491.%20Divide%20Players%20Into%20Teams%20of%20Equal%20Skill/Explanation/explanation.md) | Medium |
6262
| 2501 | Longest Square Streak in an Array | [C++](./Algorithms/src/2501.%20Longest%20Square%20Streak%20in%20an%20Array/Code/solution.cpp), [Java](./Algorithms/src/2501.%20Longest%20Square%20Streak%20in%20an%20Array/Code/solution.java), [JavaScript](./Algorithms/src/2501.%20Longest%20Square%20Streak%20in%20an%20Array/Code/solution.js), [Python](./Algorithms/src/2501.%20Longest%20Square%20Streak%20in%20an%20Array/Code/solution.py), [Go](./Algorithms/src/1598.2501.%20Longest%20Square%20Streak%20in%20an%20Array/solution.go) | [Explanation](./Algorithms/src/2501.%20Longest%20Square%20Streak%20in%20an%20Array/Explanation/explanation.md) | Medium |
6363
| 2530 | Maximal Score After Applying K Operations | [C++](./Algorithms/src/2530.%20Maximal%20Score%20After%20Applying%20K%20Operations/Code/solution.cpp), [Java](./Algorithms/src/2530.%20Maximal%20Score%20After%20Applying%20K%20Operations/Code/solution.java), [JavaScript](./Algorithms/src/2530.%20Maximal%20Score%20After%20Applying%20K%20Operations/Code/solution.js), [Python](./Algorithms/src/2530.%20Maximal%20Score%20After%20Applying%20K%20Operations/Code/solution.py), [Go](./Algorithms/src/2530.%20Maximal%20Score%20After%20Applying%20K%20Operations/Code/solution.go) | [Explanation](./Algorithms/src/2530.%20Maximal%20Score%20After%20Applying%20K%20Operations/Explanation/explanation.md) | Medium |
64+
| 2601 | Prime Subtraction Operation | [C++](./Algorithms/src/2601.%20Prime%20Subtraction%20Operation/Code/solution.cpp), [Java](./Algorithms/src/2601.%20Prime%20Subtraction%20Operation/Code/solution.java), [JavaScript](./Algorithms/src/2601.%20Prime%20Subtraction%20Operation/Code/solution.js), [Python](./Algorithms/src/2601.%20Prime%20Subtraction%20Operation/Code/solution.py), [Go](./Algorithms/src/2601.%20Prime%20Subtraction%20Operation/Code/solution.go) | [Explanation](./Algorithms/src/2601.%20Prime%20Subtraction%20Operation/Explanation/explanation.md) | Medium |
6465
| 2678 | Number of Senior Citizens | [C++](./Algorithms/src/2678.%20Number%20of%20Senior%20Citizens/Code/solution.cpp), [Java](./Algorithms/src/2678.%20Number%20of%20Senior%20Citizens/Code/solution.java), [JavaScript](./Algorithms/src/2678.%20Number%20of%20Senior%20Citizens/Code/solution.js), [Python](./Algorithms/src/2678.%20Number%20of%20Senior%20Citizens/Code/solution.py), [Go](./Algorithms/src/2678.%20Number%20of%20Senior%20Citizens/Code/solution.go) | [Explanation](./Algorithms/src/2678.%20Number%20of%20Senior%20Citizens/Explanation/explanation.md) | Easy |
6566
| 2684 | Maximum Number of Moves in a Grid | [C++](./Algorithms/src/2684.%20Maximum%20Number%20of%20Moves%20in%20a%20Grid/Code/solution.cpp), [Java](./Algorithms/src/2684.%20Maximum%20Number%20of%20Moves%20in%20a%20Grid/Code/solution.java), [JavaScript](./Algorithms/src/2684.%20Maximum%20Number%20of%20Moves%20in%20a%20Grid/Code/solution.js), [Python](./Algorithms/src/2684.%20Maximum%20Number%20of%20Moves%20in%20a%20Grid/Code/solution.py), [Go](./Algorithms/src/2684.%20Maximum%20Number%20of%20Moves%20in%20a%20Grid/Code/solution.go) | [Explanation](./Algorithms/src/2684.%20Maximum%20Number%20of%20Moves%20in%20a%20Grid/Explanation/explanation.md) | Medium |
6667
| 2696 | Minimum String Length After Removing Substrings | [C++](./Algorithms/src/2696.%20Minimum%20String%20Length%20After%20Removing%20Substrings/Code/solution.cpp), [Java](./Algorithms/src/2696.%20Minimum%20String%20Length%20After%20Removing%20Substrings/Code/solution.java), [JavaScript](./Algorithms/src/2696.%20Minimum%20String%20Length%20After%20Removing%20Substrings/Code/solution.js), [Python](./Algorithms/src/2696.%20Minimum%20String%20Length%20After%20Removing%20Substrings/Code/solution.py), [Go](./Algorithms/src/2696.%20Minimum%20String%20Length%20After%20Removing%20Substrings/Code/solution.go) | [Explanation](./Algorithms/src/2696.%20Minimum%20String%20Length%20After%20Removing%20Substrings/Explanation/explanation.md) | Easy |
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <vector>
2+
#include <bitset>
3+
#include <algorithm>
4+
#include <cmath>
5+
using namespace std;
6+
7+
class Solution
8+
{
9+
public:
10+
vector<int> prime;
11+
12+
void sieve(int M)
13+
{
14+
bitset<1001> isPrime;
15+
isPrime.set();
16+
isPrime[0] = isPrime[1] = 0;
17+
18+
for (int p = 2; p * p <= M; ++p)
19+
{
20+
if (isPrime[p])
21+
{
22+
for (int j = p * p; j <= M; j += p)
23+
{
24+
isPrime[j] = 0;
25+
}
26+
}
27+
}
28+
29+
for (int p = 2; p <= M; ++p)
30+
{
31+
if (isPrime[p])
32+
prime.push_back(p);
33+
}
34+
}
35+
36+
bool primeSubOperation(vector<int> &nums)
37+
{
38+
int n = nums.size(), M = *max_element(nums.begin(), nums.end());
39+
sieve(M);
40+
41+
for (int i = n - 2; i >= 0; i--)
42+
{
43+
if (nums[i] >= nums[i + 1])
44+
{
45+
auto it = upper_bound(prime.begin(), prime.end(), nums[i] - nums[i + 1]);
46+
if (it == prime.end())
47+
return false;
48+
nums[i] -= *it;
49+
}
50+
if (nums[i] <= 0)
51+
return false;
52+
}
53+
return true;
54+
}
55+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
func primeSubOperation(nums []int) bool {
2+
primes := generatePrimes(1000)
3+
for i := len(nums) - 2; i >= 0; i-- {
4+
if nums[i] < nums[i+1] {
5+
continue
6+
}
7+
8+
target := nums[i] - nums[i+1]
9+
for _, p := range primes {
10+
if p > target {
11+
nums[i] -= p
12+
break
13+
}
14+
}
15+
if nums[i] <= 0 || nums[i] >= nums[i+1] {
16+
return false
17+
}
18+
}
19+
return true
20+
}
21+
22+
func generatePrimes(maxNum int) []int {
23+
isPrime := make([]bool, maxNum+1)
24+
for i := 2; i <= maxNum; i++ {
25+
isPrime[i] = true
26+
}
27+
for i := 2; i*i <= maxNum; i++ {
28+
if isPrime[i] {
29+
for j := i * i; j <= maxNum; j += i {
30+
isPrime[j] = false
31+
}
32+
}
33+
}
34+
var primes []int
35+
for i := 2; i <= maxNum; i++ {
36+
if isPrime[i] {
37+
primes = append(primes, i)
38+
}
39+
}
40+
return primes
41+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution {
2+
private boolean isPrime(int number) {
3+
if (number < 2)
4+
return false;
5+
6+
for (int i = 2; i <= Math.sqrt(number); i++) {
7+
if (number % i == 0) {
8+
return false;
9+
}
10+
}
11+
return true;
12+
}
13+
14+
public boolean primeSubOperation(int[] nums) {
15+
for (int i = 0; i < nums.length; i++) {
16+
int bound = (i == 0) ? nums[0] : nums[i] - nums[i - 1];
17+
18+
if (bound <= 0) {
19+
return false;
20+
}
21+
22+
int largestPrime = 0;
23+
for (int j = bound - 1; j >= 2; j--) {
24+
if (isPrime(j)) {
25+
largestPrime = j;
26+
break;
27+
}
28+
}
29+
30+
nums[i] -= largestPrime;
31+
}
32+
33+
return true;
34+
}
35+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const primeSubOperation = function (nums) {
2+
const sieve = new Array(1001).fill(true);
3+
const primes = [];
4+
5+
for (let i = 2; i <= 1000; i++) {
6+
if (sieve[i]) {
7+
primes.push(i);
8+
for (let j = i * 2; j <= 1000; j += i) sieve[j] = false;
9+
}
10+
}
11+
12+
for (let i = nums.length - 2; i >= 0; i--) {
13+
if (nums[i] < nums[i + 1]) continue;
14+
15+
let target = nums[i] - nums[i + 1];
16+
let prime = primes.find((p) => p > target);
17+
if (!prime) return false;
18+
19+
nums[i] -= prime;
20+
if (nums[i] <= 0) return false;
21+
}
22+
return true;
23+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import math
2+
3+
class Solution:
4+
def primeSubOperation(self, nums):
5+
primes = self.sieve_of_eratosthenes(1000)
6+
7+
for i in range(len(nums) - 2, -1, -1):
8+
if nums[i] < nums[i + 1]: continue
9+
10+
target = nums[i] - nums[i + 1]
11+
prime = next((p for p in primes if p > target), None)
12+
if not prime: return False
13+
14+
nums[i] -= prime
15+
if nums[i] <= 0: return False
16+
17+
return True
18+
19+
def sieve_of_eratosthenes(self, max_num):
20+
is_prime = [True] * (max_num + 1)
21+
is_prime[0] = is_prime[1] = False
22+
for i in range(2, int(math.sqrt(max_num)) + 1):
23+
if is_prime[i]:
24+
for j in range(i * i, max_num + 1, i):
25+
is_prime[j] = False
26+
return [i for i in range(2, max_num + 1) if is_prime[i]]

0 commit comments

Comments
 (0)