> report() Returns a list of cheapest rented movies as described above.
- *
- * Note: The test cases will be generated such that rent will only be called if the shop has an
- * unrented copy of the movie, and drop will only be called if the shop had previously rented out
- * the movie.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} entries
- */
-var MovieRentingSystem = function(n, entries) {
- this.shopMovies = new Map();
- this.movieShops = new Map();
- this.rented = new PriorityQueue((a, b) => {
- if (a[2] !== b[2]) return a[2] - b[2];
- if (a[0] !== b[0]) return a[0] - b[0];
- return a[1] - b[1];
- });
- this.rentedLookup = new Map();
-
- for (const [shop, movie, price] of entries) {
- if (!this.shopMovies.has(shop)) {
- this.shopMovies.set(shop, new Map());
- }
- this.shopMovies.get(shop).set(movie, price);
-
- if (!this.movieShops.has(movie)) {
- this.movieShops.set(movie, new PriorityQueue((a, b) => {
- if (a[1] !== b[1]) return a[1] - b[1];
- return a[0] - b[0];
- }));
- }
- this.movieShops.get(movie).enqueue([shop, price]);
- }
-};
-
-/**
- * @param {number} movie
- * @return {number[]}
- */
-MovieRentingSystem.prototype.search = function(movie) {
- if (!this.movieShops.has(movie)) return [];
-
- const queue = this.movieShops.get(movie);
- const result = [];
- const seen = new Set();
-
- while (!queue.isEmpty() && result.length < 5) {
- const [shop, price] = queue.dequeue();
- if (this.shopMovies.get(shop)?.has(movie) && !seen.has(shop)) {
- result.push(shop);
- seen.add(shop);
- }
- }
-
- for (const shop of result) {
- queue.enqueue([shop, this.shopMovies.get(shop).get(movie)]);
- }
-
- return result;
-};
-
-/**
- * @param {number} shop
- * @param {number} movie
- * @return {void}
- */
-MovieRentingSystem.prototype.rent = function(shop, movie) {
- const price = this.shopMovies.get(shop).get(movie);
- this.shopMovies.get(shop).delete(movie);
- this.rented.enqueue([shop, movie, price]);
- this.rentedLookup.set(`${shop}:${movie}`, price);
-};
-
-/**
- * @param {number} shop
- * @param {number} movie
- * @return {void}
- */
-MovieRentingSystem.prototype.drop = function(shop, movie) {
- const price = this.rentedLookup.get(`${shop}:${movie}`);
- this.rentedLookup.delete(`${shop}:${movie}`);
- if (!this.shopMovies.get(shop).has(movie)) {
- this.shopMovies.get(shop).set(movie, price);
- this.movieShops.get(movie).enqueue([shop, price]);
- }
-};
-
-/**
- * @return {number[][]}
- */
-MovieRentingSystem.prototype.report = function() {
- const result = [];
- const seen = new Set();
-
- while (!this.rented.isEmpty() && result.length < 5) {
- const [shop, movie, price] = this.rented.dequeue();
- const key = `${shop}:${movie}`;
- if (this.rentedLookup.has(key) && !seen.has(key)) {
- result.push([shop, movie]);
- seen.add(key);
- }
- }
-
- for (const [shop, movie] of result) {
- const price = this.rentedLookup.get(`${shop}:${movie}`);
- this.rented.enqueue([shop, movie, price]);
- }
-
- return result;
-};
diff --git a/solutions/1913-maximum-product-difference-between-two-pairs.js b/solutions/1913-maximum-product-difference-between-two-pairs.js
deleted file mode 100644
index 91e73220..00000000
--- a/solutions/1913-maximum-product-difference-between-two-pairs.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 1913. Maximum Product Difference Between Two Pairs
- * https://leetcode.com/problems/maximum-product-difference-between-two-pairs/
- * Difficulty: Easy
- *
- * The product difference between two pairs (a, b) and (c, d) is defined as (a * b) - (c * d).
- * - For example, the product difference between (5, 6) and (2, 7) is (5 * 6) - (2 * 7) = 16.
- *
- * Given an integer array nums, choose four distinct indices w, x, y, and z such that the product
- * difference between pairs (nums[w], nums[x]) and (nums[y], nums[z]) is maximized.
- *
- * Return the maximum such product difference.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var maxProductDifference = function(nums) {
- let max1 = 0;
- let max2 = 0;
- let min1 = Infinity;
- let min2 = Infinity;
-
- for (const num of nums) {
- if (num > max1) {
- max2 = max1;
- max1 = num;
- } else if (num > max2) {
- max2 = num;
- }
-
- if (num < min1) {
- min2 = min1;
- min1 = num;
- } else if (num < min2) {
- min2 = num;
- }
- }
-
- return max1 * max2 - min1 * min2;
-};
diff --git a/solutions/1914-cyclically-rotating-a-grid.js b/solutions/1914-cyclically-rotating-a-grid.js
deleted file mode 100644
index 84724945..00000000
--- a/solutions/1914-cyclically-rotating-a-grid.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 1914. Cyclically Rotating a Grid
- * https://leetcode.com/problems/cyclically-rotating-a-grid/
- * Difficulty: Medium
- *
- * You are given an m x n integer matrix grid, where m and n are both even integers, and
- * an integer k.
- *
- * The matrix is composed of several layers, which is shown in the below image, where each
- * color is its own layer.
- *
- * A cyclic rotation of the matrix is done by cyclically rotating each layer in the matrix.
- * To cyclically rotate a layer once, each element in the layer will take the place of the
- * adjacent element in the counter-clockwise direction. An example rotation is shown below.
- */
-
-/**
- * @param {number[][]} grid
- * @param {number} k
- * @return {number[][]}
- */
-var rotateGrid = function(grid, k) {
- const rows = grid.length;
- const cols = grid[0].length;
- const result = grid.map(row => [...row]);
-
- for (let layer = 0; layer < Math.min(rows, cols) / 2; layer++) {
- rotateLayer(layer, layer, rows - 1 - layer, cols - 1 - layer, k);
- }
-
- return result;
-
- function rotateLayer(top, left, bottom, right, rotations) {
- if (top >= bottom || left >= right) return;
-
- const perimeter = 2 * (bottom - top + right - left);
- const effectiveRotations = rotations % perimeter;
- if (effectiveRotations === 0) return;
-
- const elements = [];
- for (let i = top; i <= bottom; i++) elements.push(grid[i][left]);
- for (let j = left + 1; j <= right; j++) elements.push(grid[bottom][j]);
- for (let i = bottom - 1; i >= top; i--) elements.push(grid[i][right]);
- for (let j = right - 1; j > left; j--) elements.push(grid[top][j]);
-
- const offset = (perimeter - effectiveRotations) % perimeter;
- let index = offset;
-
- for (let i = top; i <= bottom; i++) {
- result[i][left] = elements[index % perimeter];
- index++;
- }
- for (let j = left + 1; j <= right; j++) {
- result[bottom][j] = elements[index % perimeter];
- index++;
- }
- for (let i = bottom - 1; i >= top; i--) {
- result[i][right] = elements[index % perimeter];
- index++;
- }
- for (let j = right - 1; j > left; j--) {
- result[top][j] = elements[index % perimeter];
- index++;
- }
- }
-};
diff --git a/solutions/1915-number-of-wonderful-substrings.js b/solutions/1915-number-of-wonderful-substrings.js
deleted file mode 100644
index b9aaf680..00000000
--- a/solutions/1915-number-of-wonderful-substrings.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 1915. Number of Wonderful Substrings
- * https://leetcode.com/problems/number-of-wonderful-substrings/
- * Difficulty: Medium
- *
- * A wonderful string is a string where at most one letter appears an odd number of times.
- * - For example, "ccjjc" and "abab" are wonderful, but "ab" is not.
- *
- * Given a string word that consists of the first ten lowercase English letters ('a' through
- * 'j'), return the number of wonderful non-empty substrings in word. If the same substring
- * appears multiple times in word, then count each occurrence separately.
- *
- * A substring is a contiguous sequence of characters in a string.
- */
-
-/**
- * @param {string} word
- * @return {number}
- */
-var wonderfulSubstrings = function(word) {
- let count = 0;
- const freq = new Map([[0, 1]]);
- let state = 0;
-
- for (const char of word) {
- const bit = 1 << (char.charCodeAt(0) - 97);
- state ^= bit;
-
- count += freq.get(state) || 0;
- freq.set(state, (freq.get(state) || 0) + 1);
-
- for (let i = 0; i < 10; i++) {
- const oddBit = state ^ (1 << i);
- count += freq.get(oddBit) || 0;
- }
- }
-
- return count;
-};
diff --git a/solutions/1916-count-ways-to-build-rooms-in-an-ant-colony.js b/solutions/1916-count-ways-to-build-rooms-in-an-ant-colony.js
deleted file mode 100644
index 93f715af..00000000
--- a/solutions/1916-count-ways-to-build-rooms-in-an-ant-colony.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 1916. Count Ways to Build Rooms in an Ant Colony
- * https://leetcode.com/problems/count-ways-to-build-rooms-in-an-ant-colony/
- * Difficulty: Hard
- *
- * You are an ant tasked with adding n new rooms numbered 0 to n-1 to your colony. You are given
- * the expansion plan as a 0-indexed integer array of length n, prevRoom, where prevRoom[i]
- * indicates that you must build room prevRoom[i] before building room i, and these two rooms
- * must be connected directly. Room 0 is already built, so prevRoom[0] = -1. The expansion plan
- * is given such that once all the rooms are built, every room will be reachable from room 0.
- *
- * You can only build one room at a time, and you can travel freely between rooms you have
- * already built only if they are connected. You can choose to build any room as long as its
- * previous room is already built.
- *
- * Return the number of different orders you can build all the rooms in. Since the answer may
- * be large, return it modulo 109 + 7.
- */
-
-/**
- * @param {number[]} prevRoom
- * @return {number}
- */
-var waysToBuildRooms = function(prevRoom) {
- const n = prevRoom.length;
- const mod = 1e9 + 7;
- const graph = Array(n).fill().map(() => []);
- const factorial = Array(n + 1).fill(1n);
- const invFactorial = Array(n + 1).fill(1n);
-
- for (let i = 1; i <= n; i++) {
- factorial[i] = (factorial[i - 1] * BigInt(i)) % BigInt(mod);
- }
-
- for (let i = 1; i <= n; i++) {
- invFactorial[i] = modInverse(factorial[i], BigInt(mod));
- }
-
- for (let i = 1; i < n; i++) {
- graph[prevRoom[i]].push(i);
- }
-
- return Number(countSubtreeSizes(0)[1]);
-
- function countSubtreeSizes(node) {
- let size = 1;
- let result = 1n;
-
- for (const child of graph[node]) {
- const [childSize, childResult] = countSubtreeSizes(child);
- size += childSize;
- result = (result * childResult * invFactorial[childSize]) % BigInt(mod);
- }
-
- return [size, (result * factorial[size - 1]) % BigInt(mod)];
- }
-
- function modInverse(a, m) {
- const m0 = m;
- let q;
- let x0 = 0n;
- let x1 = 1n;
-
- while (a > 1n) {
- q = a / m;
- [a, m] = [m, a % m];
- [x0, x1] = [x1 - q * x0, x0];
- }
- return x1 < 0n ? x1 + m0 : x1;
- }
-};
diff --git a/solutions/1921-eliminate-maximum-number-of-monsters.js b/solutions/1921-eliminate-maximum-number-of-monsters.js
deleted file mode 100644
index e9f43cd1..00000000
--- a/solutions/1921-eliminate-maximum-number-of-monsters.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 1921. Eliminate Maximum Number of Monsters
- * https://leetcode.com/problems/eliminate-maximum-number-of-monsters/
- * Difficulty: Medium
- *
- * You are playing a video game where you are defending your city from a group of n monsters. You
- * are given a 0-indexed integer array dist of size n, where dist[i] is the initial distance in
- * kilometers of the ith monster from the city.
- *
- * The monsters walk toward the city at a constant speed. The speed of each monster is given to
- * you in an integer array speed of size n, where speed[i] is the speed of the ith monster in
- * kilometers per minute.
- *
- * You have a weapon that, once fully charged, can eliminate a single monster. However, the weapon
- * takes one minute to charge. The weapon is fully charged at the very start.
- *
- * You lose when any monster reaches your city. If a monster reaches the city at the exact moment
- * the weapon is fully charged, it counts as a loss, and the game ends before you can use your
- * weapon.
- *
- * Return the maximum number of monsters that you can eliminate before you lose, or n if you can
- * eliminate all the monsters before they reach the city.
- */
-
-/**
- * @param {number[]} dist
- * @param {number[]} speed
- * @return {number}
- */
-var eliminateMaximum = function(dist, speed) {
- const n = dist.length;
- const arrivalTimes = new Array(n);
-
- for (let i = 0; i < n; i++) {
- arrivalTimes[i] = dist[i] / speed[i];
- }
-
- arrivalTimes.sort((a, b) => a - b);
-
- for (let i = 0; i < n; i++) {
- if (arrivalTimes[i] <= i) {
- return i;
- }
- }
-
- return n;
-};
diff --git a/solutions/1922-count-good-numbers.js b/solutions/1922-count-good-numbers.js
deleted file mode 100644
index b9c8d29d..00000000
--- a/solutions/1922-count-good-numbers.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 1922. Count Good Numbers
- * https://leetcode.com/problems/count-good-numbers/
- * Difficulty: Medium
- *
- * A digit string is good if the digits (0-indexed) at even indices are even and the digits
- * at odd indices are prime (2, 3, 5, or 7).
- *
- * For example, "2582" is good because the digits (2 and 8) at even positions are even and
- * the digits (5 and 2) at odd positions are prime. However, "3245" is not good because 3
- * is at an even index but is not even.
- *
- * Given an integer n, return the total number of good digit strings of length n. Since the
- * answer may be large, return it modulo 109 + 7.
- *
- * A digit string is a string consisting of digits 0 through 9 that may contain leading zeros.
- */
-
-/**
- * @param {number} n
- * @return {number}
- */
-var countGoodNumbers = function(n) {
- const MOD = 1e9 + 7;
- const evenCount = 5;
- const primeCount = 4;
- const evenPositions = Math.ceil(n / 2);
- const oddPositions = Math.floor(n / 2);
- const evenResult = power(evenCount, evenPositions);
- const oddResult = power(primeCount, oddPositions);
-
- return Number(BigInt(evenResult) * BigInt(oddResult) % BigInt(MOD));
-
- function power(base, exponent) {
- if (exponent === 0) return 1;
- let half = power(base, Math.floor(exponent / 2));
- half = BigInt(half) * BigInt(half) % BigInt(MOD);
- if (exponent % 2) half = half * BigInt(base) % BigInt(MOD);
- return Number(half);
- }
-};
diff --git a/solutions/1923-longest-common-subpath.js b/solutions/1923-longest-common-subpath.js
deleted file mode 100644
index 1c2e1b0d..00000000
--- a/solutions/1923-longest-common-subpath.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * 1923. Longest Common Subpath
- * https://leetcode.com/problems/longest-common-subpath/
- * Difficulty: Hard
- *
- * There is a country of n cities numbered from 0 to n - 1. In this country, there is a road
- * connecting every pair of cities.
- *
- * There are m friends numbered from 0 to m - 1 who are traveling through the country. Each one
- * of them will take a path consisting of some cities. Each path is represented by an integer
- * array that contains the visited cities in order. The path may contain a city more than once,
- * but the same city will not be listed consecutively.
- *
- * Given an integer n and a 2D integer array paths where paths[i] is an integer array representing
- * the path of the ith friend, return the length of the longest common subpath that is shared
- * by every friend's path, or 0 if there is no common subpath at all.
- *
- * A subpath of a path is a contiguous sequence of cities within that path.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} paths
- * @return {number}
- */
-var longestCommonSubpath = function(n, paths) {
- if (paths.length === 0) return 0;
-
- paths.sort((a, b) => a.length - b.length);
-
- let left = 0;
- let right = paths[0].length;
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
-
- if (checkCommonSubpathExists(paths, mid)) {
- left = mid + 1;
- } else {
- right = mid - 1;
- }
- }
-
- return right;
-};
-
-function checkCommonSubpathExists(paths, length) {
- if (length === 0) return true;
-
- const firstPath = paths[0];
-
- if (firstPath.length < length) return false;
-
- const prime = 1000000007;
- const base = 100003;
-
- let highestPower = 1;
- for (let i = 0; i < length - 1; i++) {
- highestPower = (highestPower * base) % prime;
- }
-
- let hashToPositions = new Map();
-
- let hash = 0;
- for (let i = 0; i < length; i++) {
- hash = (hash * base + firstPath[i]) % prime;
- }
-
- if (!hashToPositions.has(hash)) {
- hashToPositions.set(hash, []);
- }
- hashToPositions.get(hash).push(0);
-
- for (let i = 1; i <= firstPath.length - length; i++) {
- hash = ((hash - firstPath[i - 1] * highestPower % prime + prime)
- % prime * base + firstPath[i + length - 1]) % prime;
-
- if (!hashToPositions.has(hash)) {
- hashToPositions.set(hash, []);
- }
- hashToPositions.get(hash).push(i);
- }
-
- for (let pathIdx = 1; pathIdx < paths.length; pathIdx++) {
- const path = paths[pathIdx];
-
- if (path.length < length) return false;
-
- const newHashToPositions = new Map();
- hash = 0;
- for (let i = 0; i < length; i++) {
- hash = (hash * base + path[i]) % prime;
- }
-
- if (hashToPositions.has(hash)) {
- const positions = hashToPositions.get(hash);
- for (const pos of positions) {
- let isMatch = true;
- for (let j = 0; j < length; j++) {
- if (firstPath[pos + j] !== path[j]) {
- isMatch = false;
- break;
- }
- }
-
- if (isMatch) {
- if (!newHashToPositions.has(hash)) {
- newHashToPositions.set(hash, []);
- }
- newHashToPositions.get(hash).push(pos);
- break;
- }
- }
- }
-
- for (let i = 1; i <= path.length - length; i++) {
- hash = ((hash - path[i - 1] * highestPower % prime + prime)
- % prime * base + path[i + length - 1]) % prime;
-
- if (hashToPositions.has(hash)) {
- const positions = hashToPositions.get(hash);
- for (const pos of positions) {
- let isMatch = true;
- for (let j = 0; j < length; j++) {
- if (firstPath[pos + j] !== path[i + j]) {
- isMatch = false;
- break;
- }
- }
-
- if (isMatch) {
- if (!newHashToPositions.has(hash)) {
- newHashToPositions.set(hash, []);
- }
- newHashToPositions.get(hash).push(pos);
- break;
- }
- }
- }
- }
-
- if (newHashToPositions.size === 0) return false;
-
- hashToPositions = newHashToPositions;
- }
-
- return hashToPositions.size > 0;
-}
diff --git a/solutions/1925-count-square-sum-triples.js b/solutions/1925-count-square-sum-triples.js
deleted file mode 100644
index b917c4e1..00000000
--- a/solutions/1925-count-square-sum-triples.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 1925. Count Square Sum Triples
- * https://leetcode.com/problems/count-square-sum-triples/
- * Difficulty: Easy
- *
- * A square triple (a,b,c) is a triple where a, b, and c are integers and a2 + b2 = c2.
- *
- * Given an integer n, return the number of square triples such that 1 <= a, b, c <= n.
- */
-
-/**
- * @param {number} n
- * @return {number}
- */
-var countTriples = function(n) {
- let result = 0;
-
- for (let a = 1; a <= n; a++) {
- for (let b = 1; b <= n; b++) {
- const sum = a * a + b * b;
- const c = Math.sqrt(sum);
- if (c <= n && Number.isInteger(c)) {
- result++;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/1927-sum-game.js b/solutions/1927-sum-game.js
deleted file mode 100644
index 178435f2..00000000
--- a/solutions/1927-sum-game.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 1927. Sum Game
- * https://leetcode.com/problems/sum-game/
- * Difficulty: Medium
- *
- * Alice and Bob take turns playing a game, with Alice starting first.
- *
- * You are given a string num of even length consisting of digits and '?' characters. On each
- * turn, a player will do the following if there is still at least one '?' in num:
- * 1. Choose an index i where num[i] == '?'.
- * 2. Replace num[i] with any digit between '0' and '9'.
- *
- * The game ends when there are no more '?' characters in num.
- *
- * For Bob to win, the sum of the digits in the first half of num must be equal to the sum of
- * the digits in the second half. For Alice to win, the sums must not be equal.
- * - For example, if the game ended with num = "243801", then Bob wins because 2+4+3 = 8+0+1.
- * If the game ended with num = "243803", then Alice wins because 2+4+3 != 8+0+3.
- *
- * Assuming Alice and Bob play optimally, return true if Alice will win and false if Bob will win.
- */
-
-/**
- * @param {string} num
- * @return {boolean}
- */
-var sumGame = function(num) {
- const n = num.length;
- const half = n / 2;
-
- let leftSum = 0;
- let rightSum = 0;
- let leftQuestionMarks = 0;
- let rightQuestionMarks = 0;
-
- for (let i = 0; i < n; i++) {
- if (i < half) {
- if (num[i] === '?') {
- leftQuestionMarks++;
- } else {
- leftSum += parseInt(num[i]);
- }
- } else {
- if (num[i] === '?') {
- rightQuestionMarks++;
- } else {
- rightSum += parseInt(num[i]);
- }
- }
- }
-
- const sumDiff = leftSum - rightSum;
- const diff = leftQuestionMarks - rightQuestionMarks;
-
- return (diff % 2 !== 0) || (sumDiff + diff * 4.5 !== 0);
-};
diff --git a/solutions/1928-minimum-cost-to-reach-destination-in-time.js b/solutions/1928-minimum-cost-to-reach-destination-in-time.js
deleted file mode 100644
index a601d545..00000000
--- a/solutions/1928-minimum-cost-to-reach-destination-in-time.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 1928. Minimum Cost to Reach Destination in Time
- * https://leetcode.com/problems/minimum-cost-to-reach-destination-in-time/
- * Difficulty: Hard
- *
- * There is a country of n cities numbered from 0 to n - 1 where all the cities are connected by
- * bi-directional roads. The roads are represented as a 2D integer array edges where
- * edges[i] = [xi, yi, timei] denotes a road between cities xi and yi that takes timei minutes
- * to travel. There may be multiple roads of differing travel times connecting the same two
- * cities, but no road connects a city to itself.
- *
- * Each time you pass through a city, you must pay a passing fee. This is represented as a
- * 0-indexed integer array passingFees of length n where passingFees[j] is the amount of dollars
- * you must pay when you pass through city j.
- *
- * In the beginning, you are at city 0 and want to reach city n - 1 in maxTime minutes or less.
- * The cost of your journey is the summation of passing fees for each city that you passed
- * through at some moment of your journey (including the source and destination cities).
- *
- * Given maxTime, edges, and passingFees, return the minimum cost to complete your journey,
- * or -1 if you cannot complete it within maxTime minutes.
- */
-
-/**
- * @param {number} maxTime
- * @param {number[][]} edges
- * @param {number[]} passingFees
- * @return {number}
- */
-var minCost = function(maxTime, edges, passingFees) {
- const n = passingFees.length;
- const dp = new Array(n).fill().map(() => new Array(maxTime + 1).fill(Infinity));
- dp[0][0] = passingFees[0];
-
- const graph = new Array(n).fill().map(() => []);
- for (const [u, v, time] of edges) {
- graph[u].push([v, time]);
- graph[v].push([u, time]);
- }
-
- const pq = new PriorityQueue((a, b) => a.cost - b.cost);
- pq.enqueue({ cost: passingFees[0], city: 0, time: 0 });
-
- while (!pq.isEmpty()) {
- const { cost, city, time } = pq.dequeue();
- if (cost > dp[city][time]) continue;
-
- for (const [nextCity, travelTime] of graph[city]) {
- const newTime = time + travelTime;
- if (newTime > maxTime) continue;
-
- const newCost = cost + passingFees[nextCity];
- if (newCost < dp[nextCity][newTime]) {
- dp[nextCity][newTime] = newCost;
- pq.enqueue({ cost: newCost, city: nextCity, time: newTime });
- }
- }
- }
-
- let minCost = Infinity;
- for (let t = 0; t <= maxTime; t++) {
- minCost = Math.min(minCost, dp[n - 1][t]);
- }
-
- return minCost === Infinity ? -1 : minCost;
-};
diff --git a/solutions/1931-painting-a-grid-with-three-different-colors.js b/solutions/1931-painting-a-grid-with-three-different-colors.js
deleted file mode 100644
index ef8bf15b..00000000
--- a/solutions/1931-painting-a-grid-with-three-different-colors.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 1931. Painting a Grid With Three Different Colors
- * https://leetcode.com/problems/painting-a-grid-with-three-different-colors/
- * Difficulty: Hard
- *
- * You are given two integers m and n. Consider an m x n grid where each cell is initially white.
- * You can paint each cell red, green, or blue. All cells must be painted.
- *
- * Return the number of ways to color the grid with no two adjacent cells having the same color.
- * Since the answer can be very large, return it modulo 109 + 7.
- */
-
-/**
- * @param {number} m
- * @param {number} n
- * @return {number}
- */
-var colorTheGrid = function(m, n) {
- const MOD = 1e9 + 7;
- const colors = 3;
- const validStates = generateValidStates(m, colors);
- const stateCount = validStates.length;
- let dp = new Array(stateCount).fill(1);
-
- for (let col = 1; col < n; col++) {
- const nextDp = new Array(stateCount).fill(0);
- for (let i = 0; i < stateCount; i++) {
- for (let j = 0; j < stateCount; j++) {
- if (isCompatible(validStates[i], validStates[j])) {
- nextDp[j] = (nextDp[j] + dp[i]) % MOD;
- }
- }
- }
- dp = nextDp;
- }
-
- let totalWays = 0;
- for (const count of dp) {
- totalWays = (totalWays + count) % MOD;
- }
-
- return totalWays;
-
- function generateValidStates(rows, colors) {
- const states = [];
- generateStates([], rows, colors, states);
- return states;
- }
-
- function generateStates(current, rows, colors, states) {
- if (current.length === rows) {
- states.push([...current]);
- return;
- }
- for (let c = 0; c < colors; c++) {
- if (current.length === 0 || current[current.length - 1] !== c) {
- current.push(c);
- generateStates(current, rows, colors, states);
- current.pop();
- }
- }
- }
-
- function isCompatible(prevState, currState) {
- for (let i = 0; i < prevState.length; i++) {
- if (prevState[i] === currState[i]) {
- return false;
- }
- }
- return true;
- }
-};
diff --git a/solutions/1932-merge-bsts-to-create-single-bst.js b/solutions/1932-merge-bsts-to-create-single-bst.js
deleted file mode 100644
index a118a41a..00000000
--- a/solutions/1932-merge-bsts-to-create-single-bst.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 1932. Merge BSTs to Create Single BST
- * https://leetcode.com/problems/merge-bsts-to-create-single-bst/
- * Difficulty: Hard
- *
- * You are given n BST (binary search tree) root nodes for n separate BSTs stored in an array
- * trees (0-indexed). Each BST in trees has at most 3 nodes, and no two roots have the same
- * value. In one operation, you can:
- * - Select two distinct indices i and j such that the value stored at one of the leaves of
- * trees[i] is equal to the root value of trees[j].
- * - Replace the leaf node in trees[i] with trees[j].
- * - Remove trees[j] from trees.
- *
- * Return the root of the resulting BST if it is possible to form a valid BST after
- * performing n - 1 operations, or null if it is impossible to create a valid BST.
- *
- * A BST (binary search tree) is a binary tree where each node satisfies the following property:
- * - Every node in the node's left subtree has a value strictly less than the node's value.
- * - Every node in the node's right subtree has a value strictly greater than the node's value.
- *
- * A leaf is a node that has no children.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode[]} trees
- * @return {TreeNode}
- */
-var canMerge = function(trees) {
- const valueToTree = new Map();
- const leafValues = new Set();
- const inDegree = new Map();
-
- for (const tree of trees) {
- valueToTree.set(tree.val, tree);
- if (tree.left) leafValues.add(tree.left.val);
- if (tree.right) leafValues.add(tree.right.val);
- }
-
- let root = null;
- for (const tree of trees) {
- if (!leafValues.has(tree.val)) {
- if (root) return null;
- root = tree;
- }
- if (tree.left) inDegree.set(tree.left.val, (inDegree.get(tree.left.val) || 0) + 1);
- if (tree.right) inDegree.set(tree.right.val, (inDegree.get(tree.right.val) || 0) + 1);
- }
-
- if (!root) return null;
-
- const merged = mergeTrees(root, valueToTree, inDegree);
- if (!merged || valueToTree.size > 1 || !isValidBST(merged, -Infinity, Infinity)) {
- return null;
- }
-
- return merged;
-
- function mergeTrees(node, valueToTree, inDegree) {
- if (!node) return node;
-
- if (!node.left && !node.right && valueToTree.has(node.val) && inDegree.get(node.val) === 1) {
- const tree = valueToTree.get(node.val);
- if (tree === node) return node;
- valueToTree.delete(node.val);
- return mergeTrees(tree, valueToTree, inDegree);
- }
-
- node.left = mergeTrees(node.left, valueToTree, inDegree);
- node.right = mergeTrees(node.right, valueToTree, inDegree);
- return node;
- }
-
- function isValidBST(node, min, max) {
- if (!node) return true;
- if (node.val <= min || node.val >= max) return false;
- return isValidBST(node.left, min, node.val) && isValidBST(node.right, node.val, max);
- }
-};
diff --git a/solutions/1936-add-minimum-number-of-rungs.js b/solutions/1936-add-minimum-number-of-rungs.js
deleted file mode 100644
index 2dba6511..00000000
--- a/solutions/1936-add-minimum-number-of-rungs.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 1936. Add Minimum Number of Rungs
- * https://leetcode.com/problems/add-minimum-number-of-rungs/
- * Difficulty: Medium
- *
- * You are given a strictly increasing integer array rungs that represents the height of rungs
- * on a ladder. You are currently on the floor at height 0, and you want to reach the last rung.
- *
- * You are also given an integer dist. You can only climb to the next highest rung if the
- * distance between where you are currently at (the floor or on a rung) and the next rung is
- * at most dist. You are able to insert rungs at any positive integer height if a rung is not
- * already there.
- *
- * Return the minimum number of rungs that must be added to the ladder in order for you to climb
- * to the last rung.
- */
-
-/**
- * @param {number[]} rungs
- * @param {number} dist
- * @return {number}
- */
-var addRungs = function(rungs, dist) {
- let currentHeight = 0;
- let result = 0;
-
- for (const rung of rungs) {
- const gap = rung - currentHeight;
- if (gap > dist) {
- result += Math.ceil(gap / dist) - 1;
- }
- currentHeight = rung;
- }
-
- return result;
-};
diff --git a/solutions/1937-maximum-number-of-points-with-cost.js b/solutions/1937-maximum-number-of-points-with-cost.js
deleted file mode 100644
index 288c1888..00000000
--- a/solutions/1937-maximum-number-of-points-with-cost.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 1937. Maximum Number of Points with Cost
- * https://leetcode.com/problems/maximum-number-of-points-with-cost/
- * Difficulty: Medium
- *
- * You are given an m x n integer matrix points (0-indexed). Starting with 0 points, you want
- * to maximize the number of points you can get from the matrix.
- *
- * To gain points, you must pick one cell in each row. Picking the cell at coordinates (r, c)
- * will add points[r][c] to your score.
- *
- * However, you will lose points if you pick a cell too far from the cell that you picked in
- * the previous row. For every two adjacent rows r and r + 1 (where 0 <= r < m - 1), picking
- * cells at coordinates (r, c1) and (r + 1, c2) will subtract abs(c1 - c2) from your score.
- *
- * Return the maximum number of points you can achieve.
- *
- * abs(x) is defined as:
- * - x for x >= 0.
- * - -x for x < 0.
- */
-
-/**
- * @param {number[][]} points
- * @return {number}
- */
-var maxPoints = function(points) {
- const rows = points.length;
- const cols = points[0].length;
- let prevRow = points[0].slice();
-
- for (let r = 1; r < rows; r++) {
- const currRow = new Array(cols).fill(0);
- const leftMax = new Array(cols).fill(0);
- const rightMax = new Array(cols).fill(0);
-
- leftMax[0] = prevRow[0];
- for (let c = 1; c < cols; c++) {
- leftMax[c] = Math.max(leftMax[c - 1] - 1, prevRow[c]);
- }
-
- rightMax[cols - 1] = prevRow[cols - 1];
- for (let c = cols - 2; c >= 0; c--) {
- rightMax[c] = Math.max(rightMax[c + 1] - 1, prevRow[c]);
- }
-
- for (let c = 0; c < cols; c++) {
- currRow[c] = points[r][c] + Math.max(leftMax[c], rightMax[c]);
- }
-
- prevRow = currRow;
- }
-
- return Math.max(...prevRow);
-};
diff --git a/solutions/1938-maximum-genetic-difference-query.js b/solutions/1938-maximum-genetic-difference-query.js
deleted file mode 100644
index e7b88f18..00000000
--- a/solutions/1938-maximum-genetic-difference-query.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * 1938. Maximum Genetic Difference Query
- * https://leetcode.com/problems/maximum-genetic-difference-query/
- * Difficulty: Hard
- *
- * There is a rooted tree consisting of n nodes numbered 0 to n - 1. Each node's number denotes
- * its unique genetic value (i.e. the genetic value of node x is x). The genetic difference
- * between two genetic values is defined as the bitwise-XOR of their values. You are given
- * the integer array parents, where parents[i] is the parent for node i. If node x is the root
- * of the tree, then parents[x] == -1.
- *
- * You are also given the array queries where queries[i] = [nodei, vali]. For each query i,
- * find the maximum genetic difference between vali and pi, where pi is the genetic value of
- * any node that is on the path between nodei and the root (including nodei and the root).
- * More formally, you want to maximize vali XOR pi.
- *
- * Return an array ans where ans[i] is the answer to the ith query.
- */
-
-/**
- * @param {number[]} parents
- * @param {number[][]} queries
- * @return {number[]}
- */
-var maxGeneticDifference = function(parents, queries) {
- const n = parents.length;
- const graph = Array(n).fill().map(() => []);
- let root = -1;
-
- for (let i = 0; i < n; i++) {
- if (parents[i] === -1) {
- root = i;
- } else {
- graph[parents[i]].push(i);
- }
- }
-
- const trie = { count: 0, children: {} };
- const queryMap = Array(n).fill().map(() => []);
- const result = new Array(queries.length).fill(0);
-
- for (let i = 0; i < queries.length; i++) {
- queryMap[queries[i][0]].push([queries[i][1], i]);
- }
-
- dfs(root);
- return result;
-
- function insertTrie(val) {
- let node = trie;
- for (let bit = 17; bit >= 0; bit--) {
- const b = (val >> bit) & 1;
- if (!node.children[b]) {
- node.children[b] = { count: 0, children: {} };
- }
- node = node.children[b];
- node.count++;
- }
- }
-
- function removeTrie(val) {
- let node = trie;
- for (let bit = 17; bit >= 0; bit--) {
- const b = (val >> bit) & 1;
- node = node.children[b];
- node.count--;
- }
- }
-
- function queryTrie(val) {
- let node = trie;
- let maxXor = 0;
- for (let bit = 17; bit >= 0; bit--) {
- const b = (val >> bit) & 1;
- if (node.children[1 - b]?.count > 0) {
- maxXor |= (1 << bit);
- node = node.children[1 - b];
- } else if (node.children[b]?.count > 0) {
- node = node.children[b];
- } else {
- return maxXor;
- }
- }
- return maxXor;
- }
-
- function dfs(node) {
- insertTrie(node);
- for (const [val, idx] of queryMap[node]) {
- result[idx] = queryTrie(val);
- }
- for (const child of graph[node]) {
- dfs(child);
- }
- removeTrie(node);
- }
-};
diff --git a/solutions/1941-check-if-all-characters-have-equal-number-of-occurrences.js b/solutions/1941-check-if-all-characters-have-equal-number-of-occurrences.js
deleted file mode 100644
index aa742eb2..00000000
--- a/solutions/1941-check-if-all-characters-have-equal-number-of-occurrences.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 1941. Check if All Characters Have Equal Number of Occurrences
- * https://leetcode.com/problems/check-if-all-characters-have-equal-number-of-occurrences/
- * Difficulty: Easy
- *
- * Given a string s, return true if s is a good string, or false otherwise.
- *
- * A string s is good if all the characters that appear in s have the same number of occurrences
- * (i.e., the same frequency).
- */
-
-/**
- * @param {string} s
- * @return {boolean}
- */
-var areOccurrencesEqual = function(s) {
- const map = new Map();
- for (const char of s) {
- map.set(char, (map.get(char) || 0) + 1);
- }
-
- const frequencies = new Set(map.values());
- return frequencies.size === 1;
-};
diff --git a/solutions/1943-describe-the-painting.js b/solutions/1943-describe-the-painting.js
deleted file mode 100644
index 3e5c287a..00000000
--- a/solutions/1943-describe-the-painting.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 1943. Describe the Painting
- * https://leetcode.com/problems/describe-the-painting/
- * Difficulty: Medium
- *
- * There is a long and thin painting that can be represented by a number line. The painting was
- * painted with multiple overlapping segments where each segment was painted with a unique color.
- * You are given a 2D integer array segments, where segments[i] = [starti, endi, colori]
- * represents the half-closed segment [starti, endi) with colori as the color.
- *
- * The colors in the overlapping segments of the painting were mixed when it was painted. When
- * two or more colors mix, they form a new color that can be represented as a set of mixed colors.
- * - For example, if colors 2, 4, and 6 are mixed, then the resulting mixed color is {2,4,6}.
- *
- * For the sake of simplicity, you should only output the sum of the elements in the set rather
- * than the full set.
- *
- * You want to describe the painting with the minimum number of non-overlapping half-closed
- * segments of these mixed colors. These segments can be represented by the 2D array painting
- * where painting[j] = [leftj, rightj, mixj] describes a half-closed segment [leftj, rightj)
- * with the mixed color sum of mixj.
- * - For example, the painting created with segments = [[1,4,5],[1,7,7]] can be described by
- * painting = [[1,4,12],[4,7,7]] because:
- * - [1,4) is colored {5,7} (with a sum of 12) from both the first and second segments.
- * - [4,7) is colored {7} from only the second segment.
- *
- * Return the 2D array painting describing the finished painting (excluding any parts that are
- * not painted). You may return the segments in any order.
- *
- * A half-closed segment [a, b) is the section of the number line between points a and b including
- * point a and not including point b.
- */
-
-/**
- * @param {number[][]} segments
- * @return {number[][]}
- */
-var splitPainting = function(segments) {
- const events = [];
- for (const [start, end, color] of segments) {
- events.push([start, color]);
- events.push([end, -color]);
- }
-
- events.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
-
- const result = [];
- let currentSum = 0;
- let prevPoint = events[0][0];
-
- for (const [point, color] of events) {
- if (currentSum > 0 && point > prevPoint) {
- result.push([prevPoint, point, currentSum]);
- }
- currentSum += color;
- prevPoint = point;
- }
-
- return result;
-};
diff --git a/solutions/1944-number-of-visible-people-in-a-queue.js b/solutions/1944-number-of-visible-people-in-a-queue.js
deleted file mode 100644
index 8297710b..00000000
--- a/solutions/1944-number-of-visible-people-in-a-queue.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 1944. Number of Visible People in a Queue
- * https://leetcode.com/problems/number-of-visible-people-in-a-queue/
- * Difficulty: Hard
- *
- * There are n people standing in a queue, and they numbered from 0 to n - 1 in left to right
- * order. You are given an array heights of distinct integers where heights[i] represents the
- * height of the ith person.
- *
- * A person can see another person to their right in the queue if everybody in between is
- * shorter than both of them. More formally, the ith person can see the jth person
- * if i < j and min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1]).
- *
- * Return an array answer of length n where answer[i] is the number of people the ith person
- * can see to their right in the queue.
- */
-
-/**
- * @param {number[]} heights
- * @return {number[]}
- */
-var canSeePersonsCount = function(heights) {
- const n = heights.length;
- const result = new Array(n).fill(0);
- const stack = [];
-
- for (let i = n - 1; i >= 0; i--) {
- while (stack.length && heights[i] > stack[stack.length - 1]) {
- stack.pop();
- result[i]++;
- }
- if (stack.length) {
- result[i]++;
- }
- stack.push(heights[i]);
- }
-
- return result;
-};
diff --git a/solutions/1945-sum-of-digits-of-string-after-convert.js b/solutions/1945-sum-of-digits-of-string-after-convert.js
deleted file mode 100644
index 7e6e47d1..00000000
--- a/solutions/1945-sum-of-digits-of-string-after-convert.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 1945. Sum of Digits of String After Convert
- * https://leetcode.com/problems/sum-of-digits-of-string-after-convert/
- * Difficulty: Easy
- *
- * You are given a string s consisting of lowercase English letters, and an integer k. Your task
- * is to convert the string into an integer by a special process, and then transform it by
- * summing its digits repeatedly k times. More specifically, perform the following steps:
- * 1. Convert s into an integer by replacing each letter with its position in the alphabet (i.e.
- * replace 'a' with 1, 'b' with 2, ..., 'z' with 26).
- * 2. Transform the integer by replacing it with the sum of its digits.
- * 3. Repeat the transform operation (step 2) k times in total.
- *
- * For example, if s = "zbax" and k = 2, then the resulting integer would be 8 by the following
- * operations:
- * 1. Convert: "zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124
- * 2. Transform #1: 262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17
- * 3. Transform #2: 17 ➝ 1 + 7 ➝ 8
- *
- * Return the resulting integer after performing the operations described above.
- */
-
-/**
- * @param {string} s
- * @param {number} k
- * @return {number}
- */
-var getLucky = function(s, k) {
- let number = '';
- for (const char of s) {
- number += (char.charCodeAt(0) - 96).toString();
- }
-
- let result = 0;
- for (let i = 0; i < k; i++) {
- result = 0;
- for (const digit of number) {
- result += parseInt(digit);
- }
- number = result.toString();
- }
-
- return result;
-};
diff --git a/solutions/1946-largest-number-after-mutating-substring.js b/solutions/1946-largest-number-after-mutating-substring.js
deleted file mode 100644
index f64e4db0..00000000
--- a/solutions/1946-largest-number-after-mutating-substring.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 1946. Largest Number After Mutating Substring
- * https://leetcode.com/problems/largest-number-after-mutating-substring/
- * Difficulty: Medium
- *
- * You are given a string num, which represents a large integer. You are also given a 0-indexed
- * integer array change of length 10 that maps each digit 0-9 to another digit. More formally,
- * digit d maps to digit change[d].
- *
- * You may choose to mutate a single substring of num. To mutate a substring, replace each digit
- * num[i] with the digit it maps to in change (i.e. replace num[i] with change[num[i]]).
- *
- * Return a string representing the largest possible integer after mutating (or choosing not to)
- * a single substring of num.
- *
- * A substring is a contiguous sequence of characters within the string.
- */
-
-/**
- * @param {string} num
- * @param {number[]} change
- * @return {string}
- */
-var maximumNumber = function(num, change) {
- const digits = num.split('');
- let mutated = false;
-
- for (let i = 0; i < digits.length; i++) {
- const currentDigit = parseInt(digits[i]);
- const mappedDigit = change[currentDigit];
-
- if (mappedDigit > currentDigit) {
- digits[i] = mappedDigit.toString();
- mutated = true;
- } else if (mappedDigit < currentDigit && mutated) {
- break;
- }
- }
-
- return digits.join('');
-};
diff --git a/solutions/1947-maximum-compatibility-score-sum.js b/solutions/1947-maximum-compatibility-score-sum.js
deleted file mode 100644
index 985d1deb..00000000
--- a/solutions/1947-maximum-compatibility-score-sum.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 1947. Maximum Compatibility Score Sum
- * https://leetcode.com/problems/maximum-compatibility-score-sum/
- * Difficulty: Medium
- *
- * There is a survey that consists of n questions where each question's answer is either 0
- * (no) or 1 (yes).
- *
- * The survey was given to m students numbered from 0 to m - 1 and m mentors numbered from
- * 0 to m - 1. The answers of the students are represented by a 2D integer array students
- * where students[i] is an integer array that contains the answers of the ith student
- * (0-indexed). The answers of the mentors are represented by a 2D integer array mentors
- * where mentors[j] is an integer array that contains the answers of the jth mentor (0-indexed).
- *
- * Each student will be assigned to one mentor, and each mentor will have one student assigned
- * to them. The compatibility score of a student-mentor pair is the number of answers that
- * are the same for both the student and the mentor.
- * - For example, if the student's answers were [1, 0, 1] and the mentor's answers were
- * [0, 0, 1], then their compatibility score is 2 because only the second and the third
- * answers are the same.
- *
- * You are tasked with finding the optimal student-mentor pairings to maximize the sum of the
- * compatibility scores.
- *
- * Given students and mentors, return the maximum compatibility score sum that can be achieved.
- */
-
-/**
- * @param {number[][]} students
- * @param {number[][]} mentors
- * @return {number}
- */
-var maxCompatibilitySum = function(students, mentors) {
- const m = students.length;
- let maxScore = 0;
-
- backtrack(0, new Array(m).fill(false), 0);
- return maxScore;
-
- function calculateScore(student, mentor) {
- let score = 0;
- for (let i = 0; i < student.length; i++) {
- if (student[i] === mentor[i]) score++;
- }
- return score;
- }
-
- function backtrack(studentIndex, usedMentors, currentScore) {
- if (studentIndex === m) {
- maxScore = Math.max(maxScore, currentScore);
- return;
- }
-
- for (let mentorIndex = 0; mentorIndex < m; mentorIndex++) {
- if (!usedMentors[mentorIndex]) {
- usedMentors[mentorIndex] = true;
- backtrack(studentIndex + 1, usedMentors,
- currentScore + calculateScore(students[studentIndex], mentors[mentorIndex]));
- usedMentors[mentorIndex] = false;
- }
- }
- }
-};
diff --git a/solutions/1948-delete-duplicate-folders-in-system.js b/solutions/1948-delete-duplicate-folders-in-system.js
deleted file mode 100644
index 085f6d72..00000000
--- a/solutions/1948-delete-duplicate-folders-in-system.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * 1948. Delete Duplicate Folders in System
- * https://leetcode.com/problems/delete-duplicate-folders-in-system/
- * Difficulty: Hard
- *
- * Due to a bug, there are many duplicate folders in a file system. You are given a 2D array
- * paths, where paths[i] is an array representing an absolute path to the ith folder in the
- * file system.
- * - For example, ["one", "two", "three"] represents the path "/one/two/three".
- *
- * Two folders (not necessarily on the same level) are identical if they contain the same
- * non-empty set of identical subfolders and underlying subfolder structure. The folders do
- * not need to be at the root level to be identical. If two or more folders are identical,
- * then mark the folders as well as all their subfolders.
- * - For example, folders "/a" and "/b" in the file structure below are identical. They (as
- * well as their subfolders) should all be marked:
- * - /a
- * - /a/x
- * - /a/x/y
- * - /a/z
- * - /b
- * - /b/x
- * - /b/x/y
- * - /b/z
- * - However, if the file structure also included the path "/b/w", then the folders "/a" and "/b"
- * would not be identical. Note that "/a/x" and "/b/x" would still be considered identical
- * even with the added folder.
- *
- * Once all the identical folders and their subfolders have been marked, the file system will delete
- * all of them. The file system only runs the deletion once, so any folders that become identical
- * after the initial deletion are not deleted.
- *
- * Return the 2D array ans containing the paths of the remaining folders after deleting all the
- * marked folders. The paths may be returned in any order.
- */
-
-/**
- * @param {string[][]} paths
- * @return {string[][]}
- */
-var deleteDuplicateFolder = function(paths) {
- const root = {};
-
- for (const path of paths) {
- let node = root;
- for (const folder of path) {
- if (!node[folder]) node[folder] = {};
- node = node[folder];
- }
- }
-
- const structures = new Map();
-
- const serialize = (node, path) => {
- if (Object.keys(node).length === 0) return '';
-
- const folders = [];
- const keys = Object.keys(node);
- for (const folder of keys) {
- const serialized = serialize(node[folder], [...path, folder]);
- if (serialized !== null) {
- folders.push(`${folder}(${serialized})`);
- } else {
- delete node[folder];
- }
- }
-
- folders.sort();
- const key = folders.join('');
-
- if (key.length > 0) {
- if (!structures.has(key)) {
- structures.set(key, []);
- }
- structures.get(key).push(path);
- }
-
- return key;
- };
-
- serialize(root, []);
-
- const toDelete = new Set();
-
- for (const [structure, paths] of structures.entries()) {
- if (paths.length > 1) {
- for (const path of paths) {
- toDelete.add(path.join('/'));
- }
- }
- }
-
- const result = [];
-
- const collectPaths = (node, path) => {
- const currentPath = path.join('/');
- if (toDelete.has(currentPath)) return;
-
- if (path.length > 0) {
- result.push([...path]);
- }
-
- const keys = Object.keys(node);
- for (const folder of keys) {
- collectPaths(node[folder], [...path, folder]);
- }
- };
-
- const rootFolders = Object.keys(root);
- for (const folder of rootFolders) {
- collectPaths(root[folder], [folder]);
- }
-
- return result;
-};
diff --git a/solutions/1952-three-divisors.js b/solutions/1952-three-divisors.js
deleted file mode 100644
index c09cf96e..00000000
--- a/solutions/1952-three-divisors.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 1952. Three Divisors
- * https://leetcode.com/problems/three-divisors/
- * Difficulty: Easy
- *
- * Given an integer n, return true if n has exactly three positive divisors. Otherwise,
- * return false.
- *
- * An integer m is a divisor of n if there exists an integer k such that n = k * m.
- */
-
-/**
- * @param {number} n
- * @return {boolean}
- */
-var isThree = function(n) {
- let divisorCount = 0;
-
- for (let i = 1; i <= n; i++) {
- if (n % i === 0) {
- divisorCount++;
- if (divisorCount > 3) return false;
- }
- }
-
- return divisorCount === 3;
-};
diff --git a/solutions/1953-maximum-number-of-weeks-for-which-you-can-work.js b/solutions/1953-maximum-number-of-weeks-for-which-you-can-work.js
deleted file mode 100644
index 730198a0..00000000
--- a/solutions/1953-maximum-number-of-weeks-for-which-you-can-work.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 1953. Maximum Number of Weeks for Which You Can Work
- * https://leetcode.com/problems/maximum-number-of-weeks-for-which-you-can-work/
- * Difficulty: Medium
- *
- * There are n projects numbered from 0 to n - 1. You are given an integer array milestones where
- * each milestones[i] denotes the number of milestones the ith project has.
- *
- * You can work on the projects following these two rules:
- * - Every week, you will finish exactly one milestone of one project. You must work every week.
- * - You cannot work on two milestones from the same project for two consecutive weeks.
- * - Once all the milestones of all the projects are finished, or if the only milestones that you
- * can work on will cause you to violate the above rules, you will stop working. Note that you
- * may not be able to finish every project's milestones due to these constraints.
- *
- * Return the maximum number of weeks you would be able to work on the projects without violating
- * the rules mentioned above.
- */
-
-/**
- * @param {number[]} milestones
- * @return {number}
- */
-var numberOfWeeks = function(milestones) {
- let total = 0;
- let maxMilestones = 0;
-
- for (const count of milestones) {
- total += count;
- maxMilestones = Math.max(maxMilestones, count);
- }
-
- return Math.min(total, 2 * (total - maxMilestones) + 1);
-};
diff --git a/solutions/1954-minimum-garden-perimeter-to-collect-enough-apples.js b/solutions/1954-minimum-garden-perimeter-to-collect-enough-apples.js
deleted file mode 100644
index e064083c..00000000
--- a/solutions/1954-minimum-garden-perimeter-to-collect-enough-apples.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 1954. Minimum Garden Perimeter to Collect Enough Apples
- * https://leetcode.com/problems/minimum-garden-perimeter-to-collect-enough-apples/
- * Difficulty: Medium
- *
- * In a garden represented as an infinite 2D grid, there is an apple tree planted at every
- * integer coordinate. The apple tree planted at an integer coordinate (i, j) has |i| + |j|
- * apples growing on it.
- *
- * You will buy an axis-aligned square plot of land that is centered at (0, 0).
- *
- * Given an integer neededApples, return the minimum perimeter of a plot such that at least
- * neededApples apples are inside or on the perimeter of that plot.
- *
- * The value of |x| is defined as:
- * - x if x >= 0
- * - -x if x < 0
- */
-
-/**
- * @param {number} neededApples
- * @return {number}
- */
-var minimumPerimeter = function(neededApples) {
- let n = 0;
- let totalApples = 0;
-
- while (totalApples < neededApples) {
- n++;
- totalApples = 2 * n * (n + 1) * (2 * n + 1);
- }
-
- return 8 * n;
-};
diff --git a/solutions/1955-count-number-of-special-subsequences.js b/solutions/1955-count-number-of-special-subsequences.js
deleted file mode 100644
index 5daa07ec..00000000
--- a/solutions/1955-count-number-of-special-subsequences.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 1955. Count Number of Special Subsequences
- * https://leetcode.com/problems/count-number-of-special-subsequences/
- * Difficulty: Hard
- *
- * A sequence is special if it consists of a positive number of 0s, followed by a positive number
- * of 1s, then a positive number of 2s.
- * - For example, [0,1,2] and [0,0,1,1,1,2] are special.
- * - In contrast, [2,1,0], [1], and [0,1,2,0] are not special.
- *
- * Given an array nums (consisting of only integers 0, 1, and 2), return the number of different
- * subsequences that are special. Since the answer may be very large, return it modulo 109 + 7.
- *
- * A subsequence of an array is a sequence that can be derived from the array by deleting some
- * or no elements without changing the order of the remaining elements. Two subsequences are
- * different if the set of indices chosen are different.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var countSpecialSubsequences = function(nums) {
- const MOD = 1e9 + 7;
- const dp = [1, 0, 0, 0];
-
- for (const num of nums) {
- dp[num + 1] = (dp[num + 1] * 2 % MOD + dp[num]) % MOD;
- }
-
- return dp[3];
-};
diff --git a/solutions/1957-delete-characters-to-make-fancy-string.js b/solutions/1957-delete-characters-to-make-fancy-string.js
deleted file mode 100644
index 39c92ece..00000000
--- a/solutions/1957-delete-characters-to-make-fancy-string.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 1957. Delete Characters to Make Fancy String
- * https://leetcode.com/problems/delete-characters-to-make-fancy-string/
- * Difficulty: Easy
- *
- * A fancy string is a string where no three consecutive characters are equal.
- *
- * Given a string s, delete the minimum possible number of characters from s to make
- * it fancy.
- *
- * Return the final string after the deletion. It can be shown that the answer will
- * always be unique.
- */
-
-/**
- * @param {string} s
- * @return {string}
- */
-var makeFancyString = function(s) {
- let result = s[0];
- let count = 1;
-
- for (let i = 1; i < s.length; i++) {
- if (s[i] === s[i - 1]) {
- if (count < 2) {
- result += s[i];
- count++;
- }
- } else {
- result += s[i];
- count = 1;
- }
- }
-
- return result;
-};
diff --git a/solutions/1958-check-if-move-is-legal.js b/solutions/1958-check-if-move-is-legal.js
deleted file mode 100644
index 7fef6e2a..00000000
--- a/solutions/1958-check-if-move-is-legal.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 1958. Check if Move is Legal
- * https://leetcode.com/problems/check-if-move-is-legal/
- * Difficulty: Medium
- *
- * You are given a 0-indexed 8 x 8 grid board, where board[r][c] represents the cell (r, c) on a
- * game board. On the board, free cells are represented by '.', white cells are represented by
- * 'W', and black cells are represented by 'B'.
- *
- * Each move in this game consists of choosing a free cell and changing it to the color you are
- * playing as (either white or black). However, a move is only legal if, after changing it, the
- * cell becomes the endpoint of a good line (horizontal, vertical, or diagonal).
- *
- * A good line is a line of three or more cells (including the endpoints) where the endpoints of
- * the line are one color, and the remaining cells in the middle are the opposite color (no cells
- * in the line are free). You can find examples for good lines in the figure below.
- *
- * Given two integers rMove and cMove and a character color representing the color you are playing
- * as (white or black), return true if changing cell (rMove, cMove) to color color is a legal move,
- * or false if it is not legal.
- */
-
-/**
- * @param {character[][]} board
- * @param {number} rMove
- * @param {number} cMove
- * @param {character} color
- * @return {boolean}
- */
-var checkMove = function(board, rMove, cMove, color) {
- const opposite = color === 'B' ? 'W' : 'B';
- const directions = [
- [0, 1], [0, -1], [1, 0], [-1, 0],
- [1, 1], [1, -1], [-1, 1], [-1, -1]
- ];
-
- for (const [dr, dc] of directions) {
- let row = rMove + dr;
- let col = cMove + dc;
- let count = 1;
-
- while (row >= 0 && row < 8 && col >= 0 && col < 8 && board[row][col] === opposite) {
- row += dr;
- col += dc;
- count++;
- }
-
- if (count >= 2 && row >= 0 && row < 8 && col >= 0 && col < 8 && board[row][col] === color) {
- return true;
- }
- }
-
- return false;
-};
diff --git a/solutions/1959-minimum-total-space-wasted-with-k-resizing-operations.js b/solutions/1959-minimum-total-space-wasted-with-k-resizing-operations.js
deleted file mode 100644
index 9576849d..00000000
--- a/solutions/1959-minimum-total-space-wasted-with-k-resizing-operations.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 1959. Minimum Total Space Wasted With K Resizing Operations
- * https://leetcode.com/problems/minimum-total-space-wasted-with-k-resizing-operations/
- * Difficulty: Medium
- *
- * You are currently designing a dynamic array. You are given a 0-indexed integer array nums,
- * where nums[i] is the number of elements that will be in the array at time i. In addition,
- * you are given an integer k, the maximum number of times you can resize the array (to any size).
- *
- * The size of the array at time t, sizet, must be at least nums[t] because there needs to be
- * enough space in the array to hold all the elements. The space wasted at time t is defined
- * as sizet - nums[t], and the total space wasted is the sum of the space wasted across every
- * time t where 0 <= t < nums.length.
- *
- * Return the minimum total space wasted if you can resize the array at most k times.
- *
- * Note: The array can have any size at the start and does not count towards the number of
- * resizing operations.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var minSpaceWastedKResizing = function(nums, k) {
- const n = nums.length;
- const dp = new Array(n + 1).fill().map(() => new Array(k + 2).fill(Infinity));
- dp[0][0] = 0;
-
- for (let i = 1; i <= n; i++) {
- let maxVal = 0;
- let sum = 0;
-
- for (let j = i; j > 0; j--) {
- maxVal = Math.max(maxVal, nums[j - 1]);
- sum += nums[j - 1];
- const waste = maxVal * (i - j + 1) - sum;
-
- for (let resizes = 0; resizes <= k; resizes++) {
- if (dp[j - 1][resizes] !== Infinity) {
- dp[i][resizes + 1] = Math.min(dp[i][resizes + 1], dp[j - 1][resizes] + waste);
- }
- }
- }
- }
-
- let result = Infinity;
- for (let resizes = 1; resizes <= k + 1; resizes++) {
- result = Math.min(result, dp[n][resizes]);
- }
-
- return result;
-};
diff --git a/solutions/1960-maximum-product-of-the-length-of-two-palindromic-substrings.js b/solutions/1960-maximum-product-of-the-length-of-two-palindromic-substrings.js
deleted file mode 100644
index 10d34b76..00000000
--- a/solutions/1960-maximum-product-of-the-length-of-two-palindromic-substrings.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 1960. Maximum Product of the Length of Two Palindromic Substrings
- * https://leetcode.com/problems/maximum-product-of-the-length-of-two-palindromic-substrings/
- * Difficulty: Hard
- *
- * You are given a 0-indexed string s and are tasked with finding two non-intersecting palindromic
- * substrings of odd length such that the product of their lengths is maximized.
- *
- * More formally, you want to choose four integers i, j, k, l such that
- * 0 <= i <= j < k <= l < s.length and both the substrings s[i...j] and s[k...l] are palindromes
- * and have odd lengths. s[i...j] denotes a substring from index i to index j inclusive.
- *
- * Return the maximum possible product of the lengths of the two non-intersecting palindromic
- * substrings.
- *
- * A palindrome is a string that is the same forward and backward. A substring is a contiguous
- * sequence of characters in a string.
- */
-
-/**
-* @param {string} s
-* @return {number}
-*/
-var maxProduct = function(s) {
- const n = s.length;
- const before = new Array(n).fill(0);
- const after = new Array(n).fill(0);
-
- let center = -1;
- let right = -1;
- const dp = new Array(n).fill(0);
-
- for (let i = 0; i < n; i++) {
- const radius = i <= right ? Math.min(dp[2 * center - i], right - i) : 0;
- let left = i - radius;
- let rt = i + radius;
-
- while (left >= 0 && rt < n && s[left] === s[rt]) {
- before[rt] = Math.max(before[rt], rt - left + 1);
- after[left] = Math.max(after[left], rt - left + 1);
- left--;
- rt++;
- }
-
- dp[i] = rt - i - 1;
-
- if (rt - 1 > right) {
- center = i;
- right = rt - 1;
- }
- }
-
- for (let i = 1; i < n; i++) {
- before[i] = Math.max(before[i - 1], before[i]);
- }
-
- for (let i = n - 2; i >= 0; i--) {
- after[i] = Math.max(after[i + 1], after[i]);
- }
-
- let result = 0;
- for (let i = 1; i < n; i++) {
- result = Math.max(result, before[i - 1] * after[i]);
- }
-
- return result;
-};
diff --git a/solutions/1961-check-if-string-is-a-prefix-of-array.js b/solutions/1961-check-if-string-is-a-prefix-of-array.js
deleted file mode 100644
index 68aaf4c0..00000000
--- a/solutions/1961-check-if-string-is-a-prefix-of-array.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * 1961. Check If String Is a Prefix of Array
- * https://leetcode.com/problems/check-if-string-is-a-prefix-of-array/
- * Difficulty: Easy
- *
- * Given a string s and an array of strings words, determine whether s is a prefix string of words.
- *
- * A string s is a prefix string of words if s can be made by concatenating the first k strings in
- * words for some positive k no larger than words.length.
- *
- * Return true if s is a prefix string of words, or false otherwise.
- */
-
-/**
- * @param {string} s
- * @param {string[]} words
- * @return {boolean}
- */
-var isPrefixString = function(s, words) {
- let currentIndex = 0;
-
- for (const word of words) {
- if (currentIndex + word.length > s.length) return false;
- if (s.slice(currentIndex, currentIndex + word.length) !== word) return false;
- currentIndex += word.length;
- if (currentIndex === s.length) return true;
- }
-
- return false;
-};
diff --git a/solutions/1963-minimum-number-of-swaps-to-make-the-string-balanced.js b/solutions/1963-minimum-number-of-swaps-to-make-the-string-balanced.js
deleted file mode 100644
index 2f687a52..00000000
--- a/solutions/1963-minimum-number-of-swaps-to-make-the-string-balanced.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 1963. Minimum Number of Swaps to Make the String Balanced
- * https://leetcode.com/problems/minimum-number-of-swaps-to-make-the-string-balanced/
- * Difficulty: Medium
- *
- * You are given a 0-indexed string s of even length n. The string consists of exactly n / 2 opening
- * brackets '[' and n / 2 closing brackets ']'.
- *
- * A string is called balanced if and only if:
- * - It is the empty string, or
- * - It can be written as AB, where both A and B are balanced strings, or
- * - It can be written as [C], where C is a balanced string.
- *
- * You may swap the brackets at any two indices any number of times.
- *
- * Return the minimum number of swaps to make s balanced.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var minSwaps = function(s) {
- let imbalance = 0;
- let maxImbalance = 0;
-
- for (const bracket of s) {
- if (bracket === '[') {
- imbalance--;
- } else {
- imbalance++;
- maxImbalance = Math.max(maxImbalance, imbalance);
- }
- }
-
- return Math.ceil(maxImbalance / 2);
-};
diff --git a/solutions/1964-find-the-longest-valid-obstacle-course-at-each-position.js b/solutions/1964-find-the-longest-valid-obstacle-course-at-each-position.js
deleted file mode 100644
index cafb25a7..00000000
--- a/solutions/1964-find-the-longest-valid-obstacle-course-at-each-position.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 1964. Find the Longest Valid Obstacle Course at Each Position
- * https://leetcode.com/problems/find-the-longest-valid-obstacle-course-at-each-position/
- * Difficulty: Hard
- *
- * You want to build some obstacle courses. You are given a 0-indexed integer array obstacles of
- * length n, where obstacles[i] describes the height of the ith obstacle.
- *
- * For every index i between 0 and n - 1 (inclusive), find the length of the longest obstacle
- * course in obstacles such that:
- * - You choose any number of obstacles between 0 and i inclusive.
- * - You must include the ith obstacle in the course.
- * - You must put the chosen obstacles in the same order as they appear in obstacles.
- * - Every obstacle (except the first) is taller than or the same height as the obstacle immediately
- * before it.
- *
- * Return an array ans of length n, where ans[i] is the length of the longest obstacle course for
- * index i as described above.
- */
-
-/**
- * @param {number[]} obstacles
- * @return {number[]}
- */
-var longestObstacleCourseAtEachPosition = function(obstacles) {
- const n = obstacles.length;
- const result = new Array(n).fill(1);
- const stack = [];
-
- for (let i = 0; i < n; i++) {
- const height = obstacles[i];
- let left = 0;
- let right = stack.length;
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- if (stack[mid] <= height) {
- left = mid + 1;
- } else {
- right = mid;
- }
- }
-
- if (left < stack.length) {
- stack[left] = height;
- } else {
- stack.push(height);
- }
-
- result[i] = left + 1;
- }
-
- return result;
-};
diff --git a/solutions/1967-number-of-strings-that-appear-as-substrings-in-word.js b/solutions/1967-number-of-strings-that-appear-as-substrings-in-word.js
deleted file mode 100644
index b0cb45d5..00000000
--- a/solutions/1967-number-of-strings-that-appear-as-substrings-in-word.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 1967. Number of Strings That Appear as Substrings in Word
- * https://leetcode.com/problems/number-of-strings-that-appear-as-substrings-in-word/
- * Difficulty: Easy
- *
- * Given an array of strings patterns and a string word, return the number of strings in patterns
- * that exist as a substring in word.
- *
- * A substring is a contiguous sequence of characters within a string.
- */
-
-/**
- * @param {string[]} patterns
- * @param {string} word
- * @return {number}
- */
-var numOfStrings = function(patterns, word) {
- return patterns.reduce((count, pattern) => word.includes(pattern) ? count + 1 : count, 0);
-};
diff --git a/solutions/1968-array-with-elements-not-equal-to-average-of-neighbors.js b/solutions/1968-array-with-elements-not-equal-to-average-of-neighbors.js
deleted file mode 100644
index 67994987..00000000
--- a/solutions/1968-array-with-elements-not-equal-to-average-of-neighbors.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 1968. Array With Elements Not Equal to Average of Neighbors
- * https://leetcode.com/problems/array-with-elements-not-equal-to-average-of-neighbors/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array nums of distinct integers. You want to rearrange the elements
- * in the array such that every element in the rearranged array is not equal to the average of
- * its neighbors.
- *
- * More formally, the rearranged array should have the property such that for every i in the
- * range 1 <= i < nums.length - 1, (nums[i-1] + nums[i+1]) / 2 is not equal to nums[i].
- *
- * Return any rearrangement of nums that meets the requirements.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var rearrangeArray = function(nums) {
- const result = new Array(nums.length);
- nums.sort((a, b) => a - b);
-
- for (let i = 0, left = 0, right = nums.length - 1; i < nums.length; i++) {
- result[i] = i % 2 === 0 ? nums[left++] : nums[right--];
- }
-
- return result;
-};
diff --git a/solutions/1969-minimum-non-zero-product-of-the-array-elements.js b/solutions/1969-minimum-non-zero-product-of-the-array-elements.js
deleted file mode 100644
index 9165df8e..00000000
--- a/solutions/1969-minimum-non-zero-product-of-the-array-elements.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 1969. Minimum Non-Zero Product of the Array Elements
- * https://leetcode.com/problems/minimum-non-zero-product-of-the-array-elements/
- * Difficulty: Medium
- *
- * You are given a positive integer p. Consider an array nums (1-indexed) that consists of the
- * integers in the inclusive range [1, 2p - 1] in their binary representations. You are allowed
- * to do the following operation any number of times:
- * - Choose two elements x and y from nums.
- * - Choose a bit in x and swap it with its corresponding bit in y. Corresponding bit refers to
- * the bit that is in the same position in the other integer.
- *
- * For example, if x = 1101 and y = 0011, after swapping the 2nd bit from the right, we have
- * x = 1111 and y = 0001.
- *
- * Find the minimum non-zero product of nums after performing the above operation any number
- * of times. Return this product modulo 109 + 7.
- *
- * Note: The answer should be the minimum product before the modulo operation is done.
- */
-
-/**
- * @param {number} p
- * @return {number}
- */
-var minNonZeroProduct = function(p) {
- const MOD = 1000000007n;
- const maxVal = (1n << BigInt(p)) - 1n;
- const halfCount = (maxVal - 1n) / 2n;
- const base = maxVal - 1n;
-
- function pow(base, exp, mod) {
- let result = 1n;
- base = base % mod;
- while (exp > 0n) {
- if (exp & 1n) result = (result * base) % mod;
- base = (base * base) % mod;
- exp >>= 1n;
- }
- return result;
- }
-
- return Number((maxVal * pow(base, halfCount, MOD)) % MOD);
-};
diff --git a/solutions/1970-last-day-where-you-can-still-cross.js b/solutions/1970-last-day-where-you-can-still-cross.js
deleted file mode 100644
index 7b36cd06..00000000
--- a/solutions/1970-last-day-where-you-can-still-cross.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 1970. Last Day Where You Can Still Cross
- * https://leetcode.com/problems/last-day-where-you-can-still-cross/
- * Difficulty: Hard
- *
- * There is a 1-based binary matrix where 0 represents land and 1 represents water. You are given
- * integers row and col representing the number of rows and columns in the matrix, respectively.
- *
- * Initially on day 0, the entire matrix is land. However, each day a new cell becomes flooded
- * with water. You are given a 1-based 2D array cells, where cells[i] = [ri, ci] represents that
- * on the ith day, the cell on the rith row and cith column (1-based coordinates) will be covered
- * with water (i.e., changed to 1).
- *
- * You want to find the last day that it is possible to walk from the top to the bottom by only
- * walking on land cells. You can start from any cell in the top row and end at any cell in the
- * bottom row. You can only travel in the four cardinal directions (left, right, up, and down).
- *
- * Return the last day where it is possible to walk from the top to the bottom by only walking
- * on land cells.
- */
-
-/**
- * @param {number} row
- * @param {number} col
- * @param {number[][]} cells
- * @return {number}
- */
-var latestDayToCross = function(row, col, cells) {
- const directions = [[-1, 0], [1, 0], [0, -1], [0, 1]];
- let left = 1;
- let right = cells.length;
- let result = 0;
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
- if (canCross(mid)) {
- result = mid;
- left = mid + 1;
- } else {
- right = mid - 1;
- }
- }
-
- return result;
-
- function canCross(day) {
- const grid = new Array(row).fill().map(() => new Array(col).fill(0));
- for (let i = 0; i < day; i++) {
- const [r, c] = cells[i];
- grid[r - 1][c - 1] = 1;
- }
-
- const queue = [];
- const visited = new Array(row).fill().map(() => new Array(col).fill(false));
-
- for (let c = 0; c < col; c++) {
- if (grid[0][c] === 0) {
- queue.push([0, c]);
- visited[0][c] = true;
- }
- }
-
- while (queue.length) {
- const [r, c] = queue.shift();
- if (r === row - 1) return true;
-
- for (const [dr, dc] of directions) {
- const nr = r + dr;
- const nc = c + dc;
- if (nr >= 0 && nr < row && nc >= 0 && nc < col && !visited[nr][nc] && grid[nr][nc] === 0) {
- queue.push([nr, nc]);
- visited[nr][nc] = true;
- }
- }
- }
- return false;
- }
-};
diff --git a/solutions/1971-find-if-path-exists-in-graph.js b/solutions/1971-find-if-path-exists-in-graph.js
deleted file mode 100644
index 4b032666..00000000
--- a/solutions/1971-find-if-path-exists-in-graph.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 1971. Find if Path Exists in Graph
- * https://leetcode.com/problems/find-if-path-exists-in-graph/
- * Difficulty: Easy
- *
- * There is a bi-directional graph with n vertices, where each vertex is labeled from 0 to
- * n - 1 (inclusive). The edges in the graph are represented as a 2D integer array edges,
- * where each edges[i] = [ui, vi] denotes a bi-directional edge between vertex ui and
- * vertex vi. Every vertex pair is connected by at most one edge, and no vertex has an
- * edge to itself.
- *
- * You want to determine if there is a valid path that exists from vertex source to vertex
- * destination.
- *
- * Given edges and the integers n, source, and destination, return true if there is a valid
- * path from source to destination, or false otherwise.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @param {number} source
- * @param {number} destination
- * @return {boolean}
- */
-var validPath = function(n, edges, source, destination) {
- const graph = Array.from({ length: n }, () => []);
- for (const [u, v] of edges) {
- graph[u].push(v);
- graph[v].push(u);
- }
-
- const visited = new Set();
- const queue = [source];
-
- while (queue.length) {
- const vertex = queue.shift();
- if (vertex === destination) return true;
- if (visited.has(vertex)) continue;
- visited.add(vertex);
-
- for (const neighbor of graph[vertex]) {
- if (!visited.has(neighbor)) {
- queue.push(neighbor);
- }
- }
- }
-
- return false;
-};
diff --git a/solutions/1974-minimum-time-to-type-word-using-special-typewriter.js b/solutions/1974-minimum-time-to-type-word-using-special-typewriter.js
deleted file mode 100644
index 9c1641e7..00000000
--- a/solutions/1974-minimum-time-to-type-word-using-special-typewriter.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 1974. Minimum Time to Type Word Using Special Typewriter
- * https://leetcode.com/problems/minimum-time-to-type-word-using-special-typewriter/
- * Difficulty: Easy
- *
- * There is a special typewriter with lowercase English letters 'a' to 'z' arranged in a circle
- * with a pointer. A character can only be typed if the pointer is pointing to that character.
- * The pointer is initially pointing to the character 'a'.
- *
- * Each second, you may perform one of the following operations:
- * - Move the pointer one character counterclockwise or clockwise.
- * - Type the character the pointer is currently on.
- *
- * Given a string word, return the minimum number of seconds to type out the characters in word.
- */
-
-/**
- * @param {string} word
- * @return {number}
- */
-var minTimeToType = function(word) {
- let position = 'a';
- let result = 0;
-
- for (const char of word) {
- const clockwise = Math.abs(char.charCodeAt(0) - position.charCodeAt(0));
- const counterclockwise = 26 - clockwise;
- const moves = Math.min(clockwise, counterclockwise);
- result += moves + 1;
- position = char;
- }
-
- return result;
-};
diff --git a/solutions/1975-maximum-matrix-sum.js b/solutions/1975-maximum-matrix-sum.js
deleted file mode 100644
index 92b65dd2..00000000
--- a/solutions/1975-maximum-matrix-sum.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 1975. Maximum Matrix Sum
- * https://leetcode.com/problems/maximum-matrix-sum/
- * Difficulty: Medium
- *
- * You are given an n x n integer matrix. You can do the following operation any number of times:
- * - Choose any two adjacent elements of matrix and multiply each of them by -1.
- *
- * Two elements are considered adjacent if and only if they share a border.
- *
- * Your goal is to maximize the summation of the matrix's elements. Return the maximum sum of the
- * matrix's elements using the operation mentioned above.
- */
-
-/**
- * @param {number[][]} matrix
- * @return {number}
- */
-var maxMatrixSum = function(matrix) {
- let totalSum = 0;
- let negativeCount = 0;
- let minAbs = Infinity;
-
- for (const row of matrix) {
- for (const num of row) {
- totalSum += Math.abs(num);
- if (num < 0) negativeCount++;
- minAbs = Math.min(minAbs, Math.abs(num));
- }
- }
-
- return negativeCount % 2 === 0 ? totalSum : totalSum - 2 * minAbs;
-};
diff --git a/solutions/1976-number-of-ways-to-arrive-at-destination.js b/solutions/1976-number-of-ways-to-arrive-at-destination.js
deleted file mode 100644
index 85b4ad9f..00000000
--- a/solutions/1976-number-of-ways-to-arrive-at-destination.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 1976. Number of Ways to Arrive at Destination
- * https://leetcode.com/problems/number-of-ways-to-arrive-at-destination/
- * Difficulty: Medium
- *
- * You are in a city that consists of n intersections numbered from 0 to n - 1 with bi-directional
- * roads between some intersections. The inputs are generated such that you can reach any
- * intersection from any other intersection and that there is at most one road between any two
- * intersections.
- *
- * You are given an integer n and a 2D integer array roads where roads[i] = [ui, vi, timei] means
- * that there is a road between intersections ui and vi that takes timei minutes to travel. You
- * want to know in how many ways you can travel from intersection 0 to intersection n - 1 in the
- * shortest amount of time.
- *
- * Return the number of ways you can arrive at your destination in the shortest amount of time.
- * Since the answer may be large, return it modulo 109 + 7.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} roads
- * @return {number}
- */
-var countPaths = function(n, roads) {
- const MOD = 1e9 + 7;
- const graph = Array.from({ length: n }, () => []);
- const distances = new Array(n).fill(Infinity);
- const ways = new Array(n).fill(0);
-
- for (const [u, v, time] of roads) {
- graph[u].push([v, time]);
- graph[v].push([u, time]);
- }
-
- const queue = [[0, 0]];
- distances[0] = 0;
- ways[0] = 1;
-
- while (queue.length) {
- const [dist, node] = queue.shift();
-
- if (dist > distances[node]) continue;
-
- for (const [next, time] of graph[node]) {
- const newDist = dist + time;
-
- if (newDist < distances[next]) {
- distances[next] = newDist;
- ways[next] = ways[node];
- queue.push([newDist, next]);
- queue.sort((a, b) => a[0] - b[0]);
- } else if (newDist === distances[next]) {
- ways[next] = (ways[next] + ways[node]) % MOD;
- }
- }
- }
-
- return ways[n - 1];
-};
diff --git a/solutions/1977-number-of-ways-to-separate-numbers.js b/solutions/1977-number-of-ways-to-separate-numbers.js
deleted file mode 100644
index 6fad6b5d..00000000
--- a/solutions/1977-number-of-ways-to-separate-numbers.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 1977. Number of Ways to Separate Numbers
- * https://leetcode.com/problems/number-of-ways-to-separate-numbers/
- * Difficulty: Hard
- *
- * You wrote down many positive integers in a string called num. However, you realized that you
- * forgot to add commas to seperate the different numbers. You remember that the list of integers
- * was non-decreasing and that no integer had leading zeros.
- *
- * Return the number of possible lists of integers that you could have written down to get the
- * string num. Since the answer may be large, return it modulo 109 + 7.
- */
-
-/**
- * @param {string} num
- * @return {number}
- */
-var numberOfCombinations = function(num) {
- const n = num.length;
- if (num[0] === '0') return 0;
-
- const MOD = 1e9 + 7;
- const lcp = new Array(n + 1).fill().map(() => new Array(n + 1).fill(0));
-
- for (let i = n - 1; i >= 0; i--) {
- for (let j = n - 1; j >= 0; j--) {
- if (num[i] === num[j]) {
- lcp[i][j] = lcp[i + 1][j + 1] + 1;
- }
- }
- }
-
- const dp = new Array(n).fill().map(() => new Array(n + 1).fill(0));
- const prefixSum = new Array(n).fill().map(() => new Array(n + 1).fill(0));
-
- dp[0][1] = 1;
- prefixSum[0][1] = 1;
-
- for (let i = 1; i < n; i++) {
- for (let j = 1; j <= i; j++) {
- prefixSum[i - 1][j] = (prefixSum[i - 1][j - 1] + dp[i - 1][j]) % MOD;
- }
-
- for (let len = 1; len <= i + 1; len++) {
- if (num[i - len + 1] === '0') continue;
-
- if (i - len < 0) {
- dp[i][len] = 1;
- continue;
- }
-
- dp[i][len] = prefixSum[i - len][Math.min(i - len + 1, len)];
-
- if (len <= i - len + 1) {
- const start1 = i - 2 * len + 1;
- const start2 = i - len + 1;
-
- if (!compare(start1, start2, len)) {
- dp[i][len] = (dp[i][len] - dp[i - len][len] + MOD) % MOD;
- }
- }
- }
-
- prefixSum[i][0] = 0;
- for (let j = 1; j <= i + 1; j++) {
- prefixSum[i][j] = (prefixSum[i][j - 1] + dp[i][j]) % MOD;
- }
- }
-
- return prefixSum[n - 1][n];
-
- function compare(i1, i2, len) {
- const commonLen = lcp[i1][i2];
- if (commonLen >= len) return true;
- return i1 + commonLen < n && i2 + commonLen < n && num[i1 + commonLen] <= num[i2 + commonLen];
- }
-};
diff --git a/solutions/1979-find-greatest-common-divisor-of-array.js b/solutions/1979-find-greatest-common-divisor-of-array.js
deleted file mode 100644
index acf2c5df..00000000
--- a/solutions/1979-find-greatest-common-divisor-of-array.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 1979. Find Greatest Common Divisor of Array
- * https://leetcode.com/problems/find-greatest-common-divisor-of-array/
- * Difficulty: Easy
- *
- * Given an integer array nums, return the greatest common divisor of the smallest number and
- * largest number in nums.
- *
- * The greatest common divisor of two numbers is the largest positive integer that evenly
- * divides both numbers.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var findGCD = function(nums) {
- return gcd(Math.min(...nums), Math.max(...nums));
-
- function gcd(a, b) {
- return b === 0 ? a : gcd(b, a % b);
- }
-};
diff --git a/solutions/1981-minimize-the-difference-between-target-and-chosen-elements.js b/solutions/1981-minimize-the-difference-between-target-and-chosen-elements.js
deleted file mode 100644
index 6e66a493..00000000
--- a/solutions/1981-minimize-the-difference-between-target-and-chosen-elements.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 1981. Minimize the Difference Between Target and Chosen Elements
- * https://leetcode.com/problems/minimize-the-difference-between-target-and-chosen-elements/
- * Difficulty: Medium
- *
- * You are given an m x n integer matrix mat and an integer target.
- *
- * Choose one integer from each row in the matrix such that the absolute difference between
- * target and the sum of the chosen elements is minimized.
- *
- * Return the minimum absolute difference.
- *
- * The absolute difference between two numbers a and b is the absolute value of a - b.
- */
-
-/**
- * @param {number[][]} mat
- * @param {number} target
- * @return {number}
- */
-var minimizeTheDifference = function(mat, target) {
- const m = mat.length;
- const maxSum = 70 * m;
- let possibleSums = new Set([0]);
-
- for (const row of mat) {
- const nextSums = new Set();
- for (const num of row) {
- for (const sum of possibleSums) {
- const newSum = sum + num;
- if (newSum <= target + maxSum) {
- nextSums.add(newSum);
- }
- }
- }
- possibleSums = nextSums;
- }
-
- let result = Infinity;
- for (const sum of possibleSums) {
- result = Math.min(result, Math.abs(sum - target));
- }
-
- return result;
-};
diff --git a/solutions/1982-find-array-given-subset-sums.js b/solutions/1982-find-array-given-subset-sums.js
deleted file mode 100644
index da9ab09f..00000000
--- a/solutions/1982-find-array-given-subset-sums.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 1982. Find Array Given Subset Sums
- * https://leetcode.com/problems/find-array-given-subset-sums/
- * Difficulty: Hard
- *
- * You are given an integer n representing the length of an unknown array that you are trying
- * to recover. You are also given an array sums containing the values of all 2n subset sums of
- * the unknown array (in no particular order).
- *
- * Return the array ans of length n representing the unknown array. If multiple answers exist,
- * return any of them.
- *
- * An array sub is a subset of an array arr if sub can be obtained from arr by deleting some
- * (possibly zero or all) elements of arr. The sum of the elements in sub is one possible
- * subset sum of arr. The sum of an empty array is considered to be 0.
- *
- * Note: Test cases are generated such that there will always be at least one correct answer.
- */
-
-/**
-* @param {number} n
-* @param {number[]} sums
-* @return {number[]}
-*/
-var recoverArray = function(n, sums) {
- sums.sort((a, b) => a - b);
-
- const result = [];
- while (result.length < n) {
- const diff = sums[1] - sums[0];
-
- const withNum = [];
- const withoutNum = [];
- const freq = new Map();
- for (const sum of sums) {
- freq.set(sum, (freq.get(sum) || 0) + 1);
- }
-
- for (const sum of sums) {
- if (freq.get(sum) > 0) {
- freq.set(sum, freq.get(sum) - 1);
-
- if (freq.get(sum + diff) > 0) {
- freq.set(sum + diff, freq.get(sum + diff) - 1);
- withoutNum.push(sum);
- withNum.push(sum + diff);
- } else {
- return [];
- }
- }
- }
-
- if (withoutNum.includes(0)) {
- result.push(diff);
- sums = withoutNum;
- } else {
- result.push(-diff);
- sums = withNum;
- }
- }
-
- return result;
-};
diff --git a/solutions/1984-minimum-difference-between-highest-and-lowest-of-k-scores.js b/solutions/1984-minimum-difference-between-highest-and-lowest-of-k-scores.js
deleted file mode 100644
index 889aae95..00000000
--- a/solutions/1984-minimum-difference-between-highest-and-lowest-of-k-scores.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 1984. Minimum Difference Between Highest and Lowest of K Scores
- * https://leetcode.com/problems/minimum-difference-between-highest-and-lowest-of-k-scores/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums, where nums[i] represents the score of the
- * ith student. You are also given an integer k.
- *
- * Pick the scores of any k students from the array so that the difference between the highest
- * and the lowest of the k scores is minimized.
- *
- * Return the minimum possible difference.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var minimumDifference = function(nums, k) {
- nums.sort((a, b) => a - b);
- let result = Infinity;
-
- for (let i = 0; i <= nums.length - k; i++) {
- result = Math.min(result, nums[i + k - 1] - nums[i]);
- }
-
- return result;
-};
diff --git a/solutions/1986-minimum-number-of-work-sessions-to-finish-the-tasks.js b/solutions/1986-minimum-number-of-work-sessions-to-finish-the-tasks.js
deleted file mode 100644
index f6174274..00000000
--- a/solutions/1986-minimum-number-of-work-sessions-to-finish-the-tasks.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 1986. Minimum Number of Work Sessions to Finish the Tasks
- * https://leetcode.com/problems/minimum-number-of-work-sessions-to-finish-the-tasks/
- * Difficulty: Medium
- *
- * There are n tasks assigned to you. The task times are represented as an integer array tasks of
- * length n, where the ith task takes tasks[i] hours to finish. A work session is when you work
- * for at most sessionTime consecutive hours and then take a break.
- *
- * You should finish the given tasks in a way that satisfies the following conditions:
- * - If you start a task in a work session, you must complete it in the same work session.
- * - You can start a new task immediately after finishing the previous one.
- * - You may complete the tasks in any order.
- *
- * Given tasks and sessionTime, return the minimum number of work sessions needed to finish all the
- * tasks following the conditions above.
- *
- * The tests are generated such that sessionTime is greater than or equal to the maximum element
- * in tasks[i].
- */
-
-/**
- * @param {number[]} tasks
- * @param {number} sessionTime
- * @return {number}
- */
-var minSessions = function(tasks, sessionTime) {
- const n = tasks.length;
- const dp = new Array(1 << n).fill(n + 1);
- dp[0] = 0;
-
- for (let mask = 1; mask < 1 << n; mask++) {
- let time = 0;
- for (let i = 0; i < n; i++) {
- if (mask & (1 << i)) {
- time += tasks[i];
- }
- }
-
- for (let subset = mask; subset; subset = (subset - 1) & mask) {
- if (subset === mask) continue;
- let subsetTime = 0;
- for (let i = 0; i < n; i++) {
- if (subset & (1 << i)) {
- subsetTime += tasks[i];
- }
- }
- if (subsetTime <= sessionTime) {
- dp[mask] = Math.min(dp[mask], dp[mask ^ subset] + 1);
- }
- }
-
- if (time <= sessionTime) {
- dp[mask] = 1;
- }
- }
-
- return dp[(1 << n) - 1];
-};
diff --git a/solutions/1987-number-of-unique-good-subsequences.js b/solutions/1987-number-of-unique-good-subsequences.js
deleted file mode 100644
index e0d6651c..00000000
--- a/solutions/1987-number-of-unique-good-subsequences.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 1987. Number of Unique Good Subsequences
- * https://leetcode.com/problems/number-of-unique-good-subsequences/
- * Difficulty: Hard
- *
- * You are given a binary string binary. A subsequence of binary is considered good if it is not
- * empty and has no leading zeros (with the exception of "0").
- *
- * Find the number of unique good subsequences of binary.
- * - For example, if binary = "001", then all the good subsequences are ["0", "0", "1"], so the
- * unique good subsequences are "0" and "1". Note that subsequences "00", "01", and "001" are
- * not good because they have leading zeros.
- *
- * Return the number of unique good subsequences of binary. Since the answer may be very large,
- * return it modulo 109 + 7.
- *
- * A subsequence is a sequence that can be derived from another sequence by deleting some or no
- * elements without changing the order of the remaining elements.
- */
-
-/**
- * @param {string} binary
- * @return {number}
- */
-var numberOfUniqueGoodSubsequences = function(binary) {
- const MOD = 1e9 + 7;
- let endsWithZero = 0;
- let endsWithOne = 0;
- let hasZero = false;
-
- for (const digit of binary) {
- if (digit === '0') {
- hasZero = true;
- endsWithZero = (endsWithZero + endsWithOne) % MOD;
- } else {
- endsWithOne = (endsWithOne + endsWithZero + 1) % MOD;
- }
- }
-
- return (endsWithZero + endsWithOne + (hasZero ? 1 : 0)) % MOD;
-};
diff --git a/solutions/1991-find-the-middle-index-in-array.js b/solutions/1991-find-the-middle-index-in-array.js
deleted file mode 100644
index fa993684..00000000
--- a/solutions/1991-find-the-middle-index-in-array.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 1991. Find the Middle Index in Array
- * https://leetcode.com/problems/find-the-middle-index-in-array/
- * Difficulty: Easy
- *
- * Given a 0-indexed integer array nums, find the leftmost middleIndex (i.e., the smallest amongst
- * all the possible ones).
- *
- * A middleIndex is an index where nums[0] + nums[1] + ... +
- * nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1].
- *
- * If middleIndex == 0, the left side sum is considered to be 0. Similarly, if
- * middleIndex == nums.length - 1, the right side sum is considered to be 0.
- *
- * Return the leftmost middleIndex that satisfies the condition, or -1 if there is no such index.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var findMiddleIndex = function(nums) {
- let left = 0;
- let right = nums.reduce((sum, n) => sum + n, 0);
-
- for (let i = 0; i < nums.length; i++) {
- left += nums[i];
- right -= nums[i];
- if (left - nums[i] === right) {
- return i;
- }
- }
-
- return -1;
-};
diff --git a/solutions/1992-find-all-groups-of-farmland.js b/solutions/1992-find-all-groups-of-farmland.js
deleted file mode 100644
index 0e39fd7f..00000000
--- a/solutions/1992-find-all-groups-of-farmland.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 1992. Find All Groups of Farmland
- * https://leetcode.com/problems/find-all-groups-of-farmland/
- * Difficulty: Medium
- *
- * You are given a 0-indexed m x n binary matrix land where a 0 represents a hectare of forested
- * land and a 1 represents a hectare of farmland.
- *
- * To keep the land organized, there are designated rectangular areas of hectares that consist
- * entirely of farmland. These rectangular areas are called groups. No two groups are adjacent,
- * meaning farmland in one group is not four-directionally adjacent to another farmland in a
- * different group.
- *
- * land can be represented by a coordinate system where the top left corner of land is (0, 0)
- * and the bottom right corner of land is (m-1, n-1). Find the coordinates of the top left and
- * bottom right corner of each group of farmland. A group of farmland with a top left corner
- * at (r1, c1) and a bottom right corner at (r2, c2) is represented by the 4-length
- * array [r1, c1, r2, c2].
- *
- * Return a 2D array containing the 4-length arrays described above for each group of farmland
- * in land. If there are no groups of farmland, return an empty array. You may return the answer
- * in any order.
- */
-
-/**
- * @param {number[][]} land
- * @return {number[][]}
- */
-var findFarmland = function(land) {
- const m = land.length;
- const n = land[0].length;
- const result = [];
-
- for (let r = 0; r < m; r++) {
- for (let c = 0; c < n; c++) {
- if (land[r][c] === 1) {
- let r2 = r;
- let c2 = c;
-
- while (r2 + 1 < m && land[r2 + 1][c] === 1) r2++;
- while (c2 + 1 < n && land[r][c2 + 1] === 1) c2++;
-
- result.push([r, c, r2, c2]);
-
- for (let i = r; i <= r2; i++) {
- for (let j = c; j <= c2; j++) {
- land[i][j] = 0;
- }
- }
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/1993-operations-on-tree.js b/solutions/1993-operations-on-tree.js
deleted file mode 100644
index e1f5952c..00000000
--- a/solutions/1993-operations-on-tree.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * 1993. Operations on Tree
- * https://leetcode.com/problems/operations-on-tree/
- * Difficulty: Medium
- *
- * You are given a tree with n nodes numbered from 0 to n - 1 in the form of a parent array
- * parent where parent[i] is the parent of the ith node. The root of the tree is node 0,
- * so parent[0] = -1 since it has no parent. You want to design a data structure that
- * allows users to lock, unlock, and upgrade nodes in the tree.
- *
- * The data structure should support the following functions:
- * - Lock: Locks the given node for the given user and prevents other users from locking
- * the same node. You may only lock a node using this function if the node is unlocked.
- * - Unlock: Unlocks the given node for the given user. You may only unlock a node using
- * this function if it is currently locked by the same user.
- * - Upgrade: Locks the given node for the given user and unlocks all of its descendants
- * regardless of who locked it. You may only upgrade a node if all 3 conditions are true:
- * - The node is unlocked,
- * - It has at least one locked descendant (by any user), and
- * - It does not have any locked ancestors.
- *
- * Implement the LockingTree class:
- * - LockingTree(int[] parent) initializes the data structure with the parent array.
- * - lock(int num, int user) returns true if it is possible for the user with id user to lock
- * the node num, or false otherwise. If it is possible, the node num will become locked by
- * the user with id user.
- * - unlock(int num, int user) returns true if it is possible for the user with id user to
- * unlock the node num, or false otherwise. If it is possible, the node num will become unlocked.
- * - upgrade(int num, int user) returns true if it is possible for the user with id user to
- * upgrade the node num, or false otherwise. If it is possible, the node num will be upgraded.
- */
-
-/**
- * @param {number[]} parent
- */
-var LockingTree = function(parent) {
- this.parent = parent;
- this.locked = new Map();
- this.children = new Array(parent.length).fill().map(() => []);
- for (let i = 1; i < parent.length; i++) {
- this.children[parent[i]].push(i);
- }
-};
-
-/**
- * @param {number} num
- * @param {number} user
- * @return {boolean}
- */
-LockingTree.prototype.lock = function(num, user) {
- if (this.locked.has(num)) return false;
- this.locked.set(num, user);
- return true;
-};
-
-/**
- * @param {number} num
- * @param {number} user
- * @return {boolean}
- */
-LockingTree.prototype.unlock = function(num, user) {
- if (!this.locked.has(num) || this.locked.get(num) !== user) return false;
- this.locked.delete(num);
- return true;
-};
-
-/**
- * @param {number} num
- * @param {number} user
- * @return {boolean}
- */
-LockingTree.prototype.upgrade = function(num, user) {
- if (this.locked.has(num)) return false;
-
- let node = num;
- while (node !== -1) {
- if (this.locked.has(node)) return false;
- node = this.parent[node];
- }
-
- const descendants = [];
- const queue = [num];
- let hasLockedDescendant = false;
-
- while (queue.length) {
- const curr = queue.shift();
- if (this.locked.has(curr)) {
- hasLockedDescendant = true;
- descendants.push(curr);
- }
- queue.push(...this.children[curr]);
- }
-
- if (!hasLockedDescendant) return false;
-
- for (const descendant of descendants) {
- this.locked.delete(descendant);
- }
- this.locked.set(num, user);
- return true;
-};
diff --git a/solutions/1994-the-number-of-good-subsets.js b/solutions/1994-the-number-of-good-subsets.js
deleted file mode 100644
index 7fb63535..00000000
--- a/solutions/1994-the-number-of-good-subsets.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * 1994. The Number of Good Subsets
- * https://leetcode.com/problems/the-number-of-good-subsets/
- * Difficulty: Hard
- *
- * You are given an integer array nums. We call a subset of nums good if its product can be
- * represented as a product of one or more distinct prime numbers.
- *
- * - For example, if nums = [1, 2, 3, 4]:
- * - [2, 3], [1, 2, 3], and [1, 3] are good subsets with products 6 = 2*3, 6 = 2*3, and 3 = 3
- * respectively.
- * - [1, 4] and [4] are not good subsets with products 4 = 2*2 and 4 = 2*2 respectively.
- *
- * Return the number of different good subsets in nums modulo 109 + 7.
- *
- * A subset of nums is any array that can be obtained by deleting some (possibly none or all)
- * elements from nums. Two subsets are different if and only if the chosen indices to delete
- * are different.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var numberOfGoodSubsets = function(nums) {
- const MOD = 1e9 + 7;
- const primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29];
- const freq = new Array(31).fill(0);
- for (const num of nums) {
- freq[num]++;
- }
-
- const dp = new Array(1 << primes.length).fill(0);
- dp[0] = 1;
- for (let i = 0; i < freq[1]; i++) {
- dp[0] = (dp[0] * 2) % MOD;
- }
-
- for (let num = 2; num <= 30; num++) {
- if (freq[num] === 0) continue;
- let mask = 0;
- let valid = true;
- for (let i = 0; i < primes.length; i++) {
- let count = 0;
- let temp = num;
- while (temp % primes[i] === 0) {
- count++;
- temp /= primes[i];
- }
- if (count > 1) {
- valid = false;
- break;
- }
- if (count === 1) {
- mask |= 1 << i;
- }
- }
-
- if (!valid) continue;
-
- const prev = dp.slice();
- for (let j = 0; j < 1 << primes.length; j++) {
- if ((j & mask) === 0) {
- dp[j | mask] = (dp[j | mask] + prev[j] * freq[num]) % MOD;
- }
- }
- }
-
- let result = 0;
- for (let i = 1; i < 1 << primes.length; i++) {
- result = (result + dp[i]) % MOD;
- }
-
- return result;
-};
diff --git a/solutions/1995-count-special-quadruplets.js b/solutions/1995-count-special-quadruplets.js
deleted file mode 100644
index e37902ac..00000000
--- a/solutions/1995-count-special-quadruplets.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 1995. Count Special Quadruplets
- * https://leetcode.com/problems/count-special-quadruplets/
- * Difficulty: Easy
- *
- * Given a 0-indexed integer array nums, return the number of distinct quadruplets
- * (a, b, c, d) such that:
- * - nums[a] + nums[b] + nums[c] == nums[d], and
- * - a < b < c < d
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var countQuadruplets = function(nums) {
- const map = new Map();
- let result = 0;
-
- for (let c = nums.length - 2; c >= 2; c--) {
- map.set(nums[c + 1], (map.get(nums[c + 1]) || 0) + 1);
- for (let a = 0; a < c - 1; a++) {
- for (let b = a + 1; b < c; b++) {
- const sum = nums[a] + nums[b] + nums[c];
- result += map.get(sum) || 0;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/1997-first-day-where-you-have-been-in-all-the-rooms.js b/solutions/1997-first-day-where-you-have-been-in-all-the-rooms.js
deleted file mode 100644
index 6dde2362..00000000
--- a/solutions/1997-first-day-where-you-have-been-in-all-the-rooms.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 1997. First Day Where You Have Been in All the Rooms
- * https://leetcode.com/problems/first-day-where-you-have-been-in-all-the-rooms/
- * Difficulty: Medium
- *
- * There are n rooms you need to visit, labeled from 0 to n - 1. Each day is labeled, starting
- * from 0. You will go in and visit one room a day.
- *
- * Initially on day 0, you visit room 0. The order you visit the rooms for the coming days is
- * determined by the following rules and a given 0-indexed array nextVisit of length n:
- * - Assuming that on a day, you visit room i,
- * - if you have been in room i an odd number of times (including the current visit), on the next
- * day you will visit a room with a lower or equal room number specified by nextVisit[i]
- * where 0 <= nextVisit[i] <= i;
- * - if you have been in room i an even number of times (including the current visit), on the
- * next day you will visit room (i + 1) mod n.
- *
- * Return the label of the first day where you have been in all the rooms. It can be shown
- * that such a day exists. Since the answer may be very large, return it modulo 109 + 7.
- */
-
-/**
- * @param {number[]} nextVisit
- * @return {number}
- */
-var firstDayBeenInAllRooms = function(nextVisit) {
- const MOD = 1e9 + 7;
- const n = nextVisit.length;
- const dp = new Array(n).fill(0);
-
- for (let i = 1; i < n; i++) {
- dp[i] = (2 * dp[i - 1] + 2 - dp[nextVisit[i - 1]] + MOD) % MOD;
- }
-
- return dp[n - 1];
-};
diff --git a/solutions/1998-gcd-sort-of-an-array.js b/solutions/1998-gcd-sort-of-an-array.js
deleted file mode 100644
index 97bb5a39..00000000
--- a/solutions/1998-gcd-sort-of-an-array.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 1998. GCD Sort of an Array
- * https://leetcode.com/problems/gcd-sort-of-an-array/
- * Difficulty: Hard
- *
- * You are given an integer array nums, and you can perform the following operation any
- * number of times on nums:
- * - Swap the positions of two elements nums[i] and nums[j] if gcd(nums[i], nums[j]) > 1
- * where gcd(nums[i], nums[j]) is the greatest common divisor of nums[i] and nums[j].
- *
- * Return true if it is possible to sort nums in non-decreasing order using the above swap
- * method, or false otherwise.
- */
-
-/**
- * @param {number[]} nums
- * @return {boolean}
- */
-var gcdSort = function(nums) {
- const maxNum = Math.max(...nums);
- const parent = new Array(maxNum + 1).fill().map((_, i) => i);
- const minPrime = new Array(maxNum + 1).fill(0);
- for (let i = 2; i <= maxNum; i++) {
- if (minPrime[i] === 0) {
- for (let j = i; j <= maxNum; j += i) {
- minPrime[j] = i;
- }
- }
- }
-
- const groups = new Map();
- for (const num of nums) {
- let curr = num;
- const primes = new Set();
- while (curr > 1) {
- const prime = minPrime[curr];
- primes.add(prime);
- curr /= prime;
- }
- for (const prime of primes) {
- if (!groups.has(prime)) groups.set(prime, []);
- groups.get(prime).push(num);
- }
- }
-
- for (const numbers of groups.values()) {
- for (let i = 1; i < numbers.length; i++) {
- union(numbers[i - 1], numbers[i], parent);
- }
- }
-
- const sorted = [...nums].sort((a, b) => a - b);
- for (let i = 0; i < nums.length; i++) {
- if (find(nums[i], parent) !== find(sorted[i], parent)) {
- return false;
- }
- }
-
- return true;
-
- function find(x, parent) {
- if (parent[x] !== x) parent[x] = find(parent[x], parent);
- return parent[x];
- }
-
- function union(x, y, parent) {
- parent[find(x, parent)] = find(y, parent);
- }
-};
diff --git a/solutions/2001-number-of-pairs-of-interchangeable-rectangles.js b/solutions/2001-number-of-pairs-of-interchangeable-rectangles.js
deleted file mode 100644
index 89f2611e..00000000
--- a/solutions/2001-number-of-pairs-of-interchangeable-rectangles.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2001. Number of Pairs of Interchangeable Rectangles
- * https://leetcode.com/problems/number-of-pairs-of-interchangeable-rectangles/
- * Difficulty: Medium
- *
- * You are given n rectangles represented by a 0-indexed 2D integer array rectangles,
- * where rectangles[i] = [widthi, heighti] denotes the width and height of the ith rectangle.
- *
- * Two rectangles i and j (i < j) are considered interchangeable if they have the same
- * width-to-height ratio. More formally, two rectangles are interchangeable if
- * widthi/heighti == widthj/heightj (using decimal division, not integer division).
- *
- * Return the number of pairs of interchangeable rectangles in rectangles.
- */
-
-/**
- * @param {number[][]} rectangles
- * @return {number}
- */
-var interchangeableRectangles = function(rectangles) {
- const map = new Map();
- let result = 0;
-
- for (const [width, height] of rectangles) {
- const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
- const divisor = gcd(width, height);
- const ratio = `${width / divisor}/${height / divisor}`;
-
- if (map.has(ratio)) {
- result += map.get(ratio);
- map.set(ratio, map.get(ratio) + 1);
- } else {
- map.set(ratio, 1);
- }
- }
-
- return result;
-};
diff --git a/solutions/2002-maximum-product-of-the-length-of-two-palindromic-subsequences.js b/solutions/2002-maximum-product-of-the-length-of-two-palindromic-subsequences.js
deleted file mode 100644
index ae489e83..00000000
--- a/solutions/2002-maximum-product-of-the-length-of-two-palindromic-subsequences.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2002. Maximum Product of the Length of Two Palindromic Subsequences
- * https://leetcode.com/problems/maximum-product-of-the-length-of-two-palindromic-subsequences/
- * Difficulty: Medium
- *
- * Given a string s, find two disjoint palindromic subsequences of s such that the product of their
- * lengths is maximized. The two subsequences are disjoint if they do not both pick a character at
- * the same index.
- *
- * Return the maximum possible product of the lengths of the two palindromic subsequences.
- *
- * A subsequence is a string that can be derived from another string by deleting some or no
- * characters without changing the order of the remaining characters. A string is palindromic
- * if it reads the same forward and backward.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var maxProduct = function(s) {
- const n = s.length;
- let result = 0;
-
- for (let mask1 = 1; mask1 < (1 << n); mask1++) {
- for (let mask2 = 1; mask2 < (1 << n); mask2++) {
- if (mask1 & mask2) continue;
- const len1 = isPalindrome(s, mask1);
- if (len1 === 0) continue;
- const len2 = isPalindrome(s, mask2);
- if (len2 === 0) continue;
- result = Math.max(result, len1 * len2);
- }
- }
-
- return result;
-
- function isPalindrome(str, mask) {
- const chars = [];
- for (let i = 0; i < n; i++) {
- if (mask & (1 << i)) chars.push(str[i]);
- }
- let left = 0;
- let right = chars.length - 1;
- while (left < right) {
- if (chars[left++] !== chars[right--]) return 0;
- }
- return chars.length;
- }
-};
diff --git a/solutions/2003-smallest-missing-genetic-value-in-each-subtree.js b/solutions/2003-smallest-missing-genetic-value-in-each-subtree.js
deleted file mode 100644
index f57b89d8..00000000
--- a/solutions/2003-smallest-missing-genetic-value-in-each-subtree.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 2003. Smallest Missing Genetic Value in Each Subtree
- * https://leetcode.com/problems/smallest-missing-genetic-value-in-each-subtree/
- * Difficulty: Hard
- *
- * There is a family tree rooted at 0 consisting of n nodes numbered 0 to n - 1. You are given a
- * 0-indexed integer array parents, where parents[i] is the parent for node i. Since node 0 is
- * the root, parents[0] == -1.
- *
- * There are 105 genetic values, each represented by an integer in the inclusive range [1, 105].
- * You are given a 0-indexed integer array nums, where nums[i] is a distinct genetic value for
- * node i.
- *
- * Return an array ans of length n where ans[i] is the smallest genetic value that is missing
- * from the subtree rooted at node i.
- *
- * The subtree rooted at a node x contains node x and all of its descendant nodes.
- */
-
-/**
- * @param {number[]} parents
- * @param {number[]} nums
- * @return {number[]}
- */
-var smallestMissingValueSubtree = function(parents, nums) {
- const n = parents.length;
- const result = new Array(n).fill(1);
- const children = Array.from({ length: n }, () => []);
- const seen = new Set();
- let maxMissing = 1;
-
- for (let i = 1; i < n; i++) {
- children[parents[i]].push(i);
- }
-
- const nodeWithOne = nums.indexOf(1);
- if (nodeWithOne === -1) return result;
-
- let current = nodeWithOne;
- while (current !== -1) {
- const stack = [current];
- while (stack.length) {
- const node = stack.pop();
- seen.add(nums[node]);
- for (const child of children[node]) {
- if (!seen.has(nums[child])) stack.push(child);
- }
- }
- while (seen.has(maxMissing)) maxMissing++;
- result[current] = maxMissing;
- current = parents[current];
- }
-
- return result;
-};
diff --git a/solutions/2006-count-number-of-pairs-with-absolute-difference-k.js b/solutions/2006-count-number-of-pairs-with-absolute-difference-k.js
deleted file mode 100644
index 022c9b4d..00000000
--- a/solutions/2006-count-number-of-pairs-with-absolute-difference-k.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 2006. Count Number of Pairs With Absolute Difference K
- * https://leetcode.com/problems/count-number-of-pairs-with-absolute-difference-k/
- * Difficulty: Easy
- *
- * Given an integer array nums and an integer k, return the number of pairs (i, j) where
- * i < j such that |nums[i] - nums[j]| == k.
- *
- * The value of |x| is defined as:
- * - x if x >= 0.
- * - -x if x < 0.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countKDifference = function(nums, k) {
- const map = new Map();
- let result = 0;
-
- for (const num of nums) {
- result += (map.get(num - k) || 0) + (map.get(num + k) || 0);
- map.set(num, (map.get(num) || 0) + 1);
- }
-
- return result;
-};
diff --git a/solutions/2007-find-original-array-from-doubled-array.js b/solutions/2007-find-original-array-from-doubled-array.js
deleted file mode 100644
index ca1d1357..00000000
--- a/solutions/2007-find-original-array-from-doubled-array.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2007. Find Original Array From Doubled Array
- * https://leetcode.com/problems/find-original-array-from-doubled-array/
- * Difficulty: Medium
- *
- * An integer array original is transformed into a doubled array changed by appending twice the
- * value of every element in original, and then randomly shuffling the resulting array.
- *
- * Given an array changed, return original if changed is a doubled array. If changed is not a
- * doubled array, return an empty array. The elements in original may be returned in any order.
- */
-
-/**
- * @param {number[]} changed
- * @return {number[]}
- */
-var findOriginalArray = function(changed) {
- if (changed.length % 2 !== 0) return [];
-
- const frequency = new Map();
- const result = [];
-
- changed.sort((a, b) => a - b);
-
- for (const num of changed) {
- frequency.set(num, (frequency.get(num) || 0) + 1);
- }
-
- for (const num of changed) {
- if (frequency.get(num) === 0) continue;
-
- frequency.set(num, frequency.get(num) - 1);
-
- const doubled = num * 2;
- if (!frequency.has(doubled) || frequency.get(doubled) === 0) return [];
-
- frequency.set(doubled, frequency.get(doubled) - 1);
- result.push(num);
- }
-
- return result;
-};
diff --git a/solutions/2008-maximum-earnings-from-taxi.js b/solutions/2008-maximum-earnings-from-taxi.js
deleted file mode 100644
index fd7cbaac..00000000
--- a/solutions/2008-maximum-earnings-from-taxi.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2008. Maximum Earnings From Taxi
- * https://leetcode.com/problems/maximum-earnings-from-taxi/
- * Difficulty: Medium
- *
- * There are n points on a road you are driving your taxi on. The n points on the road are
- * labeled from 1 to n in the direction you are going, and you want to drive from point 1
- * to point n to make money by picking up passengers. You cannot change the direction of the taxi.
- *
- * The passengers are represented by a 0-indexed 2D integer array rides, where
- * rides[i] = [starti, endi, tipi] denotes the ith passenger requesting a ride from point
- * starti to point endi who is willing to give a tipi dollar tip.
- *
- * For each passenger i you pick up, you earn endi - starti + tipi dollars. You may only drive
- * at most one passenger at a time.
- *
- * Given n and rides, return the maximum number of dollars you can earn by picking up the
- * passengers optimally.
- *
- * Note: You may drop off a passenger and pick up a different passenger at the same point.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} rides
- * @return {number}
- */
-var maxTaxiEarnings = function(n, rides) {
- rides.sort((a, b) => a[1] - b[1]);
- const dp = new Array(n + 1).fill(0);
- let rideIndex = 0;
-
- for (let point = 1; point <= n; point++) {
- dp[point] = dp[point - 1];
- while (rideIndex < rides.length && rides[rideIndex][1] === point) {
- const [start, end, tip] = rides[rideIndex];
- dp[point] = Math.max(dp[point], dp[start] + (end - start + tip));
- rideIndex++;
- }
- }
-
- return dp[n];
-};
diff --git a/solutions/2009-minimum-number-of-operations-to-make-array-continuous.js b/solutions/2009-minimum-number-of-operations-to-make-array-continuous.js
deleted file mode 100644
index d4cd063e..00000000
--- a/solutions/2009-minimum-number-of-operations-to-make-array-continuous.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2009. Minimum Number of Operations to Make Array Continuous
- * https://leetcode.com/problems/minimum-number-of-operations-to-make-array-continuous/
- * Difficulty: Hard
- *
- * You are given an integer array nums. In one operation, you can replace any element in nums
- * with any integer.
- *
- * nums is considered continuous if both of the following conditions are fulfilled:
- * - All elements in nums are unique.
- * - The difference between the maximum element and the minimum element in nums equals
- * nums.length - 1.
- *
- * For example, nums = [4, 2, 5, 3] is continuous, but nums = [1, 2, 3, 5, 6] is not continuous.
- *
- * Return the minimum number of operations to make nums continuous.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minOperations = function(nums) {
- const n = nums.length;
- const uniqueNums = [...new Set(nums)].sort((a, b) => a - b);
- let result = n;
-
- for (let i = 0, j = 0; i < uniqueNums.length; i++) {
- while (j < uniqueNums.length && uniqueNums[j] - uniqueNums[i] <= n - 1) {
- j++;
- }
- result = Math.min(result, n - (j - i));
- }
-
- return result;
-};
diff --git a/solutions/2012-sum-of-beauty-in-the-array.js b/solutions/2012-sum-of-beauty-in-the-array.js
deleted file mode 100644
index 957da790..00000000
--- a/solutions/2012-sum-of-beauty-in-the-array.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2012. Sum of Beauty in the Array
- * https://leetcode.com/problems/sum-of-beauty-in-the-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums. For each index i (1 <= i <= nums.length - 2)
- * the beauty of nums[i] equals:
- * - 2, if nums[j] < nums[i] < nums[k], for all 0 <= j < i and for all i < k <= nums.length - 1.
- * - 1, if nums[i - 1] < nums[i] < nums[i + 1], and the previous condition is not satisfied.
- * - 0, if none of the previous conditions holds.
- *
- * Return the sum of beauty of all nums[i] where 1 <= i <= nums.length - 2.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var sumOfBeauties = function(nums) {
- const n = nums.length;
- let result = 0;
- const leftMax = new Array(n).fill(nums[0]);
- const rightMin = new Array(n).fill(nums[n - 1]);
-
- for (let i = 1; i < n; i++) {
- leftMax[i] = Math.max(leftMax[i - 1], nums[i - 1]);
- }
-
- for (let i = n - 2; i >= 0; i--) {
- rightMin[i] = Math.min(rightMin[i + 1], nums[i + 1]);
- }
-
- for (let i = 1; i < n - 1; i++) {
- if (leftMax[i] < nums[i] && nums[i] < rightMin[i]) {
- result += 2;
- } else if (nums[i - 1] < nums[i] && nums[i] < nums[i + 1]) {
- result += 1;
- }
- }
-
- return result;
-};
diff --git a/solutions/2013-detect-squares.js b/solutions/2013-detect-squares.js
deleted file mode 100644
index 606076c3..00000000
--- a/solutions/2013-detect-squares.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 2013. Detect Squares
- * https://leetcode.com/problems/detect-squares/
- * Difficulty: Medium
- *
- * You are given a stream of points on the X-Y plane. Design an algorithm that:
- * - Adds new points from the stream into a data structure. Duplicate points are allowed and should
- * be treated as different points.
- * - Given a query point, counts the number of ways to choose three points from the data structure
- * such that the three points and the query point form an axis-aligned square with positive area.
- *
- * An axis-aligned square is a square whose edges are all the same length and are either parallel
- * or perpendicular to the x-axis and y-axis.
- *
- * Implement the DetectSquares class:
- * - DetectSquares() Initializes the object with an empty data structure.
- * - void add(int[] point) Adds a new point point = [x, y] to the data structure.
- * - int count(int[] point) Counts the number of ways to form axis-aligned squares with point
- * point = [x, y] as described above.
- */
-
-var DetectSquares = function() {
- this.points = new Map();
-};
-
-/**
- * @param {number[]} point
- * @return {void}
- */
-DetectSquares.prototype.add = function(point) {
- const [x, y] = point;
- const key = `${x},${y}`;
- this.points.set(key, (this.points.get(key) || 0) + 1);
-};
-
-/**
- * @param {number[]} point
- * @return {number}
- */
-DetectSquares.prototype.count = function(point) {
- const [x, y] = point;
- let result = 0;
-
- for (const [key, count] of this.points) {
- const [px, py] = key.split(',').map(Number);
- if (px === x || py === y || Math.abs(px - x) !== Math.abs(py - y)) continue;
-
- const point1 = `${x},${py}`;
- const point2 = `${px},${y}`;
- result += count * (this.points.get(point1) || 0) * (this.points.get(point2) || 0);
- }
-
- return result;
-};
diff --git a/solutions/2014-longest-subsequence-repeated-k-times.js b/solutions/2014-longest-subsequence-repeated-k-times.js
deleted file mode 100644
index ec575695..00000000
--- a/solutions/2014-longest-subsequence-repeated-k-times.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 2014. Longest Subsequence Repeated k Times
- * https://leetcode.com/problems/longest-subsequence-repeated-k-times/
- * Difficulty: Hard
- *
- * You are given a string s of length n, and an integer k. You are tasked to find the longest
- * subsequence repeated k times in string s.
- *
- * A subsequence is a string that can be derived from another string by deleting some or no
- * characters without changing the order of the remaining characters.
- *
- * A subsequence seq is repeated k times in the string s if seq * k is a subsequence of s,
- * where seq * k represents a string constructed by concatenating seq k times.
- * - For example, "bba" is repeated 2 times in the string "bababcba", because the string
- * "bbabba", constructed by concatenating "bba" 2 times, is a subsequence of the
- * string "bababcba".
- *
- * Return the longest subsequence repeated k times in string s. If multiple such subsequences
- * are found, return the lexicographically largest one. If there is no such subsequence,
- * return an empty string.
- */
-
-/**
- * @param {string} s
- * @param {number} k
- * @return {string}
- */
-var longestSubsequenceRepeatedK = function(s, k) {
- const n = s.length;
- const freq = new Array(26).fill(0);
- for (const char of s) {
- freq[char.charCodeAt(0) - 97]++;
- }
-
- let candidates = '';
- for (let i = 0; i < 26; i++) {
- const count = Math.floor(freq[i] / k);
- candidates += String.fromCharCode(97 + i).repeat(count);
- }
-
- function canFormSubsequence(seq) {
- let j = 0;
- for (let i = 0; i < n && j < seq.length * k; i++) {
- if (s[i] === seq[j % seq.length]) j++;
- }
- return j >= seq.length * k;
- }
-
- let result = '';
- backtrack('', candidates);
- return result;
-
- function backtrack(curr, remaining) {
- if (curr.length > result.length || (curr.length === result.length && curr > result)) {
- if (canFormSubsequence(curr)) result = curr;
- }
- if (!remaining) return;
-
- for (let i = remaining.length - 1; i >= 0; i--) {
- const nextChar = remaining[i];
- backtrack(curr + nextChar, remaining.slice(0, i) + remaining.slice(i + 1));
- }
- }
-};
diff --git a/solutions/2018-check-if-word-can-be-placed-in-crossword.js b/solutions/2018-check-if-word-can-be-placed-in-crossword.js
deleted file mode 100644
index 0a22bd5c..00000000
--- a/solutions/2018-check-if-word-can-be-placed-in-crossword.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 2018. Check if Word Can Be Placed In Crossword
- * https://leetcode.com/problems/check-if-word-can-be-placed-in-crossword/
- * Difficulty: Medium
- *
- * You are given an m x n matrix board, representing the current state of a crossword puzzle.
- * The crossword contains lowercase English letters (from solved words), ' ' to represent any
- * empty cells, and '#' to represent any blocked cells.
- *
- * A word can be placed horizontally (left to right or right to left) or vertically (top to
- * bottom or bottom to top) in the board if:
- * - It does not occupy a cell containing the character '#'.
- * - The cell each letter is placed in must either be ' ' (empty) or match the letter already
- * on the board.
- * - There must not be any empty cells ' ' or other lowercase letters directly left or right
- * of the word if the word was placed horizontally.
- * - There must not be any empty cells ' ' or other lowercase letters directly above or below
- * the word if the word was placed vertically.
- *
- * Given a string word, return true if word can be placed in board, or false otherwise.
- */
-
-/**
- * @param {character[][]} board
- * @param {string} word
- * @return {boolean}
- */
-var placeWordInCrossword = function(board, word) {
- const rows = board.length;
- const cols = board[0].length;
- const wordLen = word.length;
-
- function canPlace(row, col, dr, dc) {
- for (let i = 0; i < wordLen; i++) {
- const r = row + i * dr;
- const c = col + i * dc;
- if (r < 0 || r >= rows || c < 0 || c >= cols || board[r][c] === '#') return false;
- if (board[r][c] !== ' ' && board[r][c] !== word[i]) return false;
- }
-
- const beforeR = row - dr;
- const beforeC = col - dc;
- const afterR = row + wordLen * dr;
- const afterC = col + wordLen * dc;
-
- if ((beforeR >= 0 && beforeR < rows && beforeC >= 0
- && beforeC < cols && board[beforeR][beforeC] !== '#')
- || (afterR >= 0 && afterR < rows && afterC >= 0
- && afterC < cols && board[afterR][afterC] !== '#')) {
- return false;
- }
-
- return true;
- }
-
- for (let r = 0; r < rows; r++) {
- for (let c = 0; c < cols; c++) {
- if (canPlace(r, c, 0, 1) || canPlace(r, c, 0, -1)
- || canPlace(r, c, 1, 0) || canPlace(r, c, -1, 0)) {
- return true;
- }
- }
- }
-
- return false;
-};
diff --git a/solutions/2019-the-score-of-students-solving-math-expression.js b/solutions/2019-the-score-of-students-solving-math-expression.js
deleted file mode 100644
index b4391da2..00000000
--- a/solutions/2019-the-score-of-students-solving-math-expression.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 2019. The Score of Students Solving Math Expression
- * https://leetcode.com/problems/the-score-of-students-solving-math-expression/
- * Difficulty: Hard
- *
- * You are given a string s that contains digits 0-9, addition symbols '+', and multiplication
- * symbols '*' only, representing a valid math expression of single digit numbers (e.g., 3+5*2).
- * This expression was given to n elementary school students. The students were instructed to
- * get the answer of the expression by following this order of operations:
- * 1. Compute multiplication, reading from left to right; Then,
- * 2. Compute addition, reading from left to right.
- *
- * You are given an integer array answers of length n, which are the submitted answers of the
- * students in no particular order. You are asked to grade the answers, by following these rules:
- * - If an answer equals the correct answer of the expression, this student will be rewarded
- * 5 points;
- * - Otherwise, if the answer could be interpreted as if the student applied the operators in
- * the wrong order but had correct arithmetic, this student will be rewarded 2 points;
- * - Otherwise, this student will be rewarded 0 points.
- *
- * Return the sum of the points of the students.
- */
-
-/**
- * @param {string} s
- * @param {number[]} answers
- * @return {number}
- */
-var scoreOfStudents = function(s, answers) {
- const correct = eval(s.replace(/(\d)([*+])/g, '$1 $2 '));
-
- const n = s.length;
- const dp = new Map();
-
- function compute(start, end) {
- const key = `${start},${end}`;
- if (dp.has(key)) return dp.get(key);
-
- const results = new Set();
- if (start === end) {
- results.add(Number(s[start]));
- dp.set(key, results);
- return results;
- }
-
- for (let i = start + 1; i < end; i += 2) {
- const leftResults = compute(start, i - 1);
- const rightResults = compute(i + 1, end);
- const op = s[i];
-
- for (const left of leftResults) {
- for (const right of rightResults) {
- const val = op === '+' ? left + right : left * right;
- if (val <= 1000) results.add(val);
- }
- }
- }
-
- dp.set(key, results);
- return results;
- }
-
- const wrongAnswers = compute(0, n - 1);
- let result = 0;
-
- for (const answer of answers) {
- if (answer === correct) result += 5;
- else if (wrongAnswers.has(answer)) result += 2;
- }
-
- return result;
-};
diff --git a/solutions/2022-convert-1d-array-into-2d-array.js b/solutions/2022-convert-1d-array-into-2d-array.js
deleted file mode 100644
index a550b710..00000000
--- a/solutions/2022-convert-1d-array-into-2d-array.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2022. Convert 1D Array Into 2D Array
- * https://leetcode.com/problems/convert-1d-array-into-2d-array/
- * Difficulty: Easy
- *
- * You are given a 0-indexed 1-dimensional (1D) integer array original, and two integers,
- * m and n. You are tasked with creating a 2-dimensional (2D) array with m rows and n
- * columns using all the elements from original.
- *
- * The elements from indices 0 to n - 1 (inclusive) of original should form the first row
- * of the constructed 2D array, the elements from indices n to 2 * n - 1 (inclusive) should
- * form the second row of the constructed 2D array, and so on.
- *
- * Return an m x n 2D array constructed according to the above procedure, or an empty 2D array
- * if it is impossible.
- */
-
-/**
- * @param {number[]} original
- * @param {number} m
- * @param {number} n
- * @return {number[][]}
- */
-var construct2DArray = function(original, m, n) {
- if (original.length !== m * n) return [];
-
- const result = [];
- for (let i = 0; i < m; i++) {
- result.push(original.slice(i * n, (i + 1) * n));
- }
-
- return result;
-};
diff --git a/solutions/2023-number-of-pairs-of-strings-with-concatenation-equal-to-target.js b/solutions/2023-number-of-pairs-of-strings-with-concatenation-equal-to-target.js
deleted file mode 100644
index f2e98de0..00000000
--- a/solutions/2023-number-of-pairs-of-strings-with-concatenation-equal-to-target.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2023. Number of Pairs of Strings With Concatenation Equal to Target
- * https://leetcode.com/problems/number-of-pairs-of-strings-with-concatenation-equal-to-target/
- * Difficulty: Medium
- *
- * Given an array of digit strings nums and a digit string target, return the number of pairs of
- * indices (i, j) (where i != j) such that the concatenation of nums[i] + nums[j] equals target.
- */
-
-/**
- * @param {string[]} nums
- * @param {string} target
- * @return {number}
- */
-var numOfPairs = function(nums, target) {
- const map = new Map();
- let result = 0;
-
- for (const num of nums) {
- if (target.startsWith(num)) {
- const suffix = target.slice(num.length);
- result += map.get(suffix) || 0;
- }
- if (target.endsWith(num)) {
- const prefix = target.slice(0, target.length - num.length);
- result += map.get(prefix) || 0;
- }
- map.set(num, (map.get(num) || 0) + 1);
- }
-
- return result;
-};
diff --git a/solutions/2024-maximize-the-confusion-of-an-exam.js b/solutions/2024-maximize-the-confusion-of-an-exam.js
deleted file mode 100644
index f79d25b1..00000000
--- a/solutions/2024-maximize-the-confusion-of-an-exam.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2024. Maximize the Confusion of an Exam
- * https://leetcode.com/problems/maximize-the-confusion-of-an-exam/
- * Difficulty: Medium
- *
- * A teacher is writing a test with n true/false questions, with 'T' denoting true and 'F' denoting
- * false. He wants to confuse the students by maximizing the number of consecutive questions with
- * the same answer (multiple trues or multiple falses in a row).
- *
- * You are given a string answerKey, where answerKey[i] is the original answer to the ith question.
- * In addition, you are given an integer k, the maximum number of times you may perform the
- * following operation:
- * - Change the answer key for any question to 'T' or 'F' (i.e., set answerKey[i] to 'T' or 'F').
- *
- * Return the maximum number of consecutive 'T's or 'F's in the answer key after performing the
- * operation at most k times.
- */
-
-/**
- * @param {string} answerKey
- * @param {number} k
- * @return {number}
- */
-var maxConsecutiveAnswers = function(answerKey, k) {
- const flipsLeft = k;
- const count = { T: 0, F: 0 };
- let result = 0;
- let left = 0;
-
- for (let right = 0; right < answerKey.length; right++) {
- count[answerKey[right]]++;
- const maxCount = Math.max(count.T, count.F);
-
- while (right - left + 1 - maxCount > flipsLeft) {
- count[answerKey[left]]--;
- left++;
- }
-
- result = Math.max(result, right - left + 1);
- }
-
- return result;
-};
diff --git a/solutions/2025-maximum-number-of-ways-to-partition-an-array.js b/solutions/2025-maximum-number-of-ways-to-partition-an-array.js
deleted file mode 100644
index 2e28cd39..00000000
--- a/solutions/2025-maximum-number-of-ways-to-partition-an-array.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 2025. Maximum Number of Ways to Partition an Array
- * https://leetcode.com/problems/maximum-number-of-ways-to-partition-an-array/
- * Difficulty: Hard
- *
- * You are given a 0-indexed integer array nums of length n. The number of ways to partition
- * nums is the number of pivot indices that satisfy both conditions:
- * - 1 <= pivot < n
- * - nums[0] + nums[1] + ... + nums[pivot - 1] == nums[pivot] + nums[pivot + 1] + ... + nums[n - 1]
- *
- * You are also given an integer k. You can choose to change the value of one element of nums to
- * k, or to leave the array unchanged.
- *
- * Return the maximum possible number of ways to partition nums to satisfy both conditions after
- * changing at most one element.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var waysToPartition = function(nums, k) {
- const n = nums.length;
- const prefixSums = [nums[0]];
- const leftDiffs = new Map();
- const rightDiffs = new Map();
-
- for (let i = 1; i < n; i++) {
- prefixSums[i] = prefixSums[i - 1] + nums[i];
- const diff = prefixSums[i - 1];
- rightDiffs.set(diff, (rightDiffs.get(diff) || 0) + 1);
- }
-
- const totalSum = prefixSums[n - 1];
- let result = totalSum % 2 === 0 ? (rightDiffs.get(totalSum / 2) || 0) : 0;
-
- for (let i = 0; i < n; i++) {
- const delta = k - nums[i];
- const newTotalSum = totalSum + delta;
-
- if (newTotalSum % 2 === 0) {
- const targetSum = newTotalSum / 2;
- const waysFromLeft = leftDiffs.get(targetSum) || 0;
- const waysFromRight = rightDiffs.get(targetSum - delta) || 0;
- result = Math.max(result, waysFromLeft + waysFromRight);
- }
-
- if (i < n - 1) {
- const currentDiff = prefixSums[i];
- leftDiffs.set(currentDiff, (leftDiffs.get(currentDiff) || 0) + 1);
- rightDiffs.set(currentDiff, rightDiffs.get(currentDiff) - 1);
- }
- }
-
- return result;
-};
diff --git a/solutions/2028-find-missing-observations.js b/solutions/2028-find-missing-observations.js
deleted file mode 100644
index 29296fbc..00000000
--- a/solutions/2028-find-missing-observations.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 2028. Find Missing Observations
- * https://leetcode.com/problems/find-missing-observations/
- * Difficulty: Medium
- *
- * You have observations of n + m 6-sided dice rolls with each face numbered from 1 to 6. n
- * of the observations went missing, and you only have the observations of m rolls.
- * Fortunately, you have also calculated the average value of the n + m rolls.
- *
- * You are given an integer array rolls of length m where rolls[i] is the value of the ith
- * observation. You are also given the two integers mean and n.
- *
- * Return an array of length n containing the missing observations such that the average
- * value of the n + m rolls is exactly mean. If there are multiple valid answers, return
- * any of them. If no such array exists, return an empty array.
- *
- * The average value of a set of k numbers is the sum of the numbers divided by k.
- *
- * Note that mean is an integer, so the sum of the n + m rolls should be divisible by n + m.
- */
-
-/**
- * @param {number[]} rolls
- * @param {number} mean
- * @param {number} n
- * @return {number[]}
- */
-var missingRolls = function(rolls, mean, n) {
- const totalRolls = rolls.length + n;
- const targetSum = mean * totalRolls;
- const currentSum = rolls.reduce((sum, roll) => sum + roll, 0);
- const missingSum = targetSum - currentSum;
-
- if (missingSum < n || missingSum > 6 * n) return [];
-
- const baseValue = Math.floor(missingSum / n);
- const remainder = missingSum % n;
- const result = [];
-
- for (let i = 0; i < n; i++) {
- if (i < remainder) {
- result.push(baseValue + 1);
- } else {
- result.push(baseValue);
- }
- }
-
- return result;
-};
diff --git a/solutions/2029-stone-game-ix.js b/solutions/2029-stone-game-ix.js
deleted file mode 100644
index 31ea3bb8..00000000
--- a/solutions/2029-stone-game-ix.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2029. Stone Game IX
- * https://leetcode.com/problems/stone-game-ix/
- * Difficulty: Medium
- *
- * Alice and Bob continue their games with stones. There is a row of n stones, and each stone has
- * an associated value. You are given an integer array stones, where stones[i] is the value of the
- * ith stone.
- *
- * Alice and Bob take turns, with Alice starting first. On each turn, the player may remove any
- * stone from stones. The player who removes a stone loses if the sum of the values of all
- * removed stones is divisible by 3. Bob will win automatically if there are no remaining stones
- * (even if it is Alice's turn).
- *
- * Assuming both players play optimally, return true if Alice wins and false if Bob wins.
- */
-
-/**
- * @param {number[]} stones
- * @return {boolean}
- */
-var stoneGameIX = function(stones) {
- const remainderCount = [0, 0, 0];
- for (const stone of stones) {
- remainderCount[stone % 3]++;
- }
-
- if (remainderCount[0] % 2 === 0) {
- return remainderCount[1] >= 1 && remainderCount[2] >= 1;
- }
-
- return Math.abs(remainderCount[1] - remainderCount[2]) > 2;
-};
diff --git a/solutions/2030-smallest-k-length-subsequence-with-occurrences-of-a-letter.js b/solutions/2030-smallest-k-length-subsequence-with-occurrences-of-a-letter.js
deleted file mode 100644
index 9e3f916b..00000000
--- a/solutions/2030-smallest-k-length-subsequence-with-occurrences-of-a-letter.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * 2030. Smallest K-Length Subsequence With Occurrences of a Letter
- * https://leetcode.com/problems/smallest-k-length-subsequence-with-occurrences-of-a-letter/
- * Difficulty: Hard
- *
- * You are given a string s, an integer k, a letter letter, and an integer repetition.
- *
- * Return the lexicographically smallest subsequence of s of length k that has the letter
- * letter appear at least repetition times. The test cases are generated so that the letter
- * appears in s at least repetition times.
- *
- * A subsequence is a string that can be derived from another string by deleting some or no
- * characters without changing the order of the remaining characters.
- *
- * A string a is lexicographically smaller than a string b if in the first position where a
- * and b differ, string a has a letter that appears earlier in the alphabet than the
- * corresponding letter in b.
- */
-
-/**
- * @param {string} s
- * @param {number} k
- * @param {character} letter
- * @param {number} repetition
- * @return {string}
- */
-var smallestSubsequence = function(s, k, letter, repetition) {
- const n = s.length;
- let letterTotal = 0;
- for (let i = 0; i < n; i++) {
- if (s[i] === letter) letterTotal++;
- }
-
- const stack = [];
- let stackLetterCount = 0;
- let remainingCount = letterTotal;
-
- for (let i = 0; i < n; i++) {
- const char = s[i];
-
- if (char === letter) {
- remainingCount--;
- }
-
- while (
- stack.length > 0 && stack[stack.length - 1] > char && stack.length - 1 + (n - i) >= k
- && (stack[stack.length - 1] !== letter || stackLetterCount + remainingCount > repetition)
- ) {
- if (stack[stack.length - 1] === letter) {
- stackLetterCount--;
- }
- stack.pop();
- }
-
- if (stack.length < k) {
- if (char === letter) {
- stackLetterCount++;
- }
-
- const neededLetters = repetition - stackLetterCount;
- const remainingPositions = k - stack.length - 1;
- if (char === letter || remainingPositions >= neededLetters) {
- stack.push(char);
- }
- }
- }
-
- if (stackLetterCount < repetition) {
- let missingLetters = repetition - stackLetterCount;
- const result = [...stack];
-
- for (let i = k - 1; i >= 0 && missingLetters > 0; i--) {
- if (result[i] !== letter) {
- result[i] = letter;
- missingLetters--;
- }
- }
-
- return result.join('');
- }
-
- return stack.join('');
-};
diff --git a/solutions/2032-two-out-of-three.js b/solutions/2032-two-out-of-three.js
deleted file mode 100644
index 566e6033..00000000
--- a/solutions/2032-two-out-of-three.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2032. Two Out of Three
- * https://leetcode.com/problems/two-out-of-three/
- * Difficulty: Easy
- *
- * Given three integer arrays nums1, nums2, and nums3, return a distinct array containing all
- * the values that are present in at least two out of the three arrays. You may return the
- * values in any order.
- */
-
-/**
- * @param {number[]} nums1
- * @param {number[]} nums2
- * @param {number[]} nums3
- * @return {number[]}
- */
-var twoOutOfThree = function(nums1, nums2, nums3) {
- const set1 = new Set(nums1);
- const set2 = new Set(nums2);
- const set3 = new Set(nums3);
- const count = new Map();
-
- for (const num of set1) {
- count.set(num, (count.get(num) || 0) + 1);
- }
-
- for (const num of set2) {
- count.set(num, (count.get(num) || 0) + 1);
- }
-
- for (const num of set3) {
- count.set(num, (count.get(num) || 0) + 1);
- }
-
- const result = [];
- for (const [num, freq] of count) {
- if (freq >= 2) result.push(num);
- }
-
- return result;
-};
diff --git a/solutions/2033-minimum-operations-to-make-a-uni-value-grid.js b/solutions/2033-minimum-operations-to-make-a-uni-value-grid.js
deleted file mode 100644
index 64aec2bc..00000000
--- a/solutions/2033-minimum-operations-to-make-a-uni-value-grid.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2033. Minimum Operations to Make a Uni-Value Grid
- * https://leetcode.com/problems/minimum-operations-to-make-a-uni-value-grid/
- * Difficulty: Medium
- *
- * You are given a 2D integer grid of size m x n and an integer x. In one operation, you can add x
- * to or subtract x from any element in the grid.
- *
- * A uni-value grid is a grid where all the elements of it are equal.
- *
- * Return the minimum number of operations to make the grid uni-value. If it is not possible,
- * return -1.
- */
-
-/**
- * @param {number[][]} grid
- * @param {number} x
- * @return {number}
- */
-var minOperations = function(grid, x) {
- if (values.length === 1) return 0;
- const values = grid.flat();
- values.sort((a, b) => a - b);
- const median = values[Math.floor(values.length / 2)];
- let operations = 0;
-
- for (const value of values) {
- const diff = Math.abs(value - median);
- if (diff % x !== 0) return -1;
- operations += diff / x;
- }
-
- return operations;
-};
diff --git a/solutions/2035-partition-array-into-two-arrays-to-minimize-sum-difference.js b/solutions/2035-partition-array-into-two-arrays-to-minimize-sum-difference.js
deleted file mode 100644
index 1f3266b1..00000000
--- a/solutions/2035-partition-array-into-two-arrays-to-minimize-sum-difference.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * 2035. Partition Array Into Two Arrays to Minimize Sum Difference
- * https://leetcode.com/problems/partition-array-into-two-arrays-to-minimize-sum-difference/
- * Difficulty: Hard
- *
- * You are given an integer array nums of 2 * n integers. You need to partition nums into two arrays
- * of length n to minimize the absolute difference of the sums of the arrays. To partition nums,
- * put each element of nums into one of the two arrays.
- *
- * Return the minimum possible absolute difference.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minimumDifference = function(nums) {
- const n = nums.length / 2;
- let result = Infinity;
- const totalSum = nums.reduce((sum, num) => sum + num, 0);
- const firstHalfSubsets = new Map();
-
- for (let mask = 0; mask < (1 << n); mask++) {
- let size = 0;
- let subsetSum = 0;
-
- for (let i = 0; i < n; i++) {
- if ((mask & (1 << i)) !== 0) {
- size++;
- subsetSum += nums[i];
- }
- }
-
- if (!firstHalfSubsets.has(size)) {
- firstHalfSubsets.set(size, []);
- }
- firstHalfSubsets.get(size).push(subsetSum);
- }
-
- for (const [size, sums] of firstHalfSubsets) {
- sums.sort((a, b) => a - b);
- }
-
- for (let mask = 0; mask < (1 << n); mask++) {
- let size = 0;
- let secondHalfSum = 0;
-
- for (let i = 0; i < n; i++) {
- if ((mask & (1 << i)) !== 0) {
- size++;
- secondHalfSum += nums[n + i];
- }
- }
-
- const complementSize = n - size;
- const firstHalfSums = firstHalfSubsets.get(complementSize);
- const target = (totalSum - 2 * secondHalfSum) / 2;
- const closestIndex = binarySearch(firstHalfSums, target);
-
- if (closestIndex < firstHalfSums.length) {
- result = Math.min(
- result, Math.abs(totalSum - 2 * (secondHalfSum + firstHalfSums[closestIndex]))
- );
- }
-
- if (closestIndex > 0) {
- result = Math.min(
- result, Math.abs(totalSum - 2 * (secondHalfSum + firstHalfSums[closestIndex - 1]))
- );
- }
- }
-
- return result;
-};
-
-function binarySearch(arr, target) {
- let left = 0;
- let right = arr.length - 1;
-
- if (right < 0) return 0;
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
-
- if (arr[mid] < target) {
- left = mid + 1;
- } else {
- right = mid;
- }
- }
-
- return left;
-}
diff --git a/solutions/2038-remove-colored-pieces-if-both-neighbors-are-the-same-color.js b/solutions/2038-remove-colored-pieces-if-both-neighbors-are-the-same-color.js
deleted file mode 100644
index 7a42cfcb..00000000
--- a/solutions/2038-remove-colored-pieces-if-both-neighbors-are-the-same-color.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2038. Remove Colored Pieces if Both Neighbors are the Same Color
- * https://leetcode.com/problems/remove-colored-pieces-if-both-neighbors-are-the-same-color/
- * Difficulty: Medium
- *
- * There are n pieces arranged in a line, and each piece is colored either by 'A' or by 'B'.
- * You are given a string colors of length n where colors[i] is the color of the ith piece.
- *
- * Alice and Bob are playing a game where they take alternating turns removing pieces from the
- * line. In this game, Alice moves first.
- * - Alice is only allowed to remove a piece colored 'A' if both its neighbors are also colored
- * 'A'. She is not allowed to remove pieces that are colored 'B'.
- * - Bob is only allowed to remove a piece colored 'B' if both its neighbors are also colored
- * 'B'. He is not allowed to remove pieces that are colored 'A'.
- * - Alice and Bob cannot remove pieces from the edge of the line.
- * - If a player cannot make a move on their turn, that player loses and the other player wins.
- *
- * Assuming Alice and Bob play optimally, return true if Alice wins, or return false if Bob wins.
- */
-
-/**
- * @param {string} colors
- * @return {boolean}
- */
-var winnerOfGame = function(colors) {
- let aliceMoves = 0;
- let bobMoves = 0;
-
- for (let i = 1; i < colors.length - 1; i++) {
- if (colors[i] === 'A' && colors[i - 1] === 'A' && colors[i + 1] === 'A') {
- aliceMoves++;
- } else if (colors[i] === 'B' && colors[i - 1] === 'B' && colors[i + 1] === 'B') {
- bobMoves++;
- }
- }
-
- return aliceMoves > bobMoves;
-};
diff --git a/solutions/2039-the-time-when-the-network-becomes-idle.js b/solutions/2039-the-time-when-the-network-becomes-idle.js
deleted file mode 100644
index 38287340..00000000
--- a/solutions/2039-the-time-when-the-network-becomes-idle.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 2039. The Time When the Network Becomes Idle
- * https://leetcode.com/problems/the-time-when-the-network-becomes-idle/
- * Difficulty: Medium
- *
- * There is a network of n servers, labeled from 0 to n - 1. You are given a 2D integer array
- * edges, where edges[i] = [ui, vi] indicates there is a message channel between servers ui
- * and vi, and they can pass any number of messages to each other directly in one second.
- * You are also given a 0-indexed integer array patience of length n.
- *
- * All servers are connected, i.e., a message can be passed from one server to any other
- * server(s) directly or indirectly through the message channels.
- *
- * The server labeled 0 is the master server. The rest are data servers. Each data server
- * needs to send its message to the master server for processing and wait for a reply.
- * Messages move between servers optimally, so every message takes the least amount of
- * time to arrive at the master server. The master server will process all newly arrived
- * messages instantly and send a reply to the originating server via the reversed path
- * the message had gone through.
- *
- * At the beginning of second 0, each data server sends its message to be processed. Starting
- * from second 1, at the beginning of every second, each data server will check if it has
- * received a reply to the message it sent (including any newly arrived replies) from the
- * master server:
- * - If it has not, it will resend the message periodically. The data server i will resend
- * the message every patience[i] second(s), i.e., the data server i will resend the message
- * if patience[i] second(s) have elapsed since the last time the message was sent from this
- * server.
- * - Otherwise, no more resending will occur from this server.
- *
- * The network becomes idle when there are no messages passing between servers or arriving
- * at servers.
- *
- * Return the earliest second starting from which the network becomes idle.
- */
-
-/**
- * @param {number[][]} edges
- * @param {number[]} patience
- * @return {number}
- */
-var networkBecomesIdle = function(edges, patience) {
- const n = patience.length;
- const adjList = Array.from({ length: n }, () => []);
- for (const [u, v] of edges) {
- adjList[u].push(v);
- adjList[v].push(u);
- }
-
- const distances = new Array(n).fill(Infinity);
- distances[0] = 0;
- const queue = [0];
- let maxTime = 0;
-
- while (queue.length) {
- const curr = queue.shift();
- for (const next of adjList[curr]) {
- if (distances[next] === Infinity) {
- distances[next] = distances[curr] + 1;
- queue.push(next);
- if (next !== 0) {
- const roundTrip = 2 * distances[next];
- const lastSent = Math.floor((roundTrip - 1) / patience[next]) * patience[next];
- maxTime = Math.max(maxTime, lastSent + roundTrip);
- }
- }
- }
- }
-
- return maxTime + 1;
-};
diff --git a/solutions/2040-kth-smallest-product-of-two-sorted-arrays.js b/solutions/2040-kth-smallest-product-of-two-sorted-arrays.js
deleted file mode 100644
index 80a4da8c..00000000
--- a/solutions/2040-kth-smallest-product-of-two-sorted-arrays.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 2040. Kth Smallest Product of Two Sorted Arrays
- * https://leetcode.com/problems/kth-smallest-product-of-two-sorted-arrays/
- * Difficulty: Hard
- *
- * Given two sorted 0-indexed integer arrays nums1 and nums2 as well as an integer k, return
- * the kth (1-based) smallest product of nums1[i] * nums2[j] where 0 <= i < nums1.length
- * and 0 <= j < nums2.length.
- */
-
-/**
- * @param {number[]} nums1
- * @param {number[]} nums2
- * @param {number} k
- * @return {number}
- */
-var kthSmallestProduct = function(nums1, nums2, k) {
- function countProducts(maxProduct) {
- let count = 0;
- for (const num1 of nums1) {
- let left = 0;
- let right = nums2.length;
-
- if (num1 >= 0) {
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- if (num1 * nums2[mid] <= maxProduct) left = mid + 1;
- else right = mid;
- }
- count += left;
- } else {
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- if (num1 * nums2[mid] <= maxProduct) right = mid;
- else left = mid + 1;
- }
- count += nums2.length - left;
- }
- }
- return count;
- }
-
- let low = -(10 ** 10);
- let high = 10 ** 10;
-
- while (low < high) {
- const mid = Math.floor((low + high) / 2);
- if (countProducts(mid) >= k) high = mid;
- else low = mid + 1;
- }
-
- return low;
-};
diff --git a/solutions/2042-check-if-numbers-are-ascending-in-a-sentence.js b/solutions/2042-check-if-numbers-are-ascending-in-a-sentence.js
deleted file mode 100644
index 5b91979b..00000000
--- a/solutions/2042-check-if-numbers-are-ascending-in-a-sentence.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 2042. Check if Numbers Are Ascending in a Sentence
- * https://leetcode.com/problems/check-if-numbers-are-ascending-in-a-sentence/
- * Difficulty: Easy
- *
- * A sentence is a list of tokens separated by a single space with no leading or trailing spaces.
- * Every token is either a positive number consisting of digits 0-9 with no leading zeros, or a
- * word consisting of lowercase English letters.
- * - For example, "a puppy has 2 eyes 4 legs" is a sentence with seven tokens: "2" and "4" are
- * numbers and the other tokens such as "puppy" are words.
- *
- * Given a string s representing a sentence, you need to check if all the numbers in s are strictly
- * increasing from left to right (i.e., other than the last number, each number is strictly smaller
- * than the number on its right in s).
- *
- * Return true if so, or false otherwise.
- */
-
-/**
- * @param {string} s
- * @return {boolean}
- */
-var areNumbersAscending = function(s) {
- const numbers = s.split(' ').filter(token => !isNaN(token)).map(Number);
- for (let i = 1; i < numbers.length; i++) {
- if (numbers[i] <= numbers[i - 1]) return false;
- }
- return true;
-};
diff --git a/solutions/2043-simple-bank-system.js b/solutions/2043-simple-bank-system.js
deleted file mode 100644
index 3cb80cb1..00000000
--- a/solutions/2043-simple-bank-system.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 2043. Simple Bank System
- * https://leetcode.com/problems/simple-bank-system/
- * Difficulty: Medium
- *
- * You have been tasked with writing a program for a popular bank that will automate all its
- * incoming transactions (transfer, deposit, and withdraw). The bank has n accounts numbered
- * from 1 to n. The initial balance of each account is stored in a 0-indexed integer array
- * balance, with the (i + 1)th account having an initial balance of balance[i].
- *
- * Execute all the valid transactions. A transaction is valid if:
- * - The given account number(s) are between 1 and n, and
- * - The amount of money withdrawn or transferred from is less than or equal to the balance
- * of the account.
- *
- * Implement the Bank class:
- * - Bank(long[] balance) Initializes the object with the 0-indexed integer array balance.
- * - boolean transfer(int account1, int account2, long money) Transfers money dollars from the
- * account numbered account1 to the account numbered account2. Return true if the transaction
- * was successful, false otherwise.
- * - boolean deposit(int account, long money) Deposit money dollars into the account numbered
- * account. Return true if the transaction was successful, false otherwise.
- * - boolean withdraw(int account, long money) Withdraw money dollars from the account numbered
- * account. Return true if the transaction was successful, false otherwise.
- */
-
-/**
- * @param {number[]} balance
- */
-var Bank = function(balance) {
- this.accounts = balance;
-};
-
-/**
- * @param {number} account1
- * @param {number} account2
- * @param {number} money
- * @return {boolean}
- */
-Bank.prototype.transfer = function(account1, account2, money) {
- if (account1 > this.accounts.length || account2 > this.accounts.length) return false;
- if (this.accounts[account1 - 1] < money) return false;
-
- this.accounts[account1 - 1] -= money;
- this.accounts[account2 - 1] += money;
- return true;
-};
-
-/**
- * @param {number} account
- * @param {number} money
- * @return {boolean}
- */
-Bank.prototype.deposit = function(account, money) {
- if (account > this.accounts.length) return false;
-
- this.accounts[account - 1] += money;
- return true;
-};
-
-/**
- * @param {number} account
- * @param {number} money
- * @return {boolean}
- */
-Bank.prototype.withdraw = function(account, money) {
- if (account > this.accounts.length || this.accounts[account - 1] < money) return false;
-
- this.accounts[account - 1] -= money;
- return true;
-};
diff --git a/solutions/2044-count-number-of-maximum-bitwise-or-subsets.js b/solutions/2044-count-number-of-maximum-bitwise-or-subsets.js
deleted file mode 100644
index c318115a..00000000
--- a/solutions/2044-count-number-of-maximum-bitwise-or-subsets.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2044. Count Number of Maximum Bitwise-OR Subsets
- * https://leetcode.com/problems/count-number-of-maximum-bitwise-or-subsets/
- * Difficulty: Medium
- *
- * Given an integer array nums, find the maximum possible bitwise OR of a subset of nums and return
- * the number of different non-empty subsets with the maximum bitwise OR.
- *
- * An array a is a subset of an array b if a can be obtained from b by deleting some (possibly zero)
- * elements of b. Two subsets are considered different if the indices of the elements chosen are
- * different.
- *
- * The bitwise OR of an array a is equal to a[0] OR a[1] OR ... OR a[a.length - 1] (0-indexed).
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var countMaxOrSubsets = function(nums) {
- const maxOr = nums.reduce((or, num) => or | num, 0);
- let count = 0;
-
- backtrack(0, 0);
-
- return count;
-
- function backtrack(index, currentOr) {
- if (currentOr === maxOr) count++;
- for (let i = index; i < nums.length; i++) {
- backtrack(i + 1, currentOr | nums[i]);
- }
- }
-};
diff --git a/solutions/2045-second-minimum-time-to-reach-destination.js b/solutions/2045-second-minimum-time-to-reach-destination.js
deleted file mode 100644
index 522eabab..00000000
--- a/solutions/2045-second-minimum-time-to-reach-destination.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 2045. Second Minimum Time to Reach Destination
- * https://leetcode.com/problems/second-minimum-time-to-reach-destination/
- * Difficulty: Hard
- *
- * A city is represented as a bi-directional connected graph with n vertices where each vertex
- * is labeled from 1 to n (inclusive). The edges in the graph are represented as a 2D integer
- * array edges, where each edges[i] = [ui, vi] denotes a bi-directional edge between vertex
- * ui and vertex vi. Every vertex pair is connected by at most one edge, and no vertex has
- * an edge to itself. The time taken to traverse any edge is time minutes.
- *
- * Each vertex has a traffic signal which changes its color from green to red and vice versa
- * every change minutes. All signals change at the same time. You can enter a vertex at any
- * time, but can leave a vertex only when the signal is green. You cannot wait at a vertex
- * if the signal is green.
- *
- * The second minimum value is defined as the smallest value strictly larger than the minimum value.
- * - For example the second minimum value of [2, 3, 4] is 3, and the second minimum value of
- * [2, 2, 4] is 4.
- *
- * Given n, edges, time, and change, return the second minimum time it will take to go from
- * vertex 1 to vertex n.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @param {number} time
- * @param {number} change
- * @return {number}
- */
-var secondMinimum = function(n, edges, time, change) {
- const adjList = Array.from({ length: n + 1 }, () => []);
- for (const [u, v] of edges) {
- adjList[u].push(v);
- adjList[v].push(u);
- }
-
- const distances = Array.from({ length: n + 1 }, () => [Infinity, Infinity]);
- const queue = [[1, 0]];
- distances[1][0] = 0;
-
- while (queue.length) {
- const [node, currTime] = queue.shift();
-
- for (const next of adjList[node]) {
- const signalCycle = Math.floor(currTime / change);
- const isGreen = signalCycle % 2 === 0;
- let nextTime = currTime + time;
-
- if (!isGreen) {
- nextTime = (signalCycle + 1) * change + time;
- }
-
- if (nextTime < distances[next][0]) {
- distances[next][1] = distances[next][0];
- distances[next][0] = nextTime;
- queue.push([next, nextTime]);
- } else if (nextTime > distances[next][0] && nextTime < distances[next][1]) {
- distances[next][1] = nextTime;
- queue.push([next, nextTime]);
- }
- }
- }
-
- return distances[n][1];
-};
diff --git a/solutions/2048-next-greater-numerically-balanced-number.js b/solutions/2048-next-greater-numerically-balanced-number.js
deleted file mode 100644
index 523a302a..00000000
--- a/solutions/2048-next-greater-numerically-balanced-number.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2048. Next Greater Numerically Balanced Number
- * https://leetcode.com/problems/next-greater-numerically-balanced-number/
- * Difficulty: Medium
- *
- * An integer x is numerically balanced if for every digit d in the number x, there are exactly
- * d occurrences of that digit in x.
- *
- * Given an integer n, return the smallest numerically balanced number strictly greater than n.
- */
-
-/**
- * @param {number} n
- * @return {number}
- */
-var nextBeautifulNumber = function(n) {
- let candidate = n + 1;
- while (candidate <= 10000000) {
- if (isBalanced(candidate)) return candidate;
- candidate++;
- }
-
- return -1;
-
- function isBalanced(num) {
- const freq = new Array(10).fill(0);
- const str = num.toString();
-
- for (const digit of str) {
- freq[digit]++;
- }
-
- for (const digit of str) {
- if (freq[digit] !== parseInt(digit)) return false;
- }
-
- return true;
- }
-};
diff --git a/solutions/2049-count-nodes-with-the-highest-score.js b/solutions/2049-count-nodes-with-the-highest-score.js
deleted file mode 100644
index 1f13961e..00000000
--- a/solutions/2049-count-nodes-with-the-highest-score.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 2049. Count Nodes With the Highest Score
- * https://leetcode.com/problems/count-nodes-with-the-highest-score/
- * Difficulty: Medium
- *
- * There is a binary tree rooted at 0 consisting of n nodes. The nodes are labeled from 0 to n - 1.
- * You are given a 0-indexed integer array parents representing the tree, where parents[i] is the
- * parent of node i. Since node 0 is the root, parents[0] == -1.
- *
- * Each node has a score. To find the score of a node, consider if the node and the edges connected
- * to it were removed. The tree would become one or more non-empty subtrees. The size of a subtree
- * is the number of the nodes in it. The score of the node is the product of the sizes of all
- * those subtrees.
- *
- * Return the number of nodes that have the highest score.
- */
-
-/**
- * @param {number[]} parents
- * @return {number}
- */
-var countHighestScoreNodes = function(parents) {
- const n = parents.length;
- const children = Array.from({ length: n }, () => []);
- for (let i = 1; i < n; i++) {
- children[parents[i]].push(i);
- }
-
- const sizes = new Array(n).fill(0);
- let maxScore = 0n;
- let maxScoreCount = 0;
-
- calculateSize(0);
-
- return maxScoreCount;
-
- function calculateSize(node) {
- let leftSize = 0;
- let rightSize = 0;
-
- if (children[node].length > 0) leftSize = calculateSize(children[node][0]);
- if (children[node].length > 1) rightSize = calculateSize(children[node][1]);
-
- sizes[node] = leftSize + rightSize + 1;
-
- let score = 1n;
- if (leftSize > 0) score *= BigInt(leftSize);
- if (rightSize > 0) score *= BigInt(rightSize);
- const parentSize = n - sizes[node];
- if (parentSize > 0) score *= BigInt(parentSize);
-
- if (score > maxScore) {
- maxScore = score;
- maxScoreCount = 1;
- } else if (score === maxScore) {
- maxScoreCount++;
- }
-
- return sizes[node];
- }
-};
diff --git a/solutions/2050-parallel-courses-iii.js b/solutions/2050-parallel-courses-iii.js
deleted file mode 100644
index 62cdec65..00000000
--- a/solutions/2050-parallel-courses-iii.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 2050. Parallel Courses III
- * https://leetcode.com/problems/parallel-courses-iii/
- * Difficulty: Hard
- *
- * You are given an integer n, which indicates that there are n courses labeled from 1 to n.
- * You are also given a 2D integer array relations where relations[j] = [prevCoursej, nextCoursej]
- * denotes that course prevCoursej has to be completed before course nextCoursej (prerequisite
- * relationship). Furthermore, you are given a 0-indexed integer array time where time[i] denotes
- * how many months it takes to complete the (i+1)th course.
- *
- * You must find the minimum number of months needed to complete all the courses following these
- * rules:
- * - You may start taking a course at any time if the prerequisites are met.
- * - Any number of courses can be taken at the same time.
- *
- * Return the minimum number of months needed to complete all the courses.
- *
- * Note: The test cases are generated such that it is possible to complete every course (i.e., the
- * graph is a directed acyclic graph).
- */
-
-/**
- * @param {number} n
- * @param {number[][]} relations
- * @param {number[]} time
- * @return {number}
- */
-var minimumTime = function(n, relations, time) {
- const adjacencyList = Array.from({ length: n + 1 }, () => []);
- const inDegree = new Array(n + 1).fill(0);
- const completionTime = new Array(n + 1).fill(0);
-
- for (const [prev, next] of relations) {
- adjacencyList[prev].push(next);
- inDegree[next]++;
- }
-
- const queue = [];
- for (let i = 1; i <= n; i++) {
- if (inDegree[i] === 0) {
- queue.push(i);
- completionTime[i] = time[i - 1];
- }
- }
-
- while (queue.length) {
- const current = queue.shift();
- for (const next of adjacencyList[current]) {
- completionTime[next] = Math.max(
- completionTime[next],
- completionTime[current] + time[next - 1]
- );
- if (--inDegree[next] === 0) {
- queue.push(next);
- }
- }
- }
-
- return Math.max(...completionTime);
-};
diff --git a/solutions/2055-plates-between-candles.js b/solutions/2055-plates-between-candles.js
deleted file mode 100644
index 347ed4ae..00000000
--- a/solutions/2055-plates-between-candles.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 2055. Plates Between Candles
- * https://leetcode.com/problems/plates-between-candles/
- * Difficulty: Medium
- *
- * There is a long table with a line of plates and candles arranged on top of it. You are given
- * a 0-indexed string s consisting of characters '*' and '|' only, where a '*' represents a plate
- * and a '|' represents a candle.
- *
- * You are also given a 0-indexed 2D integer array queries where queries[i] = [lefti, righti]
- * denotes the substring s[lefti...righti] (inclusive). For each query, you need to find the
- * number of plates between candles that are in the substring. A plate is considered between
- * candles if there is at least one candle to its left and at least one candle to its right
- * in the substring.
- * - For example, s = "||**||**|*", and a query [3, 8] denotes the substring "*||**|". The number
- * of plates between candles in this substring is 2, as each of the two plates has at least one
- * candle in the substring to its left and right.
- *
- * Return an integer array answer where answer[i] is the answer to the ith query.
- */
-
-/**
- * @param {string} s
- * @param {number[][]} queries
- * @return {number[]}
- */
-var platesBetweenCandles = function(s, queries) {
- const n = s.length;
- const prefixPlates = new Array(n + 1).fill(0);
- const leftCandle = new Array(n).fill(-1);
- const rightCandle = new Array(n).fill(-1);
-
- for (let i = 0, candle = -1; i < n; i++) {
- prefixPlates[i + 1] = prefixPlates[i] + (s[i] === '*' ? 1 : 0);
- if (s[i] === '|') candle = i;
- leftCandle[i] = candle;
- }
-
- for (let i = n - 1, candle = -1; i >= 0; i--) {
- if (s[i] === '|') candle = i;
- rightCandle[i] = candle;
- }
-
- const result = new Array(queries.length).fill(0);
- for (let i = 0; i < queries.length; i++) {
- const [start, end] = queries[i];
- const left = rightCandle[start];
- const right = leftCandle[end];
- if (left !== -1 && right !== -1 && left < right) {
- result[i] = prefixPlates[right] - prefixPlates[left];
- }
- }
-
- return result;
-};
diff --git a/solutions/2056-number-of-valid-move-combinations-on-chessboard.js b/solutions/2056-number-of-valid-move-combinations-on-chessboard.js
deleted file mode 100644
index 94716f2b..00000000
--- a/solutions/2056-number-of-valid-move-combinations-on-chessboard.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * 2056. Number of Valid Move Combinations On Chessboard
- * https://leetcode.com/problems/number-of-valid-move-combinations-on-chessboard/
- * Difficulty: Hard
- *
- * There is an 8 x 8 chessboard containing n pieces (rooks, queens, or bishops). You are given a
- * string array pieces of length n, where pieces[i] describes the type (rook, queen, or bishop)
- * of the ith piece. In addition, you are given a 2D integer array positions also of length n,
- * where positions[i] = [ri, ci] indicates that the ith piece is currently at the 1-based
- * coordinate (ri, ci) on the chessboard.
- *
- * When making a move for a piece, you choose a destination square that the piece will travel
- * toward and stop on.
- * - A rook can only travel horizontally or vertically from (r, c) to the direction of (r+1, c),
- * (r-1, c), (r, c+1), or (r, c-1).
- * - A queen can only travel horizontally, vertically, or diagonally from (r, c) to the direction
- * of (r+1, c), (r-1, c), (r, c+1), (r, c-1), (r+1, c+1), (r+1, c-1), (r-1, c+1), (r-1, c-1).
- * - A bishop can only travel diagonally from (r, c) to the direction of (r+1, c+1), (r+1, c-1),
- * (r-1, c+1), (r-1, c-1).
- *
- * You must make a move for every piece on the board simultaneously. A move combination consists of
- * all the moves performed on all the given pieces. Every second, each piece will instantaneously
- * travel one square towards their destination if they are not already at it. All pieces start
- * traveling at the 0th second. A move combination is invalid if, at a given time, two or more
- * pieces occupy the same square.
- *
- * Return the number of valid move combinations.
- *
- * Notes:
- * - No two pieces will start in the same square.
- * - You may choose the square a piece is already on as its destination.
- * - If two pieces are directly adjacent to each other, it is valid for them to move past each other
- * and swap positions in one second.
- */
-
-/**
- * @param {string[]} pieces
- * @param {number[][]} positions
- * @return {number}
- */
-var countCombinations = function(pieces, positions) {
- const n = pieces.length;
- const directions = {
- rook: [[0, 1], [0, -1], [1, 0], [-1, 0]],
- bishop: [[1, 1], [1, -1], [-1, 1], [-1, -1]],
- queen: [[0, 1], [0, -1], [1, 0], [-1, 0], [1, 1], [1, -1], [-1, 1], [-1, -1]]
- };
-
- return generateCombinations(0, [], []);
-
- function isValidPosition(row, col) {
- return row >= 1 && row <= 8 && col >= 1 && col <= 8;
- }
-
- function simulateMoves(moves, steps) {
- const current = positions.map(([r, c]) => [r, c]);
- const maxSteps = Math.max(...steps);
-
- for (let t = 0; t <= maxSteps; t++) {
- const positionsAtTime = new Set();
- for (let i = 0; i < n; i++) {
- const [dr, dc] = moves[i];
- const step = Math.min(t, steps[i]);
- const newRow = current[i][0] + dr * step;
- const newCol = current[i][1] + dc * step;
-
- if (t > steps[i] && steps[i] > 0 && !isValidPosition(newRow, newCol)) continue;
-
- const posKey = `${newRow},${newCol}`;
- if (positionsAtTime.has(posKey)) return false;
- positionsAtTime.add(posKey);
- }
- }
-
- return true;
- }
-
- function generateCombinations(index, selectedMoves, selectedSteps) {
- if (index === n) {
- return simulateMoves(selectedMoves, selectedSteps) ? 1 : 0;
- }
-
- let total = 0;
- const [startRow, startCol] = positions[index];
- const pieceDirections = directions[pieces[index]];
-
- total += generateCombinations(index + 1, [...selectedMoves, [0, 0]], [...selectedSteps, 0]);
-
- for (const [dr, dc] of pieceDirections) {
- let row = startRow;
- let col = startCol;
- let step = 0;
-
- while (isValidPosition(row + dr, col + dc)) {
- row += dr;
- col += dc;
- step++;
- total += generateCombinations(
- index + 1,
- [...selectedMoves, [dr, dc]],
- [...selectedSteps, step]
- );
- }
- }
-
- return total;
- }
-};
diff --git a/solutions/2057-smallest-index-with-equal-value.js b/solutions/2057-smallest-index-with-equal-value.js
deleted file mode 100644
index 3fe1c453..00000000
--- a/solutions/2057-smallest-index-with-equal-value.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 2057. Smallest Index With Equal Value
- * https://leetcode.com/problems/smallest-index-with-equal-value/
- * Difficulty: Easy
- *
- * Given a 0-indexed integer array nums, return the smallest index i of nums such that i mod
- * 10 == nums[i], or -1 if such index does not exist.
- *
- * x mod y denotes the remainder when x is divided by y.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var smallestEqual = function(nums) {
- for (let i = 0; i < nums.length; i++) {
- if (i % 10 === nums[i]) {
- return i;
- }
- }
- return -1;
-};
diff --git a/solutions/2058-find-the-minimum-and-maximum-number-of-nodes-between-critical-points.js b/solutions/2058-find-the-minimum-and-maximum-number-of-nodes-between-critical-points.js
deleted file mode 100644
index da92ff90..00000000
--- a/solutions/2058-find-the-minimum-and-maximum-number-of-nodes-between-critical-points.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 2058. Find the Minimum and Maximum Number of Nodes Between Critical Points
- * https://leetcode.com/problems/find-the-minimum-and-maximum-number-of-nodes-between-critical-points/
- * Difficulty: Medium
- *
- * A critical point in a linked list is defined as either a local maxima or a local minima.
- *
- * A node is a local maxima if the current node has a value strictly greater than the previous node
- * and the next node.
- *
- * A node is a local minima if the current node has a value strictly smaller than the previous node
- * and the next node.
- *
- * Note that a node can only be a local maxima/minima if there exists both a previous node and a
- * next node.
- *
- * Given a linked list head, return an array of length 2 containing [minDistance, maxDistance]
- * where minDistance is the minimum distance between any two distinct critical points and
- * maxDistance is the maximum distance between any two distinct critical points. If there are
- * fewer than two critical points, return [-1, -1].
- */
-
-/**
- * Definition for singly-linked list.
- * function ListNode(val, next) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- */
-/**
- * @param {ListNode} head
- * @return {number[]}
- */
-var nodesBetweenCriticalPoints = function(head) {
- const criticalPositions = [];
- let position = 1;
- let prev = head;
- let current = head.next;
-
- while (current.next) {
- const next = current.next;
- if ((current.val > prev.val && current.val > next.val) ||
- (current.val < prev.val && current.val < next.val)) {
- criticalPositions.push(position);
- }
- prev = current;
- current = next;
- position++;
- }
-
- if (criticalPositions.length < 2) {
- return [-1, -1];
- }
-
- let minDistance = Infinity;
- for (let i = 1; i < criticalPositions.length; i++) {
- minDistance = Math.min(minDistance, criticalPositions[i] - criticalPositions[i - 1]);
- }
-
- const maxDistance = criticalPositions[criticalPositions.length - 1] - criticalPositions[0];
-
- return [minDistance, maxDistance];
-};
diff --git a/solutions/2059-minimum-operations-to-convert-number.js b/solutions/2059-minimum-operations-to-convert-number.js
deleted file mode 100644
index 677e5de9..00000000
--- a/solutions/2059-minimum-operations-to-convert-number.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 2059. Minimum Operations to Convert Number
- * https://leetcode.com/problems/minimum-operations-to-convert-number/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums containing distinct numbers, an integer start,
- * and an integer goal. There is an integer x that is initially set to start, and you want to
- * perform operations on x such that it is converted to goal. You can perform the following
- * operation repeatedly on the number x:
- *
- * If 0 <= x <= 1000, then for any index i in the array (0 <= i < nums.length), you can set x
- * to any of the following:
- * - x + nums[i]
- * - x - nums[i]
- * - x ^ nums[i] (bitwise-XOR)
- *
- * Note that you can use each nums[i] any number of times in any order. Operations that set x
- * to be out of the range 0 <= x <= 1000 are valid, but no more operations can be done afterward.
- *
- * Return the minimum number of operations needed to convert x = start into goal, and -1 if it
- * is not possible.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} start
- * @param {number} goal
- * @return {number}
- */
-var minimumOperations = function(nums, start, goal) {
- const queue = [[start, 0]];
- const visited = new Set([start]);
-
- while (queue.length) {
- const [current, steps] = queue.shift();
-
- for (const num of nums) {
- const candidates = [
- current + num,
- current - num,
- current ^ num
- ];
-
- for (const next of candidates) {
- if (next === goal) {
- return steps + 1;
- }
- if (next >= 0 && next <= 1000 && !visited.has(next)) {
- visited.add(next);
- queue.push([next, steps + 1]);
- }
- }
- }
- }
-
- return -1;
-};
diff --git a/solutions/2060-check-if-an-original-string-exists-given-two-encoded-strings.js b/solutions/2060-check-if-an-original-string-exists-given-two-encoded-strings.js
deleted file mode 100644
index 520e531e..00000000
--- a/solutions/2060-check-if-an-original-string-exists-given-two-encoded-strings.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 2060. Check if an Original String Exists Given Two Encoded Strings
- * https://leetcode.com/problems/check-if-an-original-string-exists-given-two-encoded-strings/
- * Difficulty: Hard
- *
- * An original string, consisting of lowercase English letters, can be encoded by the following
- * steps:
- * - Arbitrarily split it into a sequence of some number of non-empty substrings.
- * - Arbitrarily choose some elements (possibly none) of the sequence, and replace each with its
- * length (as a numeric string).
- * - Concatenate the sequence as the encoded string.
- *
- * For example, one way to encode an original string "abcdefghijklmnop" might be:
- * - Split it as a sequence: ["ab", "cdefghijklmn", "o", "p"].
- * - Choose the second and third elements to be replaced by their lengths, respectively. The
- * sequence becomes ["ab", "12", "1", "p"].
- * - Concatenate the elements of the sequence to get the encoded string: "ab121p".
- *
- * Given two encoded strings s1 and s2, consisting of lowercase English letters and digits 1-9
- * (inclusive), return true if there exists an original string that could be encoded as both s1
- * and s2. Otherwise, return false.
- *
- * Note: The test cases are generated such that the number of consecutive digits in s1 and s2
- * does not exceed 3.
- */
-
-/**
- * @param {string} s1
- * @param {string} s2
- * @return {boolean}
- */
-var possiblyEquals = function(s1, s2) {
- const memo = new Array(s1.length + 1).fill().map(() => new Array(s2.length + 1).fill()
- .map(() => ({})));
-
- function match(pos1, pos2, diff) {
- if (pos1 === s1.length && pos2 === s2.length) return diff === 0;
- if (memo[pos1][pos2][diff] !== undefined) return memo[pos1][pos2][diff];
-
- const char1 = s1[pos1];
- const char2 = s2[pos2];
-
- if (pos1 < s1.length && pos2 < s2.length && char1 === char2 && diff === 0) {
- if (match(pos1 + 1, pos2 + 1, 0)) return true;
- }
-
- if (pos1 < s1.length && isNaN(char1) && diff < 0) {
- if (match(pos1 + 1, pos2, diff + 1)) return true;
- }
-
- if (pos2 < s2.length && isNaN(char2) && diff > 0) {
- if (match(pos1, pos2 + 1, diff - 1)) return true;
- }
-
- let num = 0;
- for (let i = 0; i < 3 && pos1 + i < s1.length; i++) {
- if (isNaN(s1[pos1 + i])) break;
- num = num * 10 + parseInt(s1[pos1 + i]);
- if (match(pos1 + i + 1, pos2, diff + num)) return true;
- }
-
- num = 0;
- for (let i = 0; i < 3 && pos2 + i < s2.length; i++) {
- if (isNaN(s2[pos2 + i])) break;
- num = num * 10 + parseInt(s2[pos2 + i]);
- if (match(pos1, pos2 + i + 1, diff - num)) return true;
- }
-
- return memo[pos1][pos2][diff] = false;
- }
-
- return match(0, 0, 0);
-};
diff --git a/solutions/2062-count-vowel-substrings-of-a-string.js b/solutions/2062-count-vowel-substrings-of-a-string.js
deleted file mode 100644
index 8d427ac8..00000000
--- a/solutions/2062-count-vowel-substrings-of-a-string.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2062. Count Vowel Substrings of a String
- * https://leetcode.com/problems/count-vowel-substrings-of-a-string/
- * Difficulty: Easy
- *
- * A substring is a contiguous (non-empty) sequence of characters within a string.
- *
- * A vowel substring is a substring that only consists of vowels ('a', 'e', 'i', 'o', and 'u')
- * and has all five vowels present in it.
- *
- * Given a string word, return the number of vowel substrings in word.
- */
-
-/**
- * @param {string} word
- * @return {number}
- */
-var countVowelSubstrings = function(word) {
- const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
- let total = 0;
-
- for (let start = 0; start < word.length; start++) {
- const vowelCount = new Map();
- for (let end = start; end < word.length && vowels.has(word[end]); end++) {
- vowelCount.set(word[end], (vowelCount.get(word[end]) || 0) + 1);
- if (vowelCount.size === 5) {
- total++;
- }
- }
- }
-
- return total;
-};
diff --git a/solutions/2063-vowels-of-all-substrings.js b/solutions/2063-vowels-of-all-substrings.js
deleted file mode 100644
index bde705e8..00000000
--- a/solutions/2063-vowels-of-all-substrings.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * 2063. Vowels of All Substrings
- * https://leetcode.com/problems/vowels-of-all-substrings/
- * Difficulty: Medium
- *
- * Given a string word, return the sum of the number of vowels ('a', 'e', 'i', 'o', and 'u') in
- * every substring of word.
- *
- * A substring is a contiguous (non-empty) sequence of characters within a string.
- *
- * Note: Due to the large constraints, the answer may not fit in a signed 32-bit integer. Please
- * be careful during the calculations.
- */
-
-/**
- * @param {string} word
- * @return {number}
- */
-var countVowels = function(word) {
- const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
- let total = 0;
-
- for (let i = 0; i < word.length; i++) {
- if (vowels.has(word[i])) {
- total += (i + 1) * (word.length - i);
- }
- }
-
- return total;
-};
diff --git a/solutions/2064-minimized-maximum-of-products-distributed-to-any-store.js b/solutions/2064-minimized-maximum-of-products-distributed-to-any-store.js
deleted file mode 100644
index b1781081..00000000
--- a/solutions/2064-minimized-maximum-of-products-distributed-to-any-store.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 2064. Minimized Maximum of Products Distributed to Any Store
- * https://leetcode.com/problems/minimized-maximum-of-products-distributed-to-any-store/
- * Difficulty: Medium
- *
- * You are given an integer n indicating there are n specialty retail stores. There are m product
- * types of varying amounts, which are given as a 0-indexed integer array quantities, where
- * quantities[i] represents the number of products of the ith product type.
- *
- * You need to distribute all products to the retail stores following these rules:
- * - A store can only be given at most one product type but can be given any amount of it.
- * - After distribution, each store will have been given some number of products (possibly 0).
- * Let x represent the maximum number of products given to any store. You want x to be as small
- * as possible, i.e., you want to minimize the maximum number of products that are given to any
- * store.
- *
- * Return the minimum possible x.
- */
-
-/**
- * @param {number} n
- * @param {number[]} quantities
- * @return {number}
- */
-var minimizedMaximum = function(n, quantities) {
- let left = 1;
- let right = Math.max(...quantities);
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- let storesNeeded = 0;
-
- for (const quantity of quantities) {
- storesNeeded += Math.ceil(quantity / mid);
- }
-
- if (storesNeeded <= n) {
- right = mid;
- } else {
- left = mid + 1;
- }
- }
-
- return left;
-};
diff --git a/solutions/2065-maximum-path-quality-of-a-graph.js b/solutions/2065-maximum-path-quality-of-a-graph.js
deleted file mode 100644
index 9d07048c..00000000
--- a/solutions/2065-maximum-path-quality-of-a-graph.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 2065. Maximum Path Quality of a Graph
- * https://leetcode.com/problems/maximum-path-quality-of-a-graph/
- * Difficulty: Hard
- *
- * There is an undirected graph with n nodes numbered from 0 to n - 1 (inclusive). You are given a
- * 0-indexed integer array values where values[i] is the value of the ith node. You are also given
- * a 0-indexed 2D integer array edges, where each edges[j] = [uj, vj, timej] indicates that there
- * is an undirected edge between the nodes uj and vj, and it takes timej seconds to travel between
- * the two nodes. Finally, you are given an integer maxTime.
- *
- * A valid path in the graph is any path that starts at node 0, ends at node 0, and takes at most
- * maxTime seconds to complete. You may visit the same node multiple times. The quality of a valid
- * path is the sum of the values of the unique nodes visited in the path (each node's value is
- * added at most once to the sum).
- *
- * Return the maximum quality of a valid path.
- *
- * Note: There are at most four edges connected to each node.
- */
-
-/**
- * @param {number[]} values
- * @param {number[][]} edges
- * @param {number} maxTime
- * @return {number}
- */
-var maximalPathQuality = function(values, edges, maxTime) {
- const n = values.length;
- const adjList = Array.from({ length: n }, () => []);
-
- for (const [u, v, time] of edges) {
- adjList[u].push([v, time]);
- adjList[v].push([u, time]);
- }
-
- let result = 0;
- const initialVisited = new Set([0]);
-
- dfs(0, maxTime, values[0], initialVisited);
-
- return result;
-
- function dfs(node, timeLeft, quality, visited) {
- if (timeLeft < 0) return 0;
- if (node === 0) {
- result = Math.max(result, quality);
- }
-
- for (const [nextNode, travelTime] of adjList[node]) {
- const newVisited = new Set(visited);
- const newQuality = newVisited.has(nextNode) ? quality : quality + values[nextNode];
- newVisited.add(nextNode);
- dfs(nextNode, timeLeft - travelTime, newQuality, newVisited);
- }
-
- return result;
- }
-};
diff --git a/solutions/2068-check-whether-two-strings-are-almost-equivalent.js b/solutions/2068-check-whether-two-strings-are-almost-equivalent.js
deleted file mode 100644
index 210aeb88..00000000
--- a/solutions/2068-check-whether-two-strings-are-almost-equivalent.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 2068. Check Whether Two Strings are Almost Equivalent
- * https://leetcode.com/problems/check-whether-two-strings-are-almost-equivalent/
- * Difficulty: Easy
- *
- * Two strings word1 and word2 are considered almost equivalent if the differences between the
- * frequencies of each letter from 'a' to 'z' between word1 and word2 is at most 3.
- *
- * Given two strings word1 and word2, each of length n, return true if word1 and word2 are almost
- * equivalent, or false otherwise.
- *
- * The frequency of a letter x is the number of times it occurs in the string.
- */
-
-/**
- * @param {string} word1
- * @param {string} word2
- * @return {boolean}
- */
-var checkAlmostEquivalent = function(word1, word2) {
- const map = new Array(26).fill(0);
-
- for (let i = 0; i < word1.length; i++) {
- map[word1.charCodeAt(i) - 97]++;
- map[word2.charCodeAt(i) - 97]--;
- }
-
- return map.every(diff => Math.abs(diff) <= 3);
-};
diff --git a/solutions/2069-walking-robot-simulation-ii.js b/solutions/2069-walking-robot-simulation-ii.js
deleted file mode 100644
index e4896040..00000000
--- a/solutions/2069-walking-robot-simulation-ii.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 2069. Walking Robot Simulation II
- * https://leetcode.com/problems/walking-robot-simulation-ii/
- * Difficulty: Medium
- *
- * A width x height grid is on an XY-plane with the bottom-left cell at (0, 0) and the
- * top-right cell at (width - 1, height - 1). The grid is aligned with the four cardinal
- * directions ("North", "East", "South", and "West"). A robot is initially at cell (0, 0)
- * facing direction "East".
- *
- * The robot can be instructed to move for a specific number of steps. For each step, it does
- * the following.
- * 1. Attempts to move forward one cell in the direction it is facing.
- * 2. If the cell the robot is moving to is out of bounds, the robot instead turns 90 degrees
- * counterclockwise and retries the step.
- *
- * After the robot finishes moving the number of steps required, it stops and awaits the next
- * instruction.
- *
- * Implement the Robot class:
- * - Robot(int width, int height) Initializes the width x height grid with the robot at (0, 0)
- * facing "East".
- * - void step(int num) Instructs the robot to move forward num steps.
- * - int[] getPos() Returns the current cell the robot is at, as an array of length 2, [x, y].
- * - String getDir() Returns the current direction of the robot, "North", "East", "South", or
- * "West".
- */
-
-/**
- * @param {number} width
- * @param {number} height
- */
-var Robot = function(width, height) {
- this.width = width;
- this.height = height;
- this.position = [0, 0];
- this.directionIndex = 0;
- this.directions = ['East', 'North', 'West', 'South'];
- this.moves = [[1, 0], [0, 1], [-1, 0], [0, -1]];
- this.perimeter = 2 * (width + height - 2);
-};
-
-/**
- * @param {number} num
- * @return {void}
- */
-Robot.prototype.step = function(num) {
- num %= this.perimeter;
- if (num === 0) num = this.perimeter;
-
- while (num > 0) {
- const [dx, dy] = this.moves[this.directionIndex];
- const [x, y] = this.position;
- let steps;
-
- if (this.directionIndex === 0) steps = this.width - 1 - x;
- else if (this.directionIndex === 1) steps = this.height - 1 - y;
- else if (this.directionIndex === 2) steps = x;
- else steps = y;
-
- if (steps >= num) {
- this.position = [x + dx * num, y + dy * num];
- num = 0;
- } else {
- this.position = [x + dx * steps, y + dy * steps];
- this.directionIndex = (this.directionIndex + 1) % 4;
- num -= steps;
- }
- }
-};
-
-/**
- * @return {number[]}
- */
-Robot.prototype.getPos = function() {
- return this.position;
-};
-
-/**
- * @return {string}
- */
-Robot.prototype.getDir = function() {
- return this.directions[this.directionIndex];
-};
diff --git a/solutions/2070-most-beautiful-item-for-each-query.js b/solutions/2070-most-beautiful-item-for-each-query.js
deleted file mode 100644
index 1931e875..00000000
--- a/solutions/2070-most-beautiful-item-for-each-query.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 2070. Most Beautiful Item for Each Query
- * https://leetcode.com/problems/most-beautiful-item-for-each-query/
- * Difficulty: Medium
- *
- * You are given a 2D integer array items where items[i] = [pricei, beautyi] denotes the price and
- * beauty of an item respectively.
- *
- * You are also given a 0-indexed integer array queries. For each queries[j], you want to determine
- * the maximum beauty of an item whose price is less than or equal to queries[j]. If no such item
- * exists, then the answer to this query is 0.
- *
- * Return an array answer of the same length as queries where answer[j] is the answer to the jth
- * query.
- */
-
-/**
- * @param {number[][]} items
- * @param {number[]} queries
- * @return {number[]}
- */
-var maximumBeauty = function(items, queries) {
- items.sort((a, b) => a[0] - b[0]);
- const maxBeauty = [];
- let currentMax = 0;
-
- for (const [, beauty] of items) {
- currentMax = Math.max(currentMax, beauty);
- maxBeauty.push(currentMax);
- }
-
- const result = new Array(queries.length).fill(0);
-
- for (let i = 0; i < queries.length; i++) {
- const price = queries[i];
- let left = 0;
- let right = items.length - 1;
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
- if (items[mid][0] <= price) {
- left = mid + 1;
- } else {
- right = mid - 1;
- }
- }
-
- if (right >= 0) {
- result[i] = maxBeauty[right];
- }
- }
-
- return result;
-};
diff --git a/solutions/2071-maximum-number-of-tasks-you-can-assign.js b/solutions/2071-maximum-number-of-tasks-you-can-assign.js
deleted file mode 100644
index 5382d5d5..00000000
--- a/solutions/2071-maximum-number-of-tasks-you-can-assign.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 2071. Maximum Number of Tasks You Can Assign
- * https://leetcode.com/problems/maximum-number-of-tasks-you-can-assign/
- * Difficulty: Hard
- *
- * You have n tasks and m workers. Each task has a strength requirement stored in a 0-indexed
- * integer array tasks, with the ith task requiring tasks[i] strength to complete. The strength
- * of each worker is stored in a 0-indexed integer array workers, with the jth worker having
- * workers[j] strength. Each worker can only be assigned to a single task and must have a
- * strength greater than or equal to the task's strength requirement (i.e., workers[j] >= tasks[i]).
- *
- * Additionally, you have pills magical pills that will increase a worker's strength by strength.
- * You can decide which workers receive the magical pills, however, you may only give each worker
- * at most one magical pill.
- *
- * Given the 0-indexed integer arrays tasks and workers and the integers pills and strength,
- * return the maximum number of tasks that can be completed.
- */
-
-/**
- * @param {number[]} tasks
- * @param {number[]} workers
- * @param {number} pills
- * @param {number} strength
- * @return {number}
- */
-var maxTaskAssign = function(tasks, workers, pills, strength) {
- tasks.sort((a, b) => a - b);
- workers.sort((a, b) => a - b);
-
- const n = tasks.length;
- const m = workers.length;
-
- let left = 0;
- let right = Math.min(n, m);
-
- while (left < right) {
- const mid = Math.floor((left + right + 1) / 2);
-
- if (canAssign(mid)) {
- left = mid;
- } else {
- right = mid - 1;
- }
- }
-
- return left;
-
- function canAssign(k) {
- const availableTasks = tasks.slice(0, k);
- const availableWorkers = workers.slice(m - k);
- let remainingPills = pills;
-
- for (let i = k - 1; i >= 0; i--) {
- const task = availableTasks[i];
-
- if (availableWorkers[availableWorkers.length - 1] >= task) {
- availableWorkers.pop();
- continue;
- }
-
- if (remainingPills === 0) return false;
-
- let found = false;
- for (let j = 0; j < availableWorkers.length; j++) {
- if (availableWorkers[j] + strength >= task) {
- availableWorkers.splice(j, 1);
- remainingPills--;
- found = true;
- break;
- }
- }
-
- if (!found) return false;
- }
-
- return true;
- }
-};
diff --git a/solutions/2074-reverse-nodes-in-even-length-groups.js b/solutions/2074-reverse-nodes-in-even-length-groups.js
deleted file mode 100644
index 2608277e..00000000
--- a/solutions/2074-reverse-nodes-in-even-length-groups.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 2074. Reverse Nodes in Even Length Groups
- * https://leetcode.com/problems/reverse-nodes-in-even-length-groups/
- * Difficulty: Medium
- *
- * You are given the head of a linked list.
- *
- * The nodes in the linked list are sequentially assigned to non-empty groups whose lengths form
- * the sequence of the natural numbers (1, 2, 3, 4, ...). The length of a group is the number
- * of nodes assigned to it. In other words:
- * - The 1st node is assigned to the first group.
- * - The 2nd and the 3rd nodes are assigned to the second group.
- * - The 4th, 5th, and 6th nodes are assigned to the third group, and so on.
- *
- * Note that the length of the last group may be less than or equal to 1 + the length of the second
- * to last group.
- *
- * Reverse the nodes in each group with an even length, and return the head of the modified linked
- * list.
- */
-
-/**
- * Definition for singly-linked list.
- * function ListNode(val, next) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- */
-/**
- * @param {ListNode} head
- * @return {ListNode}
- */
-var reverseEvenLengthGroups = function(head) {
- let prevGroup = head;
- let groupLength = 2;
-
- while (prevGroup.next) {
- let count = 0;
- let current = prevGroup.next;
- const groupStart = current;
-
- while (current && count < groupLength) {
- current = current.next;
- count++;
- }
-
- if (count % 2 === 0) {
- prevGroup.next = reverseGroup(groupStart, count);
- }
-
- for (let i = 0; i < count; i++) {
- prevGroup = prevGroup.next;
- }
-
- groupLength++;
- }
-
- return head;
-
- function reverseGroup(start, length) {
- let prev = null;
- let current = start;
- for (let i = 0; i < length; i++) {
- const next = current.next;
- current.next = prev;
- prev = current;
- current = next;
- }
- start.next = current;
- return prev;
- }
-};
diff --git a/solutions/2075-decode-the-slanted-ciphertext.js b/solutions/2075-decode-the-slanted-ciphertext.js
deleted file mode 100644
index 63f5a41d..00000000
--- a/solutions/2075-decode-the-slanted-ciphertext.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 2075. Decode the Slanted Ciphertext
- * https://leetcode.com/problems/decode-the-slanted-ciphertext/
- * Difficulty: Medium
- *
- * A string originalText is encoded using a slanted transposition cipher to a string encodedText
- * with the help of a matrix having a fixed number of rows rows.
- *
- * originalText is placed first in a top-left to bottom-right manner.
- *
- * The blue cells are filled first, followed by the red cells, then the yellow cells, and so on,
- * until we reach the end of originalText. The arrow indicates the order in which the cells are
- * filled. All empty cells are filled with ' '. The number of columns is chosen such that the
- * rightmost column will not be empty after filling in originalText.
- *
- * encodedText is then formed by appending all characters of the matrix in a row-wise fashion.
- *
- * The characters in the blue cells are appended first to encodedText, then the red cells, and so
- * on, and finally the yellow cells. The arrow indicates the order in which the cells are accessed.
- *
- * For example, if originalText = "cipher" and rows = 3, then we encode it in the following manner.
- *
- * The blue arrows depict how originalText is placed in the matrix, and the red arrows denote the
- * order in which encodedText is formed. In the above example, encodedText = "ch ie pr".
- *
- * Given the encoded string encodedText and number of rows rows, return the original string
- * originalText.
- *
- * Note: originalText does not have any trailing spaces ' '. The test cases are generated such that
- * there is only one possible originalText.
- */
-
-/**
- * @param {string} encodedText
- * @param {number} rows
- * @return {string}
- */
-var decodeCiphertext = function(encodedText, rows) {
- if (rows === 1) return encodedText;
-
- const count = encodedText.length / rows;
- let result = '';
-
- for (let i = 0; i < count; i++) {
- for (let row = 0; row < rows && row + i < count; row++) {
- result += encodedText[row * count + i + row];
- }
- }
-
- return result.trimEnd();
-};
diff --git a/solutions/2076-process-restricted-friend-requests.js b/solutions/2076-process-restricted-friend-requests.js
deleted file mode 100644
index dff94d09..00000000
--- a/solutions/2076-process-restricted-friend-requests.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 2076. Process Restricted Friend Requests
- * https://leetcode.com/problems/process-restricted-friend-requests/
- * Difficulty: Hard
- *
- * You are given an integer n indicating the number of people in a network. Each person is
- * labeled from 0 to n - 1.
- *
- * You are also given a 0-indexed 2D integer array restrictions, where restrictions[i] = [xi, yi]
- * means that person xi and person yi cannot become friends, either directly or indirectly through
- * other people.
- *
- * Initially, no one is friends with each other. You are given a list of friend requests as a
- * 0-indexed 2D integer array requests, where requests[j] = [uj, vj] is a friend request between
- * person uj and person vj.
- *
- * A friend request is successful if uj and vj can be friends. Each friend request is processed
- * in the given order (i.e., requests[j] occurs before requests[j + 1]), and upon a successful
- * request, uj and vj become direct friends for all future friend requests.
- *
- * Return a boolean array result, where each result[j] is true if the jth friend request is
- * successful or false if it is not.
- *
- * Note: If uj and vj are already direct friends, the request is still successful.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} restrictions
- * @param {number[][]} requests
- * @return {boolean[]}
- */
-var friendRequests = function(n, restrictions, requests) {
- const parent = Array.from({ length: n }, (_, i) => i);
- const result = new Array(requests.length).fill(true);
-
- for (let j = 0; j < requests.length; j++) {
- const [u, v] = requests[j];
- const pu = find(u);
- const pv = find(v);
-
- let canBeFriends = true;
- for (const [x, y] of restrictions) {
- const px = find(x);
- const py = find(y);
- if ((pu === px && pv === py) || (pu === py && pv === px)) {
- canBeFriends = false;
- break;
- }
- }
-
- result[j] = canBeFriends;
- if (canBeFriends) {
- union(u, v);
- }
- }
-
- return result;
-
- function find(x) {
- if (parent[x] !== x) {
- parent[x] = find(parent[x]);
- }
- return parent[x];
- }
-
- function union(x, y) {
- parent[find(x)] = find(y);
- }
-};
diff --git a/solutions/2078-two-furthest-houses-with-different-colors.js b/solutions/2078-two-furthest-houses-with-different-colors.js
deleted file mode 100644
index 9a42b696..00000000
--- a/solutions/2078-two-furthest-houses-with-different-colors.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2078. Two Furthest Houses With Different Colors
- * https://leetcode.com/problems/two-furthest-houses-with-different-colors/
- * Difficulty: Easy
- *
- * There are n houses evenly lined up on the street, and each house is beautifully painted.
- * You are given a 0-indexed integer array colors of length n, where colors[i] represents
- * the color of the ith house.
- *
- * Return the maximum distance between two houses with different colors.
- *
- * The distance between the ith and jth houses is abs(i - j), where abs(x) is the absolute
- * value of x.
- */
-
-/**
- * @param {number[]} colors
- * @return {number}
- */
-var maxDistance = function(colors) {
- let result = 0;
-
- for (let i = 0; i < colors.length; i++) {
- for (let j = i + 1; j < colors.length; j++) {
- if (colors[i] !== colors[j]) {
- result = Math.max(result, j - i);
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2079-watering-plants.js b/solutions/2079-watering-plants.js
deleted file mode 100644
index ba77b302..00000000
--- a/solutions/2079-watering-plants.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2079. Watering Plants
- * https://leetcode.com/problems/watering-plants/
- * Difficulty: Medium
- *
- * You want to water n plants in your garden with a watering can. The plants are arranged in
- * a row and are labeled from 0 to n - 1 from left to right where the ith plant is located at
- * x = i. There is a river at x = -1 that you can refill your watering can at.
- *
- * Each plant needs a specific amount of water. You will water the plants in the following way:
- * - Water the plants in order from left to right.
- * - After watering the current plant, if you do not have enough water to completely water the
- * next plant, return to the river to fully refill the watering can.
- * - You cannot refill the watering can early.
- *
- * You are initially at the river (i.e., x = -1). It takes one step to move one unit on the x-axis.
- *
- * Given a 0-indexed integer array plants of n integers, where plants[i] is the amount of water
- * the ith plant needs, and an integer capacity representing the watering can capacity, return
- * the number of steps needed to water all the plants.
- */
-
-/**
- * @param {number[]} plants
- * @param {number} capacity
- * @return {number}
- */
-var wateringPlants = function(plants, capacity) {
- let water = capacity;
- let result = 0;
-
- for (let i = 0; i < plants.length; i++) {
- if (water < plants[i]) {
- result += 2 * i;
- water = capacity;
- }
- water -= plants[i];
- result++;
- }
-
- return result;
-};
diff --git a/solutions/2080-range-frequency-queries.js b/solutions/2080-range-frequency-queries.js
deleted file mode 100644
index 32b1bb27..00000000
--- a/solutions/2080-range-frequency-queries.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 2080. Range Frequency Queries
- * https://leetcode.com/problems/range-frequency-queries/
- * Difficulty: Medium
- *
- * Design a data structure to find the frequency of a given value in a given subarray.
- *
- * The frequency of a value in a subarray is the number of occurrences of that value in
- * the subarray.
- *
- * Implement the RangeFreqQuery class:
- * - RangeFreqQuery(int[] arr) Constructs an instance of the class with the given 0-indexed
- * integer array arr.
- * - int query(int left, int right, int value) Returns the frequency of value in the subarray
- * arr[left...right].
- * - A subarray is a contiguous sequence of elements within an array. arr[left...right] denotes
- * the subarray that contains the elements of nums between indices left and right (inclusive).
- */
-
-/**
- * @param {number[]} arr
- */
-var RangeFreqQuery = function(arr) {
- this.frequencyMap = new Map();
-
- for (let i = 0; i < arr.length; i++) {
- if (!this.frequencyMap.has(arr[i])) {
- this.frequencyMap.set(arr[i], []);
- }
- this.frequencyMap.get(arr[i]).push(i);
- }
-};
-
-/**
- * @param {number} left
- * @param {number} right
- * @param {number} value
- * @return {number}
- */
-RangeFreqQuery.prototype.query = function(left, right, value) {
- if (!this.frequencyMap.has(value)) return 0;
-
- const indices = this.frequencyMap.get(value);
- let start = 0;
- let end = indices.length - 1;
- let leftBound = -1;
- let rightBound = -1;
-
- while (start <= end) {
- const mid = Math.floor((start + end) / 2);
- if (indices[mid] >= left) {
- leftBound = mid;
- end = mid - 1;
- } else {
- start = mid + 1;
- }
- }
-
- start = 0;
- end = indices.length - 1;
- while (start <= end) {
- const mid = Math.floor((start + end) / 2);
- if (indices[mid] <= right) {
- rightBound = mid;
- start = mid + 1;
- } else {
- end = mid - 1;
- }
- }
-
- return leftBound === -1 || rightBound === -1 ? 0 : rightBound - leftBound + 1;
-};
diff --git a/solutions/2081-sum-of-k-mirror-numbers.js b/solutions/2081-sum-of-k-mirror-numbers.js
deleted file mode 100644
index 600d62d8..00000000
--- a/solutions/2081-sum-of-k-mirror-numbers.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * 2081. Sum of k-Mirror Numbers
- * https://leetcode.com/problems/sum-of-k-mirror-numbers/
- * Difficulty: Hard
- *
- * A k-mirror number is a positive integer without leading zeros that reads the same both forward
- * and backward in base-10 as well as in base-k.
- * - For example, 9 is a 2-mirror number. The representation of 9 in base-10 and base-2 are 9 and
- * 1001 respectively, which read the same both forward and backward.
- * - On the contrary, 4 is not a 2-mirror number. The representation of 4 in base-2 is 100, which
- * does not read the same both forward and backward.
- *
- * Given the base k and the number n, return the sum of the n smallest k-mirror numbers.
- */
-
-/**
- * @param {number} k
- * @param {number} n
- * @return {number}
- */
-var kMirror = function(k, n) {
- const kMirrorNumbers = [];
- let sum = 0;
- let length = 1;
-
- while (kMirrorNumbers.length < n) {
- generatePalindromes(length).forEach(num => {
- if (kMirrorNumbers.length < n && isKMirror(num, k)) {
- kMirrorNumbers.push(num);
- sum += num;
- }
- });
- length++;
- }
-
- return sum;
-};
-
-function toBaseK(num, k) {
- if (num === 0) return '0';
-
- let result = '';
- while (num > 0) {
- result = (num % k) + result;
- num = Math.floor(num / k);
- }
-
- return result;
-}
-
-function isKMirror(num, k) {
- const baseKRepresentation = toBaseK(num, k);
- return isPalindrome(baseKRepresentation);
-}
-
-function isPalindrome(str) {
- let left = 0;
- let right = str.length - 1;
-
- while (left < right) {
- if (str[left] !== str[right]) return false;
- left++;
- right--;
- }
-
- return true;
-}
-
-function generatePalindromes(length) {
- const palindromes = [];
-
- if (length === 1) {
- for (let i = 1; i <= 9; i++) {
- palindromes.push(i);
- }
- return palindromes;
- }
-
- if (length % 2 === 0) {
- const half = length / 2;
- const start = Math.pow(10, half - 1);
- const end = Math.pow(10, half) - 1;
-
- for (let i = start; i <= end; i++) {
- const firstHalf = i.toString();
- const secondHalf = firstHalf.split('').reverse().join('');
- palindromes.push(parseInt(firstHalf + secondHalf));
- }
- } else {
- const half = Math.floor(length / 2);
- const start = Math.pow(10, half);
- const end = Math.pow(10, half + 1) - 1;
-
- for (let i = start; i <= end; i++) {
- const withoutMiddle = Math.floor(i / 10);
- const middle = i % 10;
- const firstHalf = withoutMiddle.toString();
- const secondHalf = firstHalf.split('').reverse().join('');
- palindromes.push(parseInt(firstHalf + middle + secondHalf));
- }
- }
-
- return palindromes;
-}
-
diff --git a/solutions/2086-minimum-number-of-food-buckets-to-feed-the-hamsters.js b/solutions/2086-minimum-number-of-food-buckets-to-feed-the-hamsters.js
deleted file mode 100644
index 5cda9132..00000000
--- a/solutions/2086-minimum-number-of-food-buckets-to-feed-the-hamsters.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2086. Minimum Number of Food Buckets to Feed the Hamsters
- * https://leetcode.com/problems/minimum-number-of-food-buckets-to-feed-the-hamsters/
- * Difficulty: Medium
- *
- * You are given a 0-indexed string hamsters where hamsters[i] is either:
- * - 'H' indicating that there is a hamster at index i, or
- * - '.' indicating that index i is empty.
- *
- * You will add some number of food buckets at the empty indices in order to feed the hamsters.
- * A hamster can be fed if there is at least one food bucket to its left or to its right. More
- * formally, a hamster at index i can be fed if you place a food bucket at index i - 1 and/or
- * at index i + 1.
- *
- * Return the minimum number of food buckets you should place at empty indices to feed all the
- * hamsters or -1 if it is impossible to feed all of them.
- */
-
-/**
- * @param {string} hamsters
- * @return {number}
- */
-var minimumBuckets = function(hamsters) {
- const n = hamsters.length;
- let result = 0;
-
- for (let i = 0; i < n; i++) {
- if (hamsters[i] === 'H') {
- if (i > 0 && hamsters[i - 1] === 'B') continue;
- if (i < n - 1 && hamsters[i + 1] === '.') {
- result++;
- hamsters = hamsters.slice(0, i + 1) + 'B' + hamsters.slice(i + 2);
- } else if (i > 0 && hamsters[i - 1] === '.') {
- result++;
- hamsters = hamsters.slice(0, i - 1) + 'B' + hamsters.slice(i);
- } else {
- return -1;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2087-minimum-cost-homecoming-of-a-robot-in-a-grid.js b/solutions/2087-minimum-cost-homecoming-of-a-robot-in-a-grid.js
deleted file mode 100644
index 8fde0697..00000000
--- a/solutions/2087-minimum-cost-homecoming-of-a-robot-in-a-grid.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 2087. Minimum Cost Homecoming of a Robot in a Grid
- * https://leetcode.com/problems/minimum-cost-homecoming-of-a-robot-in-a-grid/
- * Difficulty: Medium
- *
- * There is an m x n grid, where (0, 0) is the top-left cell and (m - 1, n - 1) is the bottom-right
- * cell. You are given an integer array startPos where startPos = [startrow, startcol] indicates
- * that initially, a robot is at the cell (startrow, startcol). You are also given an integer array
- * homePos where homePos = [homerow, homecol] indicates that its home is at the cell (homerow,
- * homecol).
- *
- * The robot needs to go to its home. It can move one cell in four directions: left, right, up,
- * or down, and it can not move outside the boundary. Every move incurs some cost. You are further
- * given two 0-indexed integer arrays: rowCosts of length m and colCosts of length n.
- * - If the robot moves up or down into a cell whose row is r, then this move costs rowCosts[r].
- * - If the robot moves left or right into a cell whose column is c, then this move costs
- * colCosts[c].
- *
- * Return the minimum total cost for this robot to return home.
- */
-
-/**
- * @param {number[]} startPos
- * @param {number[]} homePos
- * @param {number[]} rowCosts
- * @param {number[]} colCosts
- * @return {number}
- */
-var minCost = function(startPos, homePos, rowCosts, colCosts) {
- let result = 0;
- const [startRow, startCol] = startPos;
- const [homeRow, homeCol] = homePos;
-
- const rowStep = startRow < homeRow ? 1 : -1;
- for (let row = startRow + rowStep; row !== homeRow + rowStep; row += rowStep) {
- result += rowCosts[row];
- }
-
- const colStep = startCol < homeCol ? 1 : -1;
- for (let col = startCol + colStep; col !== homeCol + colStep; col += colStep) {
- result += colCosts[col];
- }
-
- return result;
-};
diff --git a/solutions/2088-count-fertile-pyramids-in-a-land.js b/solutions/2088-count-fertile-pyramids-in-a-land.js
deleted file mode 100644
index 0780710b..00000000
--- a/solutions/2088-count-fertile-pyramids-in-a-land.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 2088. Count Fertile Pyramids in a Land
- * https://leetcode.com/problems/count-fertile-pyramids-in-a-land/
- * Difficulty: Hard
- *
- * A farmer has a rectangular grid of land with m rows and n columns that can be divided into
- * unit cells. Each cell is either fertile (represented by a 1) or barren (represented by a 0).
- * All cells outside the grid are considered barren.
- *
- * A pyramidal plot of land can be defined as a set of cells with the following criteria:
- * 1. The number of cells in the set has to be greater than 1 and all cells must be fertile.
- * 2. The apex of a pyramid is the topmost cell of the pyramid. The height of a pyramid is the
- * number of rows it covers. Let (r, c) be the apex of the pyramid, and its height be h.
- * Then, the plot comprises of cells (i, j) where r <= i <= r + h - 1 and
- * c - (i - r) <= j <= c + (i - r).
- *
- * An inverse pyramidal plot of land can be defined as a set of cells with similar criteria:
- * 1. The number of cells in the set has to be greater than 1 and all cells must be fertile.
- * 2. The apex of an inverse pyramid is the bottommost cell of the inverse pyramid. The height
- * of an inverse pyramid is the number of rows it covers. Let (r, c) be the apex of the
- * pyramid, and its height be h. Then, the plot comprises of cells (i, j) where
- * r - h + 1 <= i <= r and c - (r - i) <= j <= c + (r - i).
- *
- * Some examples of valid and invalid pyramidal (and inverse pyramidal) plots are shown below.
- * Black cells indicate fertile cells.
- *
- * Given a 0-indexed m x n binary matrix grid representing the farmland, return the total number
- * of pyramidal and inverse pyramidal plots that can be found in grid.
- */
-
-/**
- * @param {number[][]} grid
- * @return {number}
- */
-var countPyramids = function(grid) {
- const rows = grid.length;
- const cols = grid[0].length;
- let result = 0;
-
- for (let i = 0; i < rows; i++) {
- for (let j = 0; j < cols; j++) {
- if (grid[i][j] === 1) {
- result += countPyramidAt(i, j, false);
- result += countPyramidAt(i, j, true);
- }
- }
- }
-
- return result;
-
- function countPyramidAt(row, col, isInverse) {
- let height = 0;
- for (let h = 1; ; h++) {
- const r = isInverse ? row - h : row + h;
- if (r < 0 || r >= rows) break;
- const left = col - h;
- const right = col + h;
- if (left < 0 || right >= cols) break;
- let valid = true;
- for (let j = left; j <= right; j++) {
- if (grid[r][j] === 0) {
- valid = false;
- break;
- }
- }
- if (!valid) break;
- height++;
- }
- return height;
- }
-};
diff --git a/solutions/2089-find-target-indices-after-sorting-array.js b/solutions/2089-find-target-indices-after-sorting-array.js
deleted file mode 100644
index c7235faa..00000000
--- a/solutions/2089-find-target-indices-after-sorting-array.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2089. Find Target Indices After Sorting Array
- * https://leetcode.com/problems/find-target-indices-after-sorting-array/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums and a target element target.
- *
- * A target index is an index i such that nums[i] == target.
- *
- * Return a list of the target indices of nums after sorting nums in non-decreasing order.
- * If there are no target indices, return an empty list. The returned list must be sorted
- * in increasing order.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} target
- * @return {number[]}
- */
-var targetIndices = function(nums, target) {
- const result = [];
-
- nums.sort((a, b) => a - b);
-
- for (let i = 0; i < nums.length; i++) {
- if (nums[i] === target) {
- result.push(i);
- }
- }
-
- return result;
-};
diff --git a/solutions/2090-k-radius-subarray-averages.js b/solutions/2090-k-radius-subarray-averages.js
deleted file mode 100644
index 3808077d..00000000
--- a/solutions/2090-k-radius-subarray-averages.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2090. K Radius Subarray Averages
- * https://leetcode.com/problems/k-radius-subarray-averages/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array nums of n integers, and an integer k.
- *
- * The k-radius average for a subarray of nums centered at some index i with the radius k is
- * the average of all elements in nums between the indices i - k and i + k (inclusive). If
- * there are less than k elements before or after the index i, then the k-radius average is -1.
- *
- * Build and return an array avgs of length n where avgs[i] is the k-radius average for the
- * subarray centered at index i.
- *
- * The average of x elements is the sum of the x elements divided by x, using integer division.
- * The integer division truncates toward zero, which means losing its fractional part.
- * - For example, the average of four elements 2, 3, 1, and
- * 5 is (2 + 3 + 1 + 5) / 4 = 11 / 4 = 2.75, which truncates to 2.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number[]}
- */
-var getAverages = function(nums, k) {
- const n = nums.length;
- const windowSize = 2 * k + 1;
- const result = new Array(n).fill(-1);
-
- if (windowSize > n) return result;
-
- let sum = 0;
- for (let i = 0; i < windowSize; i++) {
- sum += nums[i];
- }
-
- result[k] = Math.floor(sum / windowSize);
-
- for (let i = k + 1; i < n - k; i++) {
- sum = sum - nums[i - k - 1] + nums[i + k];
- result[i] = Math.floor(sum / windowSize);
- }
-
- return result;
-};
diff --git a/solutions/2091-removing-minimum-and-maximum-from-array.js b/solutions/2091-removing-minimum-and-maximum-from-array.js
deleted file mode 100644
index b62e781e..00000000
--- a/solutions/2091-removing-minimum-and-maximum-from-array.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2091. Removing Minimum and Maximum From Array
- * https://leetcode.com/problems/removing-minimum-and-maximum-from-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array of distinct integers nums.
- *
- * There is an element in nums that has the lowest value and an element that has the highest
- * value. We call them the minimum and maximum respectively. Your goal is to remove both these
- * elements from the array.
- *
- * A deletion is defined as either removing an element from the front of the array or removing
- * an element from the back of the array.
- *
- * Return the minimum number of deletions it would take to remove both the minimum and maximum
- * element from the array.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minimumDeletions = function(nums) {
- const n = nums.length;
- let minIndex = 0;
- let maxIndex = 0;
-
- for (let i = 1; i < n; i++) {
- if (nums[i] < nums[minIndex]) minIndex = i;
- if (nums[i] > nums[maxIndex]) maxIndex = i;
- }
-
- const left = Math.min(minIndex, maxIndex);
- const right = Math.max(minIndex, maxIndex);
-
- return Math.min(
- right + 1,
- n - left,
- left + 1 + n - right
- );
-};
diff --git a/solutions/2092-find-all-people-with-secret.js b/solutions/2092-find-all-people-with-secret.js
deleted file mode 100644
index f5fecbdc..00000000
--- a/solutions/2092-find-all-people-with-secret.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 2092. Find All People With Secret
- * https://leetcode.com/problems/find-all-people-with-secret/
- * Difficulty: Hard
- *
- * You are given an integer n indicating there are n people numbered from 0 to n - 1. You are also
- * given a 0-indexed 2D integer array meetings where meetings[i] = [xi, yi, timei] indicates that
- * person xi and person yi have a meeting at timei. A person may attend multiple meetings at the
- * same time. Finally, you are given an integer firstPerson.
- *
- * Person 0 has a secret and initially shares the secret with a person firstPerson at time 0. This
- * secret is then shared every time a meeting takes place with a person that has the secret. More
- * formally, for every meeting, if a person xi has the secret at timei, then they will share the
- * secret with person yi, and vice versa.
- *
- * The secrets are shared instantaneously. That is, a person may receive the secret and share it
- * with people in other meetings within the same time frame.
- *
- * Return a list of all the people that have the secret after all the meetings have taken place.
- * You may return the answer in any order.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} meetings
- * @param {number} firstPerson
- * @return {number[]}
- */
-var findAllPeople = function(n, meetings, firstPerson) {
- const parent = Array.from({ length: n }, (_, i) => i);
-
- union(0, firstPerson);
- meetings.sort((a, b) => a[2] - b[2]);
-
- let i = 0;
- while (i < meetings.length) {
- const currentTime = meetings[i][2];
- const group = [];
-
- while (i < meetings.length && meetings[i][2] === currentTime) {
- const [x, y] = meetings[i];
- group.push(x, y);
- union(x, y);
- i++;
- }
-
- for (const person of group) {
- if (find(person) !== find(0)) {
- parent[person] = person;
- }
- }
- }
-
- const result = [];
- for (let j = 0; j < n; j++) {
- if (find(j) === find(0)) {
- result.push(j);
- }
- }
-
- return result;
-
- function find(x) {
- if (parent[x] !== x) {
- parent[x] = find(parent[x]);
- }
- return parent[x];
- }
-
- function union(x, y) {
- parent[find(x)] = find(y);
- }
-};
diff --git a/solutions/2094-finding-3-digit-even-numbers.js b/solutions/2094-finding-3-digit-even-numbers.js
deleted file mode 100644
index f021bdff..00000000
--- a/solutions/2094-finding-3-digit-even-numbers.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 2094. Finding 3-Digit Even Numbers
- * https://leetcode.com/problems/finding-3-digit-even-numbers/
- * Difficulty: Easy
- *
- * You are given an integer array digits, where each element is a digit. The array may contain
- * duplicates.
- *
- * You need to find all the unique integers that follow the given requirements:
- * - The integer consists of the concatenation of three elements from digits in any arbitrary order.
- * - The integer does not have leading zeros.
- * - The integer is even.
- *
- * For example, if the given digits were [1, 2, 3], integers 132 and 312 follow the requirements.
- *
- * Return a sorted array of the unique integers.
- */
-
-/**
- * @param {number[]} digits
- * @return {number[]}
- */
-var findEvenNumbers = function(digits) {
- const frequency = new Array(10).fill(0);
- const uniqueNumbers = new Set();
-
- for (const digit of digits) {
- frequency[digit]++;
- }
-
- for (let hundreds = 1; hundreds <= 9; hundreds++) {
- if (frequency[hundreds] === 0) continue;
- frequency[hundreds]--;
-
- for (let tens = 0; tens <= 9; tens++) {
- if (frequency[tens] === 0) continue;
- frequency[tens]--;
-
- for (let ones = 0; ones <= 8; ones += 2) {
- if (frequency[ones] === 0) continue;
- uniqueNumbers.add(hundreds * 100 + tens * 10 + ones);
- }
-
- frequency[tens]++;
- }
-
- frequency[hundreds]++;
- }
-
- return Array.from(uniqueNumbers).sort((a, b) => a - b);
-};
diff --git a/solutions/2095-delete-the-middle-node-of-a-linked-list.js b/solutions/2095-delete-the-middle-node-of-a-linked-list.js
deleted file mode 100644
index 92ff7870..00000000
--- a/solutions/2095-delete-the-middle-node-of-a-linked-list.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2095. Delete the Middle Node of a Linked List
- * https://leetcode.com/problems/delete-the-middle-node-of-a-linked-list/
- * Difficulty: Medium
- *
- * You are given the head of a linked list. Delete the middle node, and return the head
- * of the modified linked list.
- *
- * The middle node of a linked list of size n is the ⌊n / 2⌋th node from the start using
- * 0-based indexing, where ⌊x⌋ denotes the largest integer less than or equal to x.
- *
- * For n = 1, 2, 3, 4, and 5, the middle nodes are 0, 1, 1, 2, and 2, respectively.
- */
-
-/**
- * Definition for singly-linked list.
- * function ListNode(val, next) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- */
-/**
- * @param {ListNode} head
- * @return {ListNode}
- */
-var deleteMiddle = function(head) {
- let slow = new ListNode(0, head);
- let fast = head;
-
- if (!head.next) {
- return null;
- }
-
- while (fast && fast.next) {
- slow = slow.next;
- fast = fast.next.next;
- }
-
- slow.next = slow.next.next;
-
- return head;
-};
diff --git a/solutions/2096-step-by-step-directions-from-a-binary-tree-node-to-another.js b/solutions/2096-step-by-step-directions-from-a-binary-tree-node-to-another.js
deleted file mode 100644
index 4eb7d4e9..00000000
--- a/solutions/2096-step-by-step-directions-from-a-binary-tree-node-to-another.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 2096. Step-By-Step Directions From a Binary Tree Node to Another
- * https://leetcode.com/problems/step-by-step-directions-from-a-binary-tree-node-to-another/
- * Difficulty: Medium
- *
- * You are given the root of a binary tree with n nodes. Each node is uniquely assigned a value
- * from 1 to n. You are also given an integer startValue representing the value of the start node
- * s, and a different integer destValue representing the value of the destination node t.
- *
- * Find the shortest path starting from node s and ending at node t. Generate step-by-step
- * directions of such path as a string consisting of only the uppercase letters 'L', 'R', and
- * 'U'. Each letter indicates a specific direction:
- * - 'L' means to go from a node to its left child node.
- * - 'R' means to go from a node to its right child node.
- * - 'U' means to go from a node to its parent node.
- *
- * Return the step-by-step directions of the shortest path from node s to node t.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode} root
- * @param {number} startValue
- * @param {number} destValue
- * @return {string}
- */
-var getDirections = function(root, startValue, destValue) {
- const startPath = [];
- const destPath = [];
-
- findPath(root, startValue, startPath);
- findPath(root, destValue, destPath);
-
- let i = 0;
- while (i < startPath.length && i < destPath.length && startPath[i] === destPath[i]) {
- i++;
- }
-
- const upMoves = 'U'.repeat(startPath.length - i);
- const downMoves = destPath.slice(i).join('');
-
- return upMoves + downMoves;
-
- function findPath(node, value, path) {
- if (!node) return false;
- if (node.val === value) return true;
-
- path.push('L');
- if (findPath(node.left, value, path)) return true;
- path.pop();
-
- path.push('R');
- if (findPath(node.right, value, path)) return true;
- path.pop();
-
- return false;
- }
-};
diff --git a/solutions/2097-valid-arrangement-of-pairs.js b/solutions/2097-valid-arrangement-of-pairs.js
deleted file mode 100644
index d3c5ee1c..00000000
--- a/solutions/2097-valid-arrangement-of-pairs.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2097. Valid Arrangement of Pairs
- * https://leetcode.com/problems/valid-arrangement-of-pairs/
- * Difficulty: Hard
- *
- * You are given a 0-indexed 2D integer array pairs where pairs[i] = [starti, endi]. An arrangement
- * of pairs is valid if for every index i where 1 <= i < pairs.length, we have endi-1 == starti.
- *
- * Return any valid arrangement of pairs.
- *
- * Note: The inputs will be generated such that there exists a valid arrangement of pairs.
- */
-
-/**
- * @param {number[][]} pairs
- * @return {number[][]}
- */
-var validArrangement = function(pairs) {
- const graph = new Map();
- const degree = new Map();
-
- for (const [start, end] of pairs) {
- if (!graph.has(start)) graph.set(start, []);
- graph.get(start).push(end);
-
- degree.set(start, (degree.get(start) || 0) + 1);
- degree.set(end, (degree.get(end) || 0) - 1);
- }
-
- let startNode = pairs[0][0];
- for (const [node, deg] of degree) {
- if (deg > 0) {
- startNode = node;
- break;
- }
- }
-
- const result = [];
- helper(startNode);
-
- return result.reverse();
-
- function helper(node) {
- while (graph.get(node)?.length) {
- const next = graph.get(node).pop();
- helper(next);
- result.push([node, next]);
- }
- }
-};
diff --git a/solutions/2100-find-good-days-to-rob-the-bank.js b/solutions/2100-find-good-days-to-rob-the-bank.js
deleted file mode 100644
index 1dc59611..00000000
--- a/solutions/2100-find-good-days-to-rob-the-bank.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2100. Find Good Days to Rob the Bank
- * https://leetcode.com/problems/find-good-days-to-rob-the-bank/
- * Difficulty: Medium
- *
- * You and a gang of thieves are planning on robbing a bank. You are given a 0-indexed integer
- * array security, where security[i] is the number of guards on duty on the ith day. The days
- * are numbered starting from 0. You are also given an integer time.
- *
- * The ith day is a good day to rob the bank if:
- * - There are at least time days before and after the ith day,
- * - The number of guards at the bank for the time days before i are non-increasing, and
- * - The number of guards at the bank for the time days after i are non-decreasing.
- *
- * More formally, this means day i is a good day to rob the bank if and only if
- * security[i - time] >= security[i - time + 1] >= ... >= security[i]
- * <= ... <= security[i + time - 1] <= security[i + time].
- *
- * Return a list of all days (0-indexed) that are good days to rob the bank. The order that the
- * days are returned in does not matter.
- */
-
-/**
- * @param {number[]} security
- * @param {number} time
- * @return {number[]}
- */
-var goodDaysToRobBank = function(security, time) {
- const n = security.length;
- const nonIncreasing = new Array(n).fill(0);
- const nonDecreasing = new Array(n).fill(0);
- const result = [];
-
- for (let i = 1; i < n; i++) {
- if (security[i] <= security[i - 1]) {
- nonIncreasing[i] = nonIncreasing[i - 1] + 1;
- }
- if (security[n - i - 1] <= security[n - i]) {
- nonDecreasing[n - i - 1] = nonDecreasing[n - i] + 1;
- }
- }
-
- for (let i = time; i < n - time; i++) {
- if (nonIncreasing[i] >= time && nonDecreasing[i] >= time) {
- result.push(i);
- }
- }
-
- return result;
-};
diff --git a/solutions/2101-detonate-the-maximum-bombs.js b/solutions/2101-detonate-the-maximum-bombs.js
deleted file mode 100644
index 11069857..00000000
--- a/solutions/2101-detonate-the-maximum-bombs.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 2101. Detonate the Maximum Bombs
- * https://leetcode.com/problems/detonate-the-maximum-bombs/
- * Difficulty: Medium
- *
- * You are given a list of bombs. The range of a bomb is defined as the area where its effect
- * can be felt. This area is in the shape of a circle with the center as the location of the bomb.
- *
- * The bombs are represented by a 0-indexed 2D integer array bombs where bombs[i] = [xi, yi, ri].
- * xi and yi denote the X-coordinate and Y-coordinate of the location of the ith bomb, whereas ri
- * denotes the radius of its range.
- *
- * You may choose to detonate a single bomb. When a bomb is detonated, it will detonate all bombs
- * that lie in its range. These bombs will further detonate the bombs that lie in their ranges.
- *
- * Given the list of bombs, return the maximum number of bombs that can be detonated if you are
- * allowed to detonate only one bomb.
- */
-
-/**
- * @param {number[][]} bombs
- * @return {number}
- */
-var maximumDetonation = function(bombs) {
- const n = bombs.length;
- const graph = Array.from({ length: n }, () => []);
-
- for (let i = 0; i < n; i++) {
- const [x1, y1, r1] = bombs[i];
- for (let j = 0; j < n; j++) {
- if (i === j) continue;
- const [x2, y2] = bombs[j];
- const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
- if (distance <= r1) {
- graph[i].push(j);
- }
- }
- }
-
- let result = 0;
- for (let i = 0; i < n; i++) {
- result = Math.max(result, dfs(i, new Set()));
- }
-
- return result;
-
- function dfs(node, visited) {
- visited.add(node);
- let count = 1;
- for (const neighbor of graph[node]) {
- if (!visited.has(neighbor)) {
- count += dfs(neighbor, visited);
- }
- }
- return count;
- }
-};
diff --git a/solutions/2103-rings-and-rods.js b/solutions/2103-rings-and-rods.js
deleted file mode 100644
index b7cc219e..00000000
--- a/solutions/2103-rings-and-rods.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2103. Rings and Rods
- * https://leetcode.com/problems/rings-and-rods/
- * Difficulty: Easy
- *
- * There are n rings and each ring is either red, green, or blue. The rings are distributed across
- * ten rods labeled from 0 to 9.
- *
- * You are given a string rings of length 2n that describes the n rings that are placed onto the
- * rods. Every two characters in rings forms a color-position pair that is used to describe each
- * ring where:
- * - The first character of the ith pair denotes the ith ring's color ('R', 'G', 'B').
- * - The second character of the ith pair denotes the rod that the ith ring is placed on
- * ('0' to '9').
- *
- * For example, "R3G2B1" describes n == 3 rings: a red ring placed onto the rod labeled 3, a green
- * ring placed onto the rod labeled 2, and a blue ring placed onto the rod labeled 1.
- *
- * Return the number of rods that have all three colors of rings on them.
- */
-
-/**
- * @param {string} rings
- * @return {number}
- */
-var countPoints = function(rings) {
- const map = new Map();
-
- for (let i = 0; i < rings.length; i += 2) {
- const color = rings[i];
- const rod = rings[i + 1];
- if (!map.has(rod)) map.set(rod, new Set());
- map.get(rod).add(color);
- }
-
- let result = 0;
- for (const colors of map.values()) {
- if (colors.size === 3) result++;
- }
-
- return result;
-};
diff --git a/solutions/2104-sum-of-subarray-ranges.js b/solutions/2104-sum-of-subarray-ranges.js
deleted file mode 100644
index 0efaf1d7..00000000
--- a/solutions/2104-sum-of-subarray-ranges.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2104. Sum of Subarray Ranges
- * https://leetcode.com/problems/sum-of-subarray-ranges/
- * Difficulty: Medium
- *
- * You are given an integer array nums. The range of a subarray of nums is the difference between
- * the largest and smallest element in the subarray.
- *
- * Return the sum of all subarray ranges of nums.
- *
- * A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var subArrayRanges = function(nums) {
- let result = 0;
-
- for (let i = 0; i < nums.length; i++) {
- let min = nums[i];
- let max = nums[i];
-
- for (let j = i; j < nums.length; j++) {
- min = Math.min(min, nums[j]);
- max = Math.max(max, nums[j]);
- result += max - min;
- }
- }
-
- return result;
-};
diff --git a/solutions/2105-watering-plants-ii.js b/solutions/2105-watering-plants-ii.js
deleted file mode 100644
index dcdaf994..00000000
--- a/solutions/2105-watering-plants-ii.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 2105. Watering Plants II
- * https://leetcode.com/problems/watering-plants-ii/
- * Difficulty: Medium
- *
- * Alice and Bob want to water n plants in their garden. The plants are arranged in a row and are
- * labeled from 0 to n - 1 from left to right where the ith plant is located at x = i.
- *
- * Each plant needs a specific amount of water. Alice and Bob have a watering can each, initially
- * full. They water the plants in the following way:
- * - Alice waters the plants in order from left to right, starting from the 0th plant. Bob waters
- * the plants in order from right to left, starting from the (n - 1)th plant. They begin watering
- * the plants simultaneously.
- * - It takes the same amount of time to water each plant regardless of how much water it needs.
- * - Alice/Bob must water the plant if they have enough in their can to fully water it. Otherwise,
- * they first refill their can (instantaneously) then water the plant.
- * - In case both Alice and Bob reach the same plant, the one with more water currently in his/her
- * watering can should water this plant. If they have the same amount of water, then Alice should
- * water this plant.
- *
- * Given a 0-indexed integer array plants of n integers, where plants[i] is the amount of water the
- * ith plant needs, and two integers capacityA and capacityB representing the capacities of Alice's
- * and Bob's watering cans respectively, return the number of times they have to refill to water all
- * the plants.
- */
-
-/**
- * @param {number[]} plants
- * @param {number} capacityA
- * @param {number} capacityB
- * @return {number}
- */
-var minimumRefill = function(plants, capacityA, capacityB) {
- let result = 0;
- let left = 0;
- let right = plants.length - 1;
- let waterA = capacityA;
- let waterB = capacityB;
-
- while (left <= right) {
- if (left === right) {
- if (waterA >= waterB && waterA < plants[left]) result++;
- if (waterB > waterA && waterB < plants[right]) result++;
- break;
- }
-
- if (waterA < plants[left]) {
- waterA = capacityA;
- result++;
- }
- waterA -= plants[left++];
-
- if (waterB < plants[right]) {
- waterB = capacityB;
- result++;
- }
- waterB -= plants[right--];
- }
-
- return result;
-};
diff --git a/solutions/2106-maximum-fruits-harvested-after-at-most-k-steps.js b/solutions/2106-maximum-fruits-harvested-after-at-most-k-steps.js
deleted file mode 100644
index bd81e17e..00000000
--- a/solutions/2106-maximum-fruits-harvested-after-at-most-k-steps.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 2106. Maximum Fruits Harvested After at Most K Steps
- * https://leetcode.com/problems/maximum-fruits-harvested-after-at-most-k-steps/
- * Difficulty: Hard
- *
- * Fruits are available at some positions on an infinite x-axis. You are given a 2D integer array
- * fruits where fruits[i] = [positioni, amounti] depicts amounti fruits at the position positioni.
- * fruits is already sorted by positioni in ascending order, and each positioni is unique.
- *
- * You are also given an integer startPos and an integer k. Initially, you are at the position
- * startPos. From any position, you can either walk to the left or right. It takes one step to
- * move one unit on the x-axis, and you can walk at most k steps in total. For every position
- * you reach, you harvest all the fruits at that position, and the fruits will disappear from
- * that position.
- *
- * Return the maximum total number of fruits you can harvest.
- */
-
-/**
- * @param {number[][]} fruits
- * @param {number} startPos
- * @param {number} k
- * @return {number}
- */
-var maxTotalFruits = function(fruits, startPos, k) {
- let result = 0;
- let left = 0;
- let currentSum = 0;
-
- for (let right = 0; right < fruits.length; right++) {
- currentSum += fruits[right][1];
-
- while (left <= right) {
- const minPos = fruits[left][0];
- const maxPos = fruits[right][0];
- const steps = Math.min(
- Math.abs(startPos - minPos) + (maxPos - minPos),
- Math.abs(startPos - maxPos) + (maxPos - minPos)
- );
-
- if (steps <= k) break;
- currentSum -= fruits[left][1];
- left++;
- }
-
- if (left <= right) {
- result = Math.max(result, currentSum);
- }
- }
-
- return result;
-};
diff --git a/solutions/2108-find-first-palindromic-string-in-the-array.js b/solutions/2108-find-first-palindromic-string-in-the-array.js
deleted file mode 100644
index a72a02b0..00000000
--- a/solutions/2108-find-first-palindromic-string-in-the-array.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 2108. Find First Palindromic String in the Array
- * https://leetcode.com/problems/find-first-palindromic-string-in-the-array/
- * Difficulty: Easy
- *
- * Given an array of strings words, return the first palindromic string in the array. If there is
- * no such string, return an empty string "".
- *
- * A string is palindromic if it reads the same forward and backward.
- */
-
-/**
- * @param {string[]} words
- * @return {string}
- */
-var firstPalindrome = function(words) {
- for (const word of words) {
- if (word === word.split('').reverse().join('')) {
- return word;
- }
- }
- return '';
-};
diff --git a/solutions/2109-adding-spaces-to-a-string.js b/solutions/2109-adding-spaces-to-a-string.js
deleted file mode 100644
index 7f4a85ba..00000000
--- a/solutions/2109-adding-spaces-to-a-string.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2109. Adding Spaces to a String
- * https://leetcode.com/problems/adding-spaces-to-a-string/
- * Difficulty: Medium
- *
- * You are given a 0-indexed string s and a 0-indexed integer array spaces that describes the
- * indices in the original string where spaces will be added. Each space should be inserted
- * before the character at the given index.
- * - For example, given s = "EnjoyYourCoffee" and spaces = [5, 9], we place spaces before 'Y'
- * and 'C', which are at indices 5 and 9 respectively. Thus, we obtain "Enjoy Your Coffee".
- *
- * Return the modified string after the spaces have been added.
- */
-
-/**
- * @param {string} s
- * @param {number[]} spaces
- * @return {string}
- */
-var addSpaces = function(s, spaces) {
- let result = '';
- let spaceIndex = 0;
-
- for (let i = 0; i < s.length; i++) {
- if (spaceIndex < spaces.length && i === spaces[spaceIndex]) {
- result += ' ';
- spaceIndex++;
- }
- result += s[i];
- }
-
- return result;
-};
diff --git a/solutions/2110-number-of-smooth-descent-periods-of-a-stock.js b/solutions/2110-number-of-smooth-descent-periods-of-a-stock.js
deleted file mode 100644
index 09a08e95..00000000
--- a/solutions/2110-number-of-smooth-descent-periods-of-a-stock.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2110. Number of Smooth Descent Periods of a Stock
- * https://leetcode.com/problems/number-of-smooth-descent-periods-of-a-stock/
- * Difficulty: Medium
- *
- * You are given an integer array prices representing the daily price history of a stock,
- * where prices[i] is the stock price on the ith day.
- *
- * A smooth descent period of a stock consists of one or more contiguous days such that the
- * price on each day is lower than the price on the preceding day by exactly 1. The first
- * day of the period is exempted from this rule.
- *
- * Return the number of smooth descent periods.
- */
-
-/**
- * @param {number[]} prices
- * @return {number}
- */
-var getDescentPeriods = function(prices) {
- let result = 1;
- let currentLength = 1;
-
- for (let i = 1; i < prices.length; i++) {
- if (prices[i] === prices[i - 1] - 1) {
- currentLength++;
- } else {
- currentLength = 1;
- }
- result += currentLength;
- }
-
- return result;
-};
diff --git a/solutions/2111-minimum-operations-to-make-the-array-k-increasing.js b/solutions/2111-minimum-operations-to-make-the-array-k-increasing.js
deleted file mode 100644
index 8f861b84..00000000
--- a/solutions/2111-minimum-operations-to-make-the-array-k-increasing.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 2111. Minimum Operations to Make the Array K-Increasing
- * https://leetcode.com/problems/minimum-operations-to-make-the-array-k-increasing/
- * Difficulty: Hard
- *
- * You are given a 0-indexed array arr consisting of n positive integers, and a positive integer k.
- *
- * The array arr is called K-increasing if arr[i-k] <= arr[i] holds for every index i, where
- * k <= i <= n-1.
- *
- * - For example, arr = [4, 1, 5, 2, 6, 2] is K-increasing for k = 2 because:
- * - arr[0] <= arr[2] (4 <= 5)
- * - arr[1] <= arr[3] (1 <= 2)
- * - arr[2] <= arr[4] (5 <= 6)
- * - arr[3] <= arr[5] (2 <= 2)
- * - However, the same arr is not K-increasing for k = 1 (because arr[0] > arr[1]) or k = 3 (because
- * arr[0] > arr[3]).
- *
- * In one operation, you can choose an index i and change arr[i] into any positive integer.
- *
- * Return the minimum number of operations required to make the array K-increasing for the given k.
- */
-
-/**
- * @param {number[]} arr
- * @param {number} k
- * @return {number}
- */
-var kIncreasing = function(arr, k) {
- let result = 0;
- for (let i = 0; i < k; i++) {
- const subsequence = [];
- for (let j = i; j < arr.length; j += k) {
- subsequence.push(arr[j]);
- }
- result += longestNonDecreasingSubsequence(subsequence);
- }
-
- return result;
-
- function longestNonDecreasingSubsequence(nums) {
- const tails = [];
- for (const num of nums) {
- let left = 0;
- let right = tails.length;
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- if (tails[mid] <= num) {
- left = mid + 1;
- } else {
- right = mid;
- }
- }
- tails[left] = num;
- }
- return nums.length - tails.length;
- }
-};
diff --git a/solutions/2115-find-all-possible-recipes-from-given-supplies.js b/solutions/2115-find-all-possible-recipes-from-given-supplies.js
deleted file mode 100644
index a13ac28f..00000000
--- a/solutions/2115-find-all-possible-recipes-from-given-supplies.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 2115. Find All Possible Recipes from Given Supplies
- * https://leetcode.com/problems/find-all-possible-recipes-from-given-supplies/
- * Difficulty: Medium
- *
- * You have information about n different recipes. You are given a string array recipes and a 2D
- * string array ingredients. The ith recipe has the name recipes[i], and you can create it if you
- * have all the needed ingredients from ingredients[i]. A recipe can also be an ingredient for
- * other recipes, i.e., ingredients[i] may contain a string that is in recipes.
- *
- * You are also given a string array supplies containing all the ingredients that you initially
- * have, and you have an infinite supply of all of them.
- *
- * Return a list of all the recipes that you can create. You may return the answer in any order.
- *
- * Note that two recipes may contain each other in their ingredients.
- */
-
-/**
- * @param {string[]} recipes
- * @param {string[][]} ingredients
- * @param {string[]} supplies
- * @return {string[]}
- */
-var findAllRecipes = function(recipes, ingredients, supplies) {
- const available = new Set(supplies);
- const recipeGraph = new Map();
- const inDegree = new Map();
- const queue = [];
- const result = [];
-
- recipes.forEach((recipe, index) => {
- inDegree.set(recipe, ingredients[index].length);
- ingredients[index].forEach(ing => {
- if (!recipeGraph.has(ing)) recipeGraph.set(ing, []);
- recipeGraph.get(ing).push(recipe);
- });
- });
-
- available.forEach(supply => {
- if (recipeGraph.has(supply)) {
- recipeGraph.get(supply).forEach(recipe => {
- const count = inDegree.get(recipe) - 1;
- inDegree.set(recipe, count);
- if (count === 0) queue.push(recipe);
- });
- }
- });
-
- while (queue.length) {
- const currentRecipe = queue.shift();
- result.push(currentRecipe);
- if (recipeGraph.has(currentRecipe)) {
- recipeGraph.get(currentRecipe).forEach(nextRecipe => {
- const count = inDegree.get(nextRecipe) - 1;
- inDegree.set(nextRecipe, count);
- if (count === 0) queue.push(nextRecipe);
- });
- }
- }
-
- return result;
-};
diff --git a/solutions/2117-abbreviating-the-product-of-a-range.js b/solutions/2117-abbreviating-the-product-of-a-range.js
deleted file mode 100644
index 4334b25b..00000000
--- a/solutions/2117-abbreviating-the-product-of-a-range.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 2117. Abbreviating the Product of a Range
- * https://leetcode.com/problems/abbreviating-the-product-of-a-range/
- * Difficulty: Hard
- *
- * You are given two positive integers left and right with left <= right. Calculate the product of
- * all integers in the inclusive range [left, right].
- *
- * Since the product may be very large, you will abbreviate it following these steps:
- * 1. Count all trailing zeros in the product and remove them. Let us denote this count as C.
- * - For example, there are 3 trailing zeros in 1000, and there are 0 trailing zeros in 546.
- * 2. Denote the remaining number of digits in the product as d. If d > 10, then express the product
- * as ... where denotes the first 5 digits of the product, and denotes the
- * last 5 digits of the product after removing all trailing zeros. If d <= 10, we keep it
- * unchanged.
- * - For example, we express 1234567654321 as 12345...54321, but 1234567 is represented as
- * 1234567.
- * 3. Finally, represent the product as a string "...eC".
- * - For example, 12345678987600000 will be represented as "12345...89876e5".
- *
- * Return a string denoting the abbreviated product of all integers in the inclusive range [left,
- * right].
- */
-
-/**
- * @param {number} left
- * @param {number} right
- * @return {string}
- */
-var abbreviateProduct = function(left, right) {
- let zeros = 0;
- let count2 = 0;
- let count5 = 0;
-
- for (let i = left; i <= right; i++) {
- let n = i;
- while (n % 2 === 0) {
- count2++;
- n = Math.floor(n / 2);
- }
- n = i;
- while (n % 5 === 0) {
- count5++;
- n = Math.floor(n / 5);
- }
- }
- zeros = Math.min(count2, count5);
-
- let digits = 0;
- for (let i = left; i <= right; i++) {
- digits += Math.log10(i);
- }
- digits = Math.floor(digits) + 1;
-
- if (digits - zeros <= 10) {
- let product = 1n;
- for (let i = left; i <= right; i++) {
- product *= BigInt(i);
- }
- for (let i = 0; i < zeros; i++) {
- product /= 10n;
- }
- return product.toString() + 'e' + zeros;
- }
-
- let prefix = 1;
- for (let i = left; i <= right; i++) {
- prefix *= i;
- while (prefix >= 1e10) {
- prefix /= 10;
- }
- }
- prefix = prefix.toString().slice(0, 5);
-
- let suffix = 1n;
- for (let i = right; i >= left; i--) {
- suffix = (suffix * BigInt(i));
- while (suffix % 10n === 0n) {
- suffix /= 10n;
- }
- suffix = suffix % (10n ** 15n);
- }
-
- suffix = suffix.toString();
- while (suffix.length < 5) {
- suffix = '0' + suffix;
- }
- suffix = suffix.slice(-5);
-
- return prefix + '...' + suffix + 'e' + zeros;
-};
diff --git a/solutions/2119-a-number-after-a-double-reversal.js b/solutions/2119-a-number-after-a-double-reversal.js
deleted file mode 100644
index efc1d321..00000000
--- a/solutions/2119-a-number-after-a-double-reversal.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * 2119. A Number After a Double Reversal
- * https://leetcode.com/problems/a-number-after-a-double-reversal/
- * Difficulty: Easy
- *
- * Reversing an integer means to reverse all its digits.
- * - For example, reversing 2021 gives 1202. Reversing 12300 gives 321 as the leading zeros
- * are not retained.
- *
- * Given an integer num, reverse num to get reversed1, then reverse reversed1 to get reversed2.
- * Return true if reversed2 equals num. Otherwise return false.
- */
-
-/**
- * @param {number} num
- * @return {boolean}
- */
-var isSameAfterReversals = function(num) {
- return num === 0 || num % 10 !== 0;
-};
diff --git a/solutions/2120-execution-of-all-suffix-instructions-staying-in-a-grid.js b/solutions/2120-execution-of-all-suffix-instructions-staying-in-a-grid.js
deleted file mode 100644
index 940ddc72..00000000
--- a/solutions/2120-execution-of-all-suffix-instructions-staying-in-a-grid.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 2120. Execution of All Suffix Instructions Staying in a Grid
- * https://leetcode.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid/
- * Difficulty: Medium
- *
- * There is an n x n grid, with the top-left cell at (0, 0) and the bottom-right cell at
- * (n - 1, n - 1). You are given the integer n and an integer array startPos where
- * startPos = [startrow, startcol] indicates that a robot is initially at cell (startrow, startcol).
- *
- * You are also given a 0-indexed string s of length m where s[i] is the ith instruction for the
- * robot: 'L' (move left), 'R' (move right), 'U' (move up), and 'D' (move down).
- *
- * The robot can begin executing from any ith instruction in s. It executes the instructions one
- * by one towards the end of s but it stops if either of these conditions is met:
- * - The next instruction will move the robot off the grid.
- * - There are no more instructions left to execute.
- *
- * Return an array answer of length m where answer[i] is the number of instructions the robot can
- * execute if the robot begins executing from the ith instruction in s.
- */
-
-/**
- * @param {number} n
- * @param {number[]} startPos
- * @param {string} s
- * @return {number[]}
- */
-var executeInstructions = function(n, startPos, s) {
- const m = s.length;
- const result = new Array(m).fill(0);
-
- for (let i = 0; i < m; i++) {
- let row = startPos[0];
- let col = startPos[1];
- let steps = 0;
-
- for (let j = i; j < m; j++) {
- if (s[j] === 'L') col--;
- else if (s[j] === 'R') col++;
- else if (s[j] === 'U') row--;
- else row++;
-
- if (row < 0 || row >= n || col < 0 || col >= n) break;
- steps++;
- }
-
- result[i] = steps;
- }
-
- return result;
-};
diff --git a/solutions/2121-intervals-between-identical-elements.js b/solutions/2121-intervals-between-identical-elements.js
deleted file mode 100644
index 3686726b..00000000
--- a/solutions/2121-intervals-between-identical-elements.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 2121. Intervals Between Identical Elements
- * https://leetcode.com/problems/intervals-between-identical-elements/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array of n integers arr.
- *
- * The interval between two elements in arr is defined as the absolute difference between their
- * indices. More formally, the interval between arr[i] and arr[j] is |i - j|.
- *
- * Return an array intervals of length n where intervals[i] is the sum of intervals between arr[i]
- * and each element in arr with the same value as arr[i].
- *
- * Note: |x| is the absolute value of x.
- */
-
-/**
- * @param {number[]} arr
- * @return {number[]}
- */
-var getDistances = function(arr) {
- const valueIndices = new Map();
- const result = new Array(arr.length).fill(0);
-
- for (let i = 0; i < arr.length; i++) {
- if (!valueIndices.has(arr[i])) {
- valueIndices.set(arr[i], []);
- }
- valueIndices.get(arr[i]).push(i);
- }
-
- for (const indices of valueIndices.values()) {
- let prefixSum = 0;
- for (let i = 1; i < indices.length; i++) {
- prefixSum += indices[i] - indices[0];
- }
-
- result[indices[0]] = prefixSum;
-
- for (let i = 1; i < indices.length; i++) {
- const diff = indices[i] - indices[i - 1];
- prefixSum += diff * (i - (indices.length - i));
- result[indices[i]] = prefixSum;
- }
- }
-
- return result;
-};
diff --git a/solutions/2122-recover-the-original-array.js b/solutions/2122-recover-the-original-array.js
deleted file mode 100644
index 7b6030fb..00000000
--- a/solutions/2122-recover-the-original-array.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 2122. Recover the Original Array
- * https://leetcode.com/problems/recover-the-original-array/
- * Difficulty: Hard
- *
- * Alice had a 0-indexed array arr consisting of n positive integers. She chose an arbitrary
- * positive integer k and created two new 0-indexed integer arrays lower and higher in the
- * following manner:
- * 1. lower[i] = arr[i] - k, for every index i where 0 <= i < n
- * 2. higher[i] = arr[i] + k, for every index i where 0 <= i < n
- *
- * Unfortunately, Alice lost all three arrays. However, she remembers the integers that were
- * present in the arrays lower and higher, but not the array each integer belonged to. Help
- * Alice and recover the original array.
- *
- * Given an array nums consisting of 2n integers, where exactly n of the integers were present
- * in lower and the remaining in higher, return the original array arr. In case the answer is
- * not unique, return any valid array.
- *
- * Note: The test cases are generated such that there exists at least one valid array arr.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var recoverArray = function(nums) {
- const n = nums.length / 2;
- nums.sort((a, b) => a - b);
-
- for (let i = 1; i < 2 * n; i++) {
- const k = nums[i] - nums[0];
- if (k <= 0 || k % 2 !== 0) continue;
-
- const original = [];
- const used = new Array(2 * n).fill(false);
- let count = 0;
-
- for (let left = 0, right = i; right < 2 * n && count < n; right++) {
- while (left < right && used[left]) left++;
- if (left >= right) continue;
-
- if (nums[right] - nums[left] === k) {
- original.push(nums[left] + k / 2);
- used[left] = used[right] = true;
- count++;
- left++;
- }
- }
-
- if (count === n) return original;
- }
-
- return [];
-};
diff --git a/solutions/2124-check-if-all-as-appears-before-all-bs.js b/solutions/2124-check-if-all-as-appears-before-all-bs.js
deleted file mode 100644
index 57f06772..00000000
--- a/solutions/2124-check-if-all-as-appears-before-all-bs.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 2124. Check if All A's Appears Before All B's
- * https://leetcode.com/problems/check-if-all-as-appears-before-all-bs/
- * Difficulty: Easy
- *
- * Given a string s consisting of only the characters 'a' and 'b', return true if every 'a' appears
- * before every 'b' in the string. Otherwise, return false.
- */
-
-/**
- * @param {string} s
- * @return {boolean}
- */
-var checkString = function(s) {
- let seen = false;
-
- for (const char of s) {
- if (char === 'b') seen = true;
- else if (seen) return false;
- }
-
- return true;
-};
diff --git a/solutions/2125-number-of-laser-beams-in-a-bank.js b/solutions/2125-number-of-laser-beams-in-a-bank.js
deleted file mode 100644
index 58a8afb7..00000000
--- a/solutions/2125-number-of-laser-beams-in-a-bank.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2125. Number of Laser Beams in a Bank
- * https://leetcode.com/problems/number-of-laser-beams-in-a-bank/
- * Difficulty: Medium
- *
- * Anti-theft security devices are activated inside a bank. You are given a 0-indexed binary string
- * array bank representing the floor plan of the bank, which is an m x n 2D matrix. bank[i]
- * represents the ith row, consisting of '0's and '1's. '0' means the cell is empty, while'1'
- * means the cell has a security device.
- *
- * There is one laser beam between any two security devices if both conditions are met:
- * - The two devices are located on two different rows: r1 and r2, where r1 < r2.
- * - For each row i where r1 < i < r2, there are no security devices in the ith row.
- *
- * Laser beams are independent, i.e., one beam does not interfere nor join with another.
- *
- * Return the total number of laser beams in the bank.
- */
-
-/**
- * @param {string[]} bank
- * @return {number}
- */
-var numberOfBeams = function(bank) {
- let result = 0;
- let prevDevices = 0;
-
- for (const row of bank) {
- let currentDevices = 0;
- for (const cell of row) {
- if (cell === '1') currentDevices++;
- }
- if (currentDevices > 0) {
- result += prevDevices * currentDevices;
- prevDevices = currentDevices;
- }
- }
-
- return result;
-};
diff --git a/solutions/2126-destroying-asteroids.js b/solutions/2126-destroying-asteroids.js
deleted file mode 100644
index 8c0ff17e..00000000
--- a/solutions/2126-destroying-asteroids.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2126. Destroying Asteroids
- * https://leetcode.com/problems/destroying-asteroids/
- * Difficulty: Medium
- *
- * You are given an integer mass, which represents the original mass of a planet. You are further
- * given an integer array asteroids, where asteroids[i] is the mass of the ith asteroid.
- *
- * You can arrange for the planet to collide with the asteroids in any arbitrary order. If the mass
- * of the planet is greater than or equal to the mass of the asteroid, the asteroid is destroyed
- * and the planet gains the mass of the asteroid. Otherwise, the planet is destroyed.
- *
- * Return true if all asteroids can be destroyed. Otherwise, return false.
- */
-
-/**
- * @param {number} mass
- * @param {number[]} asteroids
- * @return {boolean}
- */
-var asteroidsDestroyed = function(mass, asteroids) {
- asteroids.sort((a, b) => a - b);
-
- let planetMass = BigInt(mass);
- for (const asteroid of asteroids) {
- if (planetMass < BigInt(asteroid)) return false;
- planetMass += BigInt(asteroid);
- }
-
- return true;
-};
diff --git a/solutions/2131-longest-palindrome-by-concatenating-two-letter-words.js b/solutions/2131-longest-palindrome-by-concatenating-two-letter-words.js
deleted file mode 100644
index 296b3bd0..00000000
--- a/solutions/2131-longest-palindrome-by-concatenating-two-letter-words.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 2131. Longest Palindrome by Concatenating Two Letter Words
- * https://leetcode.com/problems/longest-palindrome-by-concatenating-two-letter-words/
- * Difficulty: Medium
- *
- * You are given an array of strings words. Each element of words consists of two lowercase
- * English letters.
- *
- * Create the longest possible palindrome by selecting some elements from words and concatenating
- * them in any order. Each element can be selected at most once.
- *
- * Return the length of the longest palindrome that you can create. If it is impossible to create
- * any palindrome, return 0.
- *
- * A palindrome is a string that reads the same forward and backward.
- */
-
-/**
- * @param {string[]} words
- * @return {number}
- */
-var longestPalindrome = function(words) {
- const map = new Map();
- let length = 0;
- let hasCenter = false;
-
- for (const word of words) {
- map.set(word, (map.get(word) || 0) + 1);
- }
-
- for (const word of map.keys()) {
- const reverse = word[1] + word[0];
-
- if (word === reverse) {
- const count = map.get(word);
- length += Math.floor(count / 2) * 4;
- if (count % 2 === 1) hasCenter = true;
- } else if (map.has(reverse)) {
- const pairs = Math.min(map.get(word), map.get(reverse));
- length += pairs * 4;
- map.set(word, 0);
- map.set(reverse, 0);
- }
- }
-
- return hasCenter ? length + 2 : length;
-};
diff --git a/solutions/2132-stamping-the-grid.js b/solutions/2132-stamping-the-grid.js
deleted file mode 100644
index 3143e1e3..00000000
--- a/solutions/2132-stamping-the-grid.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 2132. Stamping the Grid
- * https://leetcode.com/problems/stamping-the-grid/
- * Difficulty: Hard
- *
- * You are given an m x n binary matrix grid where each cell is either 0 (empty) or 1 (occupied).
- *
- * You are then given stamps of size stampHeight x stampWidth. We want to fit the stamps such that
- * they follow the given restrictions and requirements:
- * 1. Cover all the empty cells.
- * 2. Do not cover any of the occupied cells.
- * 3. We can put as many stamps as we want.
- * 4. Stamps can overlap with each other.
- * 5. Stamps are not allowed to be rotated.
- * 6. Stamps must stay completely inside the grid.
- *
- * Return true if it is possible to fit the stamps while following the given restrictions and
- * requirements. Otherwise, return false.
- */
-
-/**
- * @param {number[][]} grid
- * @param {number} stampHeight
- * @param {number} stampWidth
- * @return {boolean}
- */
-var possibleToStamp = function(grid, stampHeight, stampWidth) {
- const rows = grid.length;
- const cols = grid[0].length;
- const prefixSum = new Array(rows + 1).fill().map(() => new Array(cols + 1).fill(0));
- const diff = new Array(rows + 1).fill().map(() => new Array(cols + 1).fill(0));
-
- for (let i = 0; i < rows; i++) {
- for (let j = 0; j < cols; j++) {
- prefixSum[i + 1][j + 1] = prefixSum[i + 1][j] + prefixSum[i][j + 1]
- - prefixSum[i][j] + grid[i][j];
- }
- }
-
- for (let i = 0; i <= rows - stampHeight; i++) {
- for (let j = 0; j <= cols - stampWidth; j++) {
- const x = i + stampHeight;
- const y = j + stampWidth;
- if (prefixSum[x][y] - prefixSum[x][j] - prefixSum[i][y] + prefixSum[i][j] === 0) {
- diff[i][j]++;
- diff[i][y]--;
- diff[x][j]--;
- diff[x][y]++;
- }
- }
- }
-
- const covered = new Array(rows).fill().map(() => new Array(cols).fill(0));
- for (let i = 0; i < rows; i++) {
- for (let j = 0; j < cols; j++) {
- covered[i][j] = (i > 0 ? covered[i - 1][j] : 0)
- + (j > 0 ? covered[i][j - 1] : 0)
- - (i > 0 && j > 0 ? covered[i - 1][j - 1] : 0) + diff[i][j];
- if (grid[i][j] === 0 && covered[i][j] === 0) return false;
- }
- }
-
- return true;
-};
diff --git a/solutions/2133-check-if-every-row-and-column-contains-all-numbers.js b/solutions/2133-check-if-every-row-and-column-contains-all-numbers.js
deleted file mode 100644
index e8d6990a..00000000
--- a/solutions/2133-check-if-every-row-and-column-contains-all-numbers.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2133. Check if Every Row and Column Contains All Numbers
- * https://leetcode.com/problems/check-if-every-row-and-column-contains-all-numbers/
- * Difficulty: Easy
- *
- * An n x n matrix is valid if every row and every column contains all the integers from 1
- * to n (inclusive).
- *
- * Given an n x n integer matrix matrix, return true if the matrix is valid. Otherwise,
- * return false.
- */
-
-/**
- * @param {number[][]} matrix
- * @return {boolean}
- */
-var checkValid = function(matrix) {
- const n = matrix.length;
-
- for (let i = 0; i < n; i++) {
- const rowSet = new Set();
- const colSet = new Set();
-
- for (let j = 0; j < n; j++) {
- rowSet.add(matrix[i][j]);
- colSet.add(matrix[j][i]);
- }
-
- if (rowSet.size !== n || colSet.size !== n) return false;
- }
-
- return true;
-};
diff --git a/solutions/2134-minimum-swaps-to-group-all-1s-together-ii.js b/solutions/2134-minimum-swaps-to-group-all-1s-together-ii.js
deleted file mode 100644
index 1105dced..00000000
--- a/solutions/2134-minimum-swaps-to-group-all-1s-together-ii.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2134. Minimum Swaps to Group All 1's Together II
- * https://leetcode.com/problems/minimum-swaps-to-group-all-1s-together-ii/
- * Difficulty: Medium
- *
- * A swap is defined as taking two distinct positions in an array and swapping the values in them.
- *
- * A circular array is defined as an array where we consider the first element and the last element
- * to be adjacent.
- *
- * Given a binary circular array nums, return the minimum number of swaps required to group all
- * 1's present in the array together at any location.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minSwaps = function(nums) {
- const onesCount = nums.reduce((sum, num) => sum + num, 0);
- const n = nums.length;
- let result = Infinity;
- let currentZeros = 0;
-
- for (let i = 0; i < onesCount; i++) {
- if (nums[i] === 0) currentZeros++;
- }
-
- result = currentZeros;
-
- for (let i = 1; i < n; i++) {
- if (nums[(i - 1) % n] === 0) currentZeros--;
- if (nums[(i + onesCount - 1) % n] === 0) currentZeros++;
- result = Math.min(result, currentZeros);
- }
-
- return result;
-};
diff --git a/solutions/2135-count-words-obtained-after-adding-a-letter.js b/solutions/2135-count-words-obtained-after-adding-a-letter.js
deleted file mode 100644
index c7b08943..00000000
--- a/solutions/2135-count-words-obtained-after-adding-a-letter.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 2135. Count Words Obtained After Adding a Letter
- * https://leetcode.com/problems/count-words-obtained-after-adding-a-letter/
- * Difficulty: Medium
- *
- * You are given two 0-indexed arrays of strings startWords and targetWords. Each string consists
- * of lowercase English letters only.
- *
- * For each string in targetWords, check if it is possible to choose a string from startWords and
- * perform a conversion operation on it to be equal to that from targetWords.
- *
- * The conversion operation is described in the following two steps:
- * 1. Append any lowercase letter that is not present in the string to its end.
- * - For example, if the string is "abc", the letters 'd', 'e', or 'y' can be added to it, but
- * not 'a'. If 'd' is added, the resulting string will be "abcd".
- * 2. Rearrange the letters of the new string in any arbitrary order.
- * - For example, "abcd" can be rearranged to "acbd", "bacd", "cbda", and so on. Note that it
- * can also be rearranged to "abcd" itself.
- *
- * Return the number of strings in targetWords that can be obtained by performing the operations
- * on any string of startWords.
- *
- * Note that you will only be verifying if the string in targetWords can be obtained from a string
- * in startWords by performing the operations. The strings in startWords do not actually change
- * during this process.
- */
-
-/**
- * @param {string[]} startWords
- * @param {string[]} targetWords
- * @return {number}
- */
-var wordCount = function(startWords, targetWords) {
- const sortedStartWords = new Set(startWords.map(word => [...word].sort().join('')));
- let result = 0;
-
- for (const target of targetWords) {
- const sortedTarget = [...target].sort().join('');
- for (let i = 0; i < target.length; i++) {
- const candidate = sortedTarget.slice(0, i) + sortedTarget.slice(i + 1);
- if (sortedStartWords.has(candidate)) {
- result++;
- break;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2136-earliest-possible-day-of-full-bloom.js b/solutions/2136-earliest-possible-day-of-full-bloom.js
deleted file mode 100644
index e4a07b6c..00000000
--- a/solutions/2136-earliest-possible-day-of-full-bloom.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2136. Earliest Possible Day of Full Bloom
- * https://leetcode.com/problems/earliest-possible-day-of-full-bloom/
- * Difficulty: Hard
- *
- * You have n flower seeds. Every seed must be planted first before it can begin to grow, then
- * bloom. Planting a seed takes time and so does the growth of a seed. You are given two 0-indexed
- * integer arrays plantTime and growTime, of length n each:
- * - plantTime[i] is the number of full days it takes you to plant the ith seed. Every day, you can
- * work on planting exactly one seed. You do not have to work on planting the same seed on
- * consecutive days, but the planting of a seed is not complete until you have worked plantTime[i]
- * days on planting it in total.
- * - growTime[i] is the number of full days it takes the ith seed to grow after being completely
- * planted. After the last day of its growth, the flower blooms and stays bloomed forever.
- *
- * From the beginning of day 0, you can plant the seeds in any order.
- *
- * Return the earliest possible day where all seeds are blooming.
- */
-
-/**
- * @param {number[]} plantTime
- * @param {number[]} growTime
- * @return {number}
- */
-var earliestFullBloom = function(plantTime, growTime) {
- const seeds = plantTime.map((plant, index) => ({ plant, grow: growTime[index] }));
- seeds.sort((a, b) => b.grow - a.grow);
-
- let plantingDays = 0;
- let result = 0;
-
- for (const { plant, grow } of seeds) {
- plantingDays += plant;
- result = Math.max(result, plantingDays + grow);
- }
-
- return result;
-};
diff --git a/solutions/2138-divide-a-string-into-groups-of-size-k.js b/solutions/2138-divide-a-string-into-groups-of-size-k.js
deleted file mode 100644
index 24d0197f..00000000
--- a/solutions/2138-divide-a-string-into-groups-of-size-k.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 2138. Divide a String Into Groups of Size k
- * https://leetcode.com/problems/divide-a-string-into-groups-of-size-k/
- * Difficulty: Easy
- *
- * A string s can be partitioned into groups of size k using the following procedure:
- * - The first group consists of the first k characters of the string, the second group consists
- * of the next k characters of the string, and so on. Each element can be a part of exactly one
- * group.
- * - For the last group, if the string does not have k characters remaining, a character fill is
- * used to complete the group.
- *
- * Note that the partition is done so that after removing the fill character from the last group
- * (if it exists) and concatenating all the groups in order, the resultant string should be s.
- *
- * Given the string s, the size of each group k and the character fill, return a string array
- * denoting the composition of every group s has been divided into, using the above procedure.
- */
-
-/**
- * @param {string} s
- * @param {number} k
- * @param {character} fill
- * @return {string[]}
- */
-var divideString = function(s, k, fill) {
- const paddedString = s + fill.repeat((k - s.length % k) % k);
- const result = [];
-
- for (let i = 0; i < paddedString.length; i += k) {
- result.push(paddedString.slice(i, i + k));
- }
-
- return result;
-};
diff --git a/solutions/2139-minimum-moves-to-reach-target-score.js b/solutions/2139-minimum-moves-to-reach-target-score.js
deleted file mode 100644
index a074595f..00000000
--- a/solutions/2139-minimum-moves-to-reach-target-score.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2139. Minimum Moves to Reach Target Score
- * https://leetcode.com/problems/minimum-moves-to-reach-target-score/
- * Difficulty: Medium
- *
- * You are playing a game with integers. You start with the integer 1 and you want to reach
- * the integer target.
- *
- * In one move, you can either:
- * - Increment the current integer by one (i.e., x = x + 1).
- * - Double the current integer (i.e., x = 2 * x).
- *
- * You can use the increment operation any number of times, however, you can only use the double
- * operation at most maxDoubles times.
- *
- * Given the two integers target and maxDoubles, return the minimum number of moves needed to
- * reach target starting with 1.
- */
-
-/**
- * @param {number} target
- * @param {number} maxDoubles
- * @return {number}
- */
-var minMoves = function(target, maxDoubles) {
- let moves = 0;
- let current = target;
-
- while (current > 1 && maxDoubles > 0) {
- if (current % 2 === 0) {
- current /= 2;
- maxDoubles--;
- } else {
- current--;
- }
- moves++;
- }
-
- return moves + (current - 1);
-};
diff --git a/solutions/2140-solving-questions-with-brainpower.js b/solutions/2140-solving-questions-with-brainpower.js
deleted file mode 100644
index 5fc65820..00000000
--- a/solutions/2140-solving-questions-with-brainpower.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2140. Solving Questions With Brainpower
- * https://leetcode.com/problems/solving-questions-with-brainpower/
- * Difficulty: Medium
- *
- * You are given a 0-indexed 2D integer array questions where questions[i] = [pointsi, brainpoweri].
- *
- * The array describes the questions of an exam, where you have to process the questions in order
- * (i.e., starting from question 0) and make a decision whether to solve or skip each question.
- * Solving question i will earn you pointsi points but you will be unable to solve each of the next
- * brainpoweri questions. If you skip question i, you get to make the decision on the next question.
- *
- * For example, given questions = [[3, 2], [4, 3], [4, 4], [2, 5]]:
- * - If question 0 is solved, you will earn 3 points but you will be unable to solve questions
- * 1 and 2.
- * - If instead, question 0 is skipped and question 1 is solved, you will earn 4 points but you
- * will be unable to solve questions 2 and 3.
- *
- * Return the maximum points you can earn for the exam.
- */
-
-/**
- * @param {number[][]} questions
- * @return {number}
- */
-var mostPoints = function(questions) {
- const dp = new Array(questions.length + 1).fill(0);
-
- for (let i = questions.length - 1; i >= 0; i--) {
- const [points, brainpower] = questions[i];
- const nextAvailable = Math.min(questions.length, i + brainpower + 1);
- dp[i] = Math.max(points + dp[nextAvailable], dp[i + 1]);
- }
-
- return dp[0];
-};
diff --git a/solutions/2141-maximum-running-time-of-n-computers.js b/solutions/2141-maximum-running-time-of-n-computers.js
deleted file mode 100644
index b5f7b090..00000000
--- a/solutions/2141-maximum-running-time-of-n-computers.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2141. Maximum Running Time of N Computers
- * https://leetcode.com/problems/maximum-running-time-of-n-computers/
- * Difficulty: Hard
- *
- * You have n computers. You are given the integer n and a 0-indexed integer array batteries
- * where the ith battery can run a computer for batteries[i] minutes. You are interested in
- * running all n computers simultaneously using the given batteries.
- *
- * Initially, you can insert at most one battery into each computer. After that and at any
- * integer time moment, you can remove a battery from a computer and insert another battery
- * any number of times. The inserted battery can be a totally new battery or a battery from
- * another computer. You may assume that the removing and inserting processes take no time.
- *
- * Note that the batteries cannot be recharged.
- *
- * Return the maximum number of minutes you can run all the n computers simultaneously.
- */
-
-/**
- * @param {number} n
- * @param {number[]} batteries
- * @return {number}
- */
-var maxRunTime = function(n, batteries) {
- let left = 1;
- let right = Math.floor(batteries.reduce((sum, battery) => sum + battery, 0) / n);
-
- while (left < right) {
- const mid = Math.floor((left + right + 1) / 2);
- const total = batteries.reduce((sum, battery) => sum + Math.min(battery, mid), 0);
-
- if (total >= n * mid) {
- left = mid;
- } else {
- right = mid - 1;
- }
- }
-
- return left;
-};
diff --git a/solutions/2144-minimum-cost-of-buying-candies-with-discount.js b/solutions/2144-minimum-cost-of-buying-candies-with-discount.js
deleted file mode 100644
index 86eca1e2..00000000
--- a/solutions/2144-minimum-cost-of-buying-candies-with-discount.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2144. Minimum Cost of Buying Candies With Discount
- * https://leetcode.com/problems/minimum-cost-of-buying-candies-with-discount/
- * Difficulty: Easy
- *
- * A shop is selling candies at a discount. For every two candies sold, the shop gives a
- * third candy for free.
- *
- * The customer can choose any candy to take away for free as long as the cost of the
- * chosen candy is less than or equal to the minimum cost of the two candies bought.
- *
- * - For example, if there are 4 candies with costs 1, 2, 3, and 4, and the customer buys
- * candies with costs 2 and 3, they can take the candy with cost 1 for free, but not the
- * candy with cost 4.
- *
- * Given a 0-indexed integer array cost, where cost[i] denotes the cost of the ith candy,
- * return the minimum cost of buying all the candies.
- */
-
-/**
- * @param {number[]} cost
- * @return {number}
- */
-var minimumCost = function(cost) {
- cost.sort((a, b) => b - a);
- let result = 0;
-
- for (let i = 0; i < cost.length; i += 3) {
- result += cost[i] + (cost[i + 1] || 0);
- }
-
- return result;
-};
diff --git a/solutions/2145-count-the-hidden-sequences.js b/solutions/2145-count-the-hidden-sequences.js
deleted file mode 100644
index 48406074..00000000
--- a/solutions/2145-count-the-hidden-sequences.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2145. Count the Hidden Sequences
- * https://leetcode.com/problems/count-the-hidden-sequences/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array of n integers differences, which describes the differences
- * between each pair of consecutive integers of a hidden sequence of length (n + 1). More formally,
- * call the hidden sequence hidden, then we have that differences[i] = hidden[i + 1] - hidden[i].
- *
- * You are further given two integers lower and upper that describe the inclusive range of values
- * [lower, upper] that the hidden sequence can contain.
- *
- * - For example, given differences = [1, -3, 4], lower = 1, upper = 6, the hidden sequence is a
- * sequence of length 4 whose elements are in between 1 and 6 (inclusive).
- * - [3, 4, 1, 5] and [4, 5, 2, 6] are possible hidden sequences.
- * - [5, 6, 3, 7] is not possible since it contains an element greater than 6.
- * - [1, 2, 3, 4] is not possible since the differences are not correct.
- *
- * Return the number of possible hidden sequences there are. If there are no possible sequences,
- * return 0.
- */
-
-/**
- * @param {number[]} differences
- * @param {number} lower
- * @param {number} upper
- * @return {number}
- */
-var numberOfArrays = function(differences, lower, upper) {
- let minValue = 0;
- let maxValue = 0;
- let current = 0;
-
- for (const diff of differences) {
- current += diff;
- minValue = Math.min(minValue, current);
- maxValue = Math.max(maxValue, current);
- }
-
- const range = upper - lower;
- const validRange = range - (maxValue - minValue);
-
- return validRange >= 0 ? validRange + 1 : 0;
-};
diff --git a/solutions/2147-number-of-ways-to-divide-a-long-corridor.js b/solutions/2147-number-of-ways-to-divide-a-long-corridor.js
deleted file mode 100644
index e504b765..00000000
--- a/solutions/2147-number-of-ways-to-divide-a-long-corridor.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 2147. Number of Ways to Divide a Long Corridor
- * https://leetcode.com/problems/number-of-ways-to-divide-a-long-corridor/
- * Difficulty: Hard
- *
- * Along a long library corridor, there is a line of seats and decorative plants. You are given
- * a 0-indexed string corridor of length n consisting of letters 'S' and 'P' where each 'S'
- * represents a seat and each 'P' represents a plant.
- *
- * One room divider has already been installed to the left of index 0, and another to the right
- * of index n - 1. Additional room dividers can be installed. For each position between indices
- * i - 1 and i (1 <= i <= n - 1), at most one divider can be installed.
- *
- * Divide the corridor into non-overlapping sections, where each section has exactly two seats
- * with any number of plants. There may be multiple ways to perform the division. Two ways are
- * different if there is a position with a room divider installed in the first way but not in
- * the second way.
- *
- * Return the number of ways to divide the corridor. Since the answer may be very large, return
- * it modulo 109 + 7. If there is no way, return 0.
- */
-
-/**
- * @param {string} corridor
- * @return {number}
- */
-var numberOfWays = function(corridor) {
- const MOD = 1e9 + 7;
- let seatCount = 0;
- let result = 1;
- let lastPairEnd = -1;
-
- for (let i = 0; i < corridor.length; i++) {
- if (corridor[i] === 'S') {
- seatCount++;
- }
- }
- if (seatCount === 0 || seatCount % 2 !== 0) {
- return 0;
- }
-
- seatCount = 0;
-
- for (let i = 0; i < corridor.length; i++) {
- if (corridor[i] === 'S') {
- seatCount++;
-
- if (seatCount % 2 === 0) {
- lastPairEnd = i;
- } else if (seatCount > 1) {
- const plantsCount = i - lastPairEnd - 1;
- result = (result * (plantsCount + 1)) % MOD;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2148-count-elements-with-strictly-smaller-and-greater-elements.js b/solutions/2148-count-elements-with-strictly-smaller-and-greater-elements.js
deleted file mode 100644
index 194880af..00000000
--- a/solutions/2148-count-elements-with-strictly-smaller-and-greater-elements.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 2148. Count Elements With Strictly Smaller and Greater Elements
- * https://leetcode.com/problems/count-elements-with-strictly-smaller-and-greater-elements/
- * Difficulty: Easy
- *
- * Given an integer array nums, return the number of elements that have both a strictly
- * smaller and a strictly greater element appear in nums.
- */
-
-/**
-* @param {number[]} nums
-* @return {number}
-*/
-var countElements = function(nums) {
- let result = 0;
-
- if (nums.length <= 2) return 0;
- for (const num of nums) {
- if (num > Math.min(...nums) && num < Math.max(...nums)) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2149-rearrange-array-elements-by-sign.js b/solutions/2149-rearrange-array-elements-by-sign.js
deleted file mode 100644
index 7979e5ef..00000000
--- a/solutions/2149-rearrange-array-elements-by-sign.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2149. Rearrange Array Elements by Sign
- * https://leetcode.com/problems/rearrange-array-elements-by-sign/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums of even length consisting of an equal number
- * of positive and negative integers.
- *
- * You should return the array of nums such that the the array follows the given conditions:
- * 1. Every consecutive pair of integers have opposite signs.
- * 2. For all integers with the same sign, the order in which they were present in nums is
- * preserved.
- * 3. The rearranged array begins with a positive integer.
- *
- * Return the modified array after rearranging the elements to satisfy the aforementioned
- * conditions.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var rearrangeArray = function(nums) {
- const positives = nums.filter(num => num > 0);
- const negatives = nums.filter(num => num < 0);
- const result = [];
-
- for (let i = 0; i < positives.length; i++) {
- result.push(positives[i], negatives[i]);
- }
-
- return result;
-};
diff --git a/solutions/2150-find-all-lonely-numbers-in-the-array.js b/solutions/2150-find-all-lonely-numbers-in-the-array.js
deleted file mode 100644
index 676badc6..00000000
--- a/solutions/2150-find-all-lonely-numbers-in-the-array.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2150. Find All Lonely Numbers in the Array
- * https://leetcode.com/problems/find-all-lonely-numbers-in-the-array/
- * Difficulty: Medium
- *
- * You are given an integer array nums. A number x is lonely when it appears only once, and
- * no adjacent numbers (i.e. x + 1 and x - 1) appear in the array.
- *
- * Return all lonely numbers in nums. You may return the answer in any order.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var findLonely = function(nums) {
- const map = new Map();
-
- for (const num of nums) {
- map.set(num, (map.get(num) || 0) + 1);
- }
-
- const result = [];
- for (const [num, count] of map) {
- if (count === 1 && !map.has(num - 1) && !map.has(num + 1)) {
- result.push(num);
- }
- }
-
- return result;
-};
diff --git a/solutions/2151-maximum-good-people-based-on-statements.js b/solutions/2151-maximum-good-people-based-on-statements.js
deleted file mode 100644
index 9a5d71cd..00000000
--- a/solutions/2151-maximum-good-people-based-on-statements.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 2151. Maximum Good People Based on Statements
- * https://leetcode.com/problems/maximum-good-people-based-on-statements/
- * Difficulty: Hard
- *
- * There are two types of persons:
- * - The good person: The person who always tells the truth.
- * - The bad person: The person who might tell the truth and might lie.
- *
- * You are given a 0-indexed 2D integer array statements of size n x n that represents the
- * statements made by n people about each other. More specifically, statements[i][j] could
- * be one of the following:
- * - 0 which represents a statement made by person i that person j is a bad person.
- * - 1 which represents a statement made by person i that person j is a good person.
- * - 2 represents that no statement is made by person i about person j.
- *
- * Additionally, no person ever makes a statement about themselves. Formally, we have that
- * statements[i][i] = 2 for all 0 <= i < n.
- *
- * Return the maximum number of people who can be good based on the statements made by the
- * n people.
- */
-
-/**
- * @param {number[][]} statements
- * @return {number}
- */
-var maximumGood = function(statements) {
- const n = statements.length;
- let result = 0;
-
- backtrack(0, new Array(n).fill(false), 0);
- return result;
-
- function isValid(goodPeople) {
- for (let i = 0; i < n; i++) {
- if (!goodPeople[i]) continue;
- for (let j = 0; j < n; j++) {
- if (statements[i][j] === 0 && goodPeople[j]) return false;
- if (statements[i][j] === 1 && !goodPeople[j]) return false;
- }
- }
- return true;
- }
-
- function backtrack(index, goodPeople, goodCount) {
- if (index === n) {
- if (isValid(goodPeople)) {
- result = Math.max(result, goodCount);
- }
- return;
- }
-
- goodPeople[index] = true;
- backtrack(index + 1, goodPeople, goodCount + 1);
- goodPeople[index] = false;
- backtrack(index + 1, goodPeople, goodCount);
- }
-};
diff --git a/solutions/2155-all-divisions-with-the-highest-score-of-a-binary-array.js b/solutions/2155-all-divisions-with-the-highest-score-of-a-binary-array.js
deleted file mode 100644
index 66db5b2f..00000000
--- a/solutions/2155-all-divisions-with-the-highest-score-of-a-binary-array.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 2155. All Divisions With the Highest Score of a Binary Array
- * https://leetcode.com/problems/all-divisions-with-the-highest-score-of-a-binary-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed binary array nums of length n. nums can be divided at index i
- * (where 0 <= i <= n) into two arrays (possibly empty) numsleft and numsright:
- * - numsleft has all the elements of nums between index 0 and i - 1 (inclusive), while numsright
- * has all the elements of nums between index i and n - 1 (inclusive).
- * - If i == 0, numsleft is empty, while numsright has all the elements of nums.
- * - If i == n, numsleft has all the elements of nums, while numsright is empty.
- *
- * The division score of an index i is the sum of the number of 0's in numsleft and the number
- * of 1's in numsright.
- *
- * Return all distinct indices that have the highest possible division score. You may return
- * the answer in any order.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var maxScoreIndices = function(nums) {
- const result = [0];
- let leftZeros = 0;
- let rightOnes = nums.reduce((sum, num) => sum + num, 0);
- let maxScore = rightOnes;
-
- for (let i = 0; i < nums.length; i++) {
- leftZeros += nums[i] === 0 ? 1 : 0;
- rightOnes -= nums[i];
- const score = leftZeros + rightOnes;
-
- if (score > maxScore) {
- maxScore = score;
- result.length = 0;
- result.push(i + 1);
- } else if (score === maxScore) {
- result.push(i + 1);
- }
- }
-
- return result;
-};
diff --git a/solutions/2156-find-substring-with-given-hash-value.js b/solutions/2156-find-substring-with-given-hash-value.js
deleted file mode 100644
index a43f4a10..00000000
--- a/solutions/2156-find-substring-with-given-hash-value.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 2156. Find Substring With Given Hash Value
- * https://leetcode.com/problems/find-substring-with-given-hash-value/
- * Difficulty: Hard
- *
- * The hash of a 0-indexed string s of length k, given integers p and m, is computed using
- * the following function:
- * - hash(s, p, m) = (val(s[0]) * p0 + val(s[1]) * p1 + ... + val(s[k-1]) * pk-1) mod m.
- *
- * Where val(s[i]) represents the index of s[i] in the alphabet from val('a') = 1 to val('z') = 26.
- *
- * You are given a string s and the integers power, modulo, k, and hashValue. Return sub, the
- * first substring of s of length k such that hash(sub, power, modulo) == hashValue.
- *
- * The test cases will be generated such that an answer always exists.
- *
- * A substring is a contiguous non-empty sequence of characters within a string.
- */
-
-/**
-* @param {string} s
-* @param {number} power
-* @param {number} modulo
-* @param {number} k
-* @param {number} hashValue
-* @return {string}
-*/
-var subStrHash = function(s, power, modulo, k, hashValue) {
- power = BigInt(power);
- modulo = BigInt(modulo);
- hashValue = BigInt(hashValue);
-
- const powers = new Array(k);
- powers[0] = 1n;
- for (let i = 1; i < k; i++) {
- powers[i] = (powers[i - 1] * power) % modulo;
- }
-
- for (let start = 0; start <= s.length - k; start++) {
- let hash = 0n;
- for (let i = 0; i < k; i++) {
- const charVal = BigInt(s.charCodeAt(start + i) - 'a'.charCodeAt(0) + 1);
- hash = (hash + charVal * powers[i]) % modulo;
- }
- if (hash === hashValue) {
- return s.substring(start, start + k);
- }
- }
-
- return '';
-};
diff --git a/solutions/2157-groups-of-strings.js b/solutions/2157-groups-of-strings.js
deleted file mode 100644
index 8af51c12..00000000
--- a/solutions/2157-groups-of-strings.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * 2157. Groups of Strings
- * https://leetcode.com/problems/groups-of-strings/
- * Difficulty: Hard
- *
- * You are given a 0-indexed array of strings words. Each string consists of lowercase English
- * letters only. No letter occurs more than once in any string of words.
- *
- * Two strings s1 and s2 are said to be connected if the set of letters of s2 can be obtained
- * from the set of letters of s1 by any one of the following operations:
- * - Adding exactly one letter to the set of the letters of s1.
- * - Deleting exactly one letter from the set of the letters of s1.
- * - Replacing exactly one letter from the set of the letters of s1 with any letter, including
- * itself.
- *
- * The array words can be divided into one or more non-intersecting groups. A string belongs
- * to a group if any one of the following is true:
- * - It is connected to at least one other string of the group.
- * - It is the only string present in the group.
- *
- * Note that the strings in words should be grouped in such a manner that a string belonging
- * to a group cannot be connected to a string present in any other group. It can be proved
- * that such an arrangement is always unique.
- *
- * Return an array ans of size 2 where:
- * - ans[0] is the maximum number of groups words can be divided into, and
- * - ans[1] is the size of the largest group.
- */
-
-/**
- * @param {string[]} words
- * @return {number[]}
- */
-var groupStrings = function(words) {
- const n = words.length;
- const masks = words.map(word => {
- let mask = 0;
- for (let i = 0; i < word.length; i++) {
- mask |= (1 << (word.charCodeAt(i) - 'a'.charCodeAt(0)));
- }
- return mask;
- });
- const uf = new UnionFind(n);
- const maskToIndex = new Map();
- for (let i = 0; i < n; i++) {
- if (maskToIndex.has(masks[i])) {
- uf.union(maskToIndex.get(masks[i]), i);
- } else {
- maskToIndex.set(masks[i], i);
- }
- }
- const processed = new Set();
-
- for (let i = 0; i < n; i++) {
- const mask = masks[i];
- if (processed.has(mask)) continue;
- processed.add(mask);
-
- for (let bit = 0; bit < 26; bit++) {
- if ((mask & (1 << bit)) === 0) {
- const newMask = mask | (1 << bit);
- if (maskToIndex.has(newMask)) {
- uf.union(i, maskToIndex.get(newMask));
- }
- }
- }
-
- for (let bit = 0; bit < 26; bit++) {
- if ((mask & (1 << bit)) !== 0) {
- const newMask = mask & ~(1 << bit);
- if (maskToIndex.has(newMask)) {
- uf.union(i, maskToIndex.get(newMask));
- }
- }
- }
-
- for (let remove = 0; remove < 26; remove++) {
- if ((mask & (1 << remove)) !== 0) {
- for (let add = 0; add < 26; add++) {
- if ((mask & (1 << add)) === 0) {
- const newMask = (mask & ~(1 << remove)) | (1 << add);
- if (maskToIndex.has(newMask)) {
- uf.union(i, maskToIndex.get(newMask));
- }
- }
- }
- }
- }
- }
-
- return [uf.count, uf.getMaxSize()];
-};
-
-class UnionFind {
- constructor(n) {
- this.parent = Array(n).fill().map((_, i) => i);
- this.rank = Array(n).fill(0);
- this.count = n;
- this.sizes = Array(n).fill(1);
- }
-
- find(x) {
- if (this.parent[x] !== x) {
- this.parent[x] = this.find(this.parent[x]);
- }
- return this.parent[x];
- }
-
- union(x, y) {
- const rootX = this.find(x);
- const rootY = this.find(y);
-
- if (rootX === rootY) return false;
-
- if (this.rank[rootX] < this.rank[rootY]) {
- this.parent[rootX] = rootY;
- this.sizes[rootY] += this.sizes[rootX];
- } else if (this.rank[rootX] > this.rank[rootY]) {
- this.parent[rootY] = rootX;
- this.sizes[rootX] += this.sizes[rootY];
- } else {
- this.parent[rootY] = rootX;
- this.rank[rootX]++;
- this.sizes[rootX] += this.sizes[rootY];
- }
-
- this.count--;
- return true;
- }
-
- getMaxSize() {
- let maxSize = 0;
- for (let i = 0; i < this.parent.length; i++) {
- if (this.parent[i] === i) {
- maxSize = Math.max(maxSize, this.sizes[i]);
- }
- }
- return maxSize;
- }
-}
diff --git a/solutions/2160-minimum-sum-of-four-digit-number-after-splitting-digits.js b/solutions/2160-minimum-sum-of-four-digit-number-after-splitting-digits.js
deleted file mode 100644
index fa3b9b86..00000000
--- a/solutions/2160-minimum-sum-of-four-digit-number-after-splitting-digits.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 2160. Minimum Sum of Four Digit Number After Splitting Digits
- * https://leetcode.com/problems/minimum-sum-of-four-digit-number-after-splitting-digits/
- * Difficulty: Easy
- *
- * You are given a positive integer num consisting of exactly four digits. Split num into two
- * new integers new1 and new2 by using the digits found in num. Leading zeros are allowed in
- * new1 and new2, and all the digits found in num must be used.
- * - For example, given num = 2932, you have the following digits: two 2's, one 9 and one 3.
- * Some of the possible pairs [new1, new2] are [22, 93], [23, 92], [223, 9] and [2, 329].
- *
- * Return the minimum possible sum of new1 and new2.
- */
-
-/**
- * @param {number} num
- * @return {number}
- */
-var minimumSum = function(num) {
- const digits = String(num).split('').map(Number).sort((a, b) => a - b);
- return (digits[0] * 10 + digits[2]) + (digits[1] * 10 + digits[3]);
-};
diff --git a/solutions/2162-minimum-cost-to-set-cooking-time.js b/solutions/2162-minimum-cost-to-set-cooking-time.js
deleted file mode 100644
index e1c51c1b..00000000
--- a/solutions/2162-minimum-cost-to-set-cooking-time.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * 2162. Minimum Cost to Set Cooking Time
- * https://leetcode.com/problems/minimum-cost-to-set-cooking-time/
- * Difficulty: Medium
- *
- * A generic microwave supports cooking times for:
- * - at least 1 second.
- * - at most 99 minutes and 99 seconds.
- *
- * To set the cooking time, you push at most four digits. The microwave normalizes what you push
- * as four digits by prepending zeroes. It interprets the first two digits as the minutes and
- * the last two digits as the seconds. It then adds them up as the cooking time. For example,
- * - You push 9 5 4 (three digits). It is normalized as 0954 and interpreted as 9 minutes and
- * 54 seconds.
- * - You push 0 0 0 8 (four digits). It is interpreted as 0 minutes and 8 seconds.
- * - You push 8 0 9 0. It is interpreted as 80 minutes and 90 seconds.
- * - You push 8 1 3 0. It is interpreted as 81 minutes and 30 seconds.
- *
- * You are given integers startAt, moveCost, pushCost, and targetSeconds. Initially, your finger
- * is on the digit startAt. Moving the finger above any specific digit costs moveCost units of
- * fatigue. Pushing the digit below the finger once costs pushCost units of fatigue.
- *
- * There can be multiple ways to set the microwave to cook for targetSeconds seconds but you are
- * interested in the way with the minimum cost.
- *
- * Return the minimum cost to set targetSeconds seconds of cooking time.
- *
- * Remember that one minute consists of 60 seconds.
- */
-
-/**
- * @param {number} startAt
- * @param {number} moveCost
- * @param {number} pushCost
- * @param {number} targetSeconds
- * @return {number}
- */
-var minCostSetTime = function(startAt, moveCost, pushCost, targetSeconds) {
- const minutes1 = Math.floor(targetSeconds / 60);
- const seconds1 = targetSeconds % 60;
- let result = Infinity;
-
- if (minutes1 <= 99) {
- const digits1 = getDigits(minutes1, seconds1);
- result = Math.min(result, calculateCost(digits1));
- }
-
- const minutes2 = Math.floor(targetSeconds / 60) - 1;
- const seconds2 = targetSeconds % 60 + 60;
- if (minutes2 >= 0 && minutes2 <= 99 && seconds2 <= 99) {
- const digits2 = getDigits(minutes2, seconds2);
- result = Math.min(result, calculateCost(digits2));
- }
-
- return result;
-
- function calculateCost(digits) {
- let totalCost = 0;
- let currentDigit = startAt;
-
- for (const digit of digits) {
- if (digit !== currentDigit) {
- totalCost += moveCost;
- currentDigit = digit;
- }
- totalCost += pushCost;
- }
-
- return totalCost;
- }
-
- function getDigits(minutes, seconds) {
- const result = [];
-
- if (minutes > 0) {
- if (minutes >= 10) {
- result.push(Math.floor(minutes / 10));
- }
- result.push(minutes % 10);
- }
-
- if (minutes > 0 || seconds >= 10) {
- result.push(Math.floor(seconds / 10));
- }
-
- result.push(seconds % 10);
-
- return result;
- }
-};
diff --git a/solutions/2164-sort-even-and-odd-indices-independently.js b/solutions/2164-sort-even-and-odd-indices-independently.js
deleted file mode 100644
index ed9322c6..00000000
--- a/solutions/2164-sort-even-and-odd-indices-independently.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2164. Sort Even and Odd Indices Independently
- * https://leetcode.com/problems/sort-even-and-odd-indices-independently/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums. Rearrange the values of nums according to the
- * following rules:
- * 1. Sort the values at odd indices of nums in non-increasing order.
- * - For example, if nums = [4,1,2,3] before this step, it becomes [4,3,2,1] after. The values
- * at odd indices 1 and 3 are sorted in non-increasing order.
- * 2. Sort the values at even indices of nums in non-decreasing order.
- * - For example, if nums = [4,1,2,3] before this step, it becomes [2,1,4,3] after. The values
- * at even indices 0 and 2 are sorted in non-decreasing order.
- *
- * Return the array formed after rearranging the values of nums.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var sortEvenOdd = function(nums) {
- const evens = [];
- const odds = [];
-
- for (let i = 0; i < nums.length; i++) {
- if (i % 2 === 0) {
- evens.push(nums[i]);
- } else {
- odds.push(nums[i]);
- }
- }
-
- evens.sort((a, b) => a - b);
- odds.sort((a, b) => b - a);
-
- const result = [];
- let evenIndex = 0;
- let oddIndex = 0;
-
- for (let i = 0; i < nums.length; i++) {
- if (i % 2 === 0) {
- result.push(evens[evenIndex++]);
- } else {
- result.push(odds[oddIndex++]);
- }
- }
-
- return result;
-};
diff --git a/solutions/2165-smallest-value-of-the-rearranged-number.js b/solutions/2165-smallest-value-of-the-rearranged-number.js
deleted file mode 100644
index c3226062..00000000
--- a/solutions/2165-smallest-value-of-the-rearranged-number.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2165. Smallest Value of the Rearranged Number
- * https://leetcode.com/problems/smallest-value-of-the-rearranged-number/
- * Difficulty: Medium
- *
- * You are given an integer num. Rearrange the digits of num such that its value is minimized
- * and it does not contain any leading zeros.
- *
- * Return the rearranged number with minimal value.
- *
- * Note that the sign of the number does not change after rearranging the digits.
- */
-
-/**
- * @param {number} num
- * @return {number}
- */
-var smallestNumber = function(num) {
- const isNegative = num < 0;
- const digits = Math.abs(num).toString().split('').map(Number);
-
- if (isNegative) {
- digits.sort((a, b) => b - a);
- return -parseInt(digits.join(''), 10);
- }
-
- digits.sort((a, b) => a - b);
- const firstNonZero = digits.findIndex(d => d !== 0);
-
- if (firstNonZero === -1) return 0;
-
- [digits[0], digits[firstNonZero]] = [digits[firstNonZero], digits[0]];
- return parseInt(digits.join(''), 10);
-};
diff --git a/solutions/2166-design-bitset.js b/solutions/2166-design-bitset.js
deleted file mode 100644
index 155fe39b..00000000
--- a/solutions/2166-design-bitset.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * 2166. Design Bitset
- * https://leetcode.com/problems/design-bitset/
- * Difficulty: Medium
- *
- * A Bitset is a data structure that compactly stores bits.
- *
- * Implement the Bitset class:
- * - Bitset(int size) Initializes the Bitset with size bits, all of which are 0.
- * - void fix(int idx) Updates the value of the bit at the index idx to 1. If the value was
- * already 1, no change occurs.
- * - void unfix(int idx) Updates the value of the bit at the index idx to 0. If the value
- * was already 0, no change occurs.
- * - void flip() Flips the values of each bit in the Bitset. In other words, all bits with
- * value 0 will now have value 1 and vice versa.
- * - boolean all() Checks if the value of each bit in the Bitset is 1. Returns true if it
- * satisfies the condition, false otherwise.
- * - boolean one() Checks if there is at least one bit in the Bitset with value 1. Returns
- * true if it satisfies the condition, false otherwise.
- * - int count() Returns the total number of bits in the Bitset which have value 1.
- * - String toString() Returns the current composition of the Bitset. Note that in the
- * resultant string, the character at the ith index should coincide with the value at
- * the ith bit of the Bitset.
- */
-
-/**
- * @param {number} size
- */
-var Bitset = function(size) {
- this.bits = new Uint8Array(size);
- this.ones = 0;
- this.flipped = false;
-};
-
-/**
- * @param {number} idx
- * @return {void}
- */
-Bitset.prototype.fix = function(idx) {
- if (this.flipped) {
- if (this.bits[idx] === 1) {
- this.bits[idx] = 0;
- this.ones++;
- }
- } else {
- if (this.bits[idx] === 0) {
- this.bits[idx] = 1;
- this.ones++;
- }
- }
-};
-
-/**
- * @param {number} idx
- * @return {void}
- */
-Bitset.prototype.unfix = function(idx) {
- if (this.flipped) {
- if (this.bits[idx] === 0) {
- this.bits[idx] = 1;
- this.ones--;
- }
- } else {
- if (this.bits[idx] === 1) {
- this.bits[idx] = 0;
- this.ones--;
- }
- }
-};
-
-/**
- * @return {void}
- */
-Bitset.prototype.flip = function() {
- this.flipped = !this.flipped;
- this.ones = this.bits.length - this.ones;
-};
-
-/**
- * @return {boolean}
- */
-Bitset.prototype.all = function() {
- return this.ones === this.bits.length;
-};
-
-/**
- * @return {boolean}
- */
-Bitset.prototype.one = function() {
- return this.ones > 0;
-};
-
-/**
- * @return {number}
- */
-Bitset.prototype.count = function() {
- return this.ones;
-};
-
-/**
- * @return {string}
- */
-Bitset.prototype.toString = function() {
- let result = '';
- for (let i = 0; i < this.bits.length; i++) {
- result += this.flipped ? 1 - this.bits[i] : this.bits[i];
- }
- return result;
-};
diff --git a/solutions/2167-minimum-time-to-remove-all-cars-containing-illegal-goods.js b/solutions/2167-minimum-time-to-remove-all-cars-containing-illegal-goods.js
deleted file mode 100644
index 4877a0de..00000000
--- a/solutions/2167-minimum-time-to-remove-all-cars-containing-illegal-goods.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2167. Minimum Time to Remove All Cars Containing Illegal Goods
- * https://leetcode.com/problems/minimum-time-to-remove-all-cars-containing-illegal-goods/
- * Difficulty: Hard
- *
- * You are given a 0-indexed binary string s which represents a sequence of train cars. s[i] = '0'
- * denotes that the ith car does not contain illegal goods and s[i] = '1' denotes that the ith car
- * does contain illegal goods.
- *
- * As the train conductor, you would like to get rid of all the cars containing illegal goods.
- * You can do any of the following three operations any number of times:
- * 1. Remove a train car from the left end (i.e., remove s[0]) which takes 1 unit of time.
- * 2. Remove a train car from the right end (i.e., remove s[s.length - 1]) which takes 1 unit
- * of time.
- * 3. Remove a train car from anywhere in the sequence which takes 2 units of time.
- *
- * Return the minimum time to remove all the cars containing illegal goods.
- *
- * Note that an empty sequence of cars is considered to have no cars containing illegal goods.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var minimumTime = function(s) {
- let leftCost = 0;
- let result = s.length;
-
- for (let i = 0; i < s.length; i++) {
- leftCost = Math.min(leftCost + (s[i] === '1' ? 2 : 0), i + 1);
- const rightCost = s.length - i - 1;
- result = Math.min(result, leftCost + rightCost);
- }
-
- return result;
-};
diff --git a/solutions/2169-count-operations-to-obtain-zero.js b/solutions/2169-count-operations-to-obtain-zero.js
deleted file mode 100644
index 428bd42a..00000000
--- a/solutions/2169-count-operations-to-obtain-zero.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2169. Count Operations to Obtain Zero
- * https://leetcode.com/problems/count-operations-to-obtain-zero/
- * Difficulty: Easy
- *
- * You are given two non-negative integers num1 and num2.
- *
- * In one operation, if num1 >= num2, you must subtract num2 from num1, otherwise subtract num1
- * from num2.
- * - For example, if num1 = 5 and num2 = 4, subtract num2 from num1, thus obtaining num1 = 1 and
- * num2 = 4. However, if num1 = 4 and num2 = 5, after one operation, num1 = 4 and num2 = 1.
- *
- * Return the number of operations required to make either num1 = 0 or num2 = 0.
- */
-
-/**
- * @param {number} num1
- * @param {number} num2
- * @return {number}
- */
-var countOperations = function(num1, num2) {
- let operations = 0;
-
- while (num1 !== 0 && num2 !== 0) {
- if (num1 >= num2) {
- num1 -= num2;
- } else {
- num2 -= num1;
- }
- operations++;
- }
-
- return operations;
-};
diff --git a/solutions/2170-minimum-operations-to-make-the-array-alternating.js b/solutions/2170-minimum-operations-to-make-the-array-alternating.js
deleted file mode 100644
index 770b6d62..00000000
--- a/solutions/2170-minimum-operations-to-make-the-array-alternating.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 2170. Minimum Operations to Make the Array Alternating
- * https://leetcode.com/problems/minimum-operations-to-make-the-array-alternating/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array nums consisting of n positive integers.
- *
- * The array nums is called alternating if:
- * - nums[i - 2] == nums[i], where 2 <= i <= n - 1.
- * - nums[i - 1] != nums[i], where 1 <= i <= n - 1.
- *
- * In one operation, you can choose an index i and change nums[i] into any positive integer.
- *
- * Return the minimum number of operations required to make the array alternating.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minimumOperations = function(nums) {
- const evenFreq = new Map();
- const oddFreq = new Map();
-
- if (nums.length <= 1) return 0;
- for (let i = 0; i < nums.length; i++) {
- if (i % 2 === 0) {
- evenFreq.set(nums[i], (evenFreq.get(nums[i]) || 0) + 1);
- } else {
- oddFreq.set(nums[i], (oddFreq.get(nums[i]) || 0) + 1);
- }
- }
-
- const evenTop = [...evenFreq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 2);
- const oddTop = [...oddFreq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 2);
- const evenTotal = Math.ceil(nums.length / 2);
- const oddTotal = Math.floor(nums.length / 2);
- let minOps = nums.length;
-
- for (const [evenNum, evenCount] of evenTop.length ? evenTop : [[0, 0]]) {
- for (const [oddNum, oddCount] of oddTop.length ? oddTop : [[0, 0]]) {
- if (evenNum !== oddNum || evenNum === 0) {
- minOps = Math.min(minOps, (evenTotal - evenCount) + (oddTotal - oddCount));
- }
- }
- }
-
- return minOps === nums.length ? Math.min(evenTotal, oddTotal) : minOps;
-};
diff --git a/solutions/2171-removing-minimum-number-of-magic-beans.js b/solutions/2171-removing-minimum-number-of-magic-beans.js
deleted file mode 100644
index 23fd2236..00000000
--- a/solutions/2171-removing-minimum-number-of-magic-beans.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2171. Removing Minimum Number of Magic Beans
- * https://leetcode.com/problems/removing-minimum-number-of-magic-beans/
- * Difficulty: Medium
- *
- * You are given an array of positive integers beans, where each integer represents the number
- * of magic beans found in a particular magic bag.
- *
- * Remove any number of beans (possibly none) from each bag such that the number of beans in
- * each remaining non-empty bag (still containing at least one bean) is equal. Once a bean
- * has been removed from a bag, you are not allowed to return it to any of the bags.
- *
- * Return the minimum number of magic beans that you have to remove.
- */
-
-/**
- * @param {number[]} beans
- * @return {number}
- */
-var minimumRemoval = function(beans) {
- const sortedBeans = beans.sort((a, b) => a - b);
- const totalBeans = sortedBeans.reduce((sum, bean) => sum + bean, 0);
- let result = totalBeans;
- let remaining = totalBeans;
-
- for (let i = 0; i < sortedBeans.length; i++) {
- remaining -= sortedBeans[i];
- const equalBags = sortedBeans.length - i;
- result = Math.min(result, totalBeans - sortedBeans[i] * equalBags);
- }
-
- return result;
-};
diff --git a/solutions/2172-maximum-and-sum-of-array.js b/solutions/2172-maximum-and-sum-of-array.js
deleted file mode 100644
index 6c9020d6..00000000
--- a/solutions/2172-maximum-and-sum-of-array.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2172. Maximum AND Sum of Array
- * https://leetcode.com/problems/maximum-and-sum-of-array/
- * Difficulty: Hard
- *
- * You are given an integer array nums of length n and an integer numSlots such that
- * 2 * numSlots >= n. There are numSlots slots numbered from 1 to numSlots.
- *
- * You have to place all n integers into the slots such that each slot contains at most
- * two numbers. The AND sum of a given placement is the sum of the bitwise AND of every
- * number with its respective slot number.
- * - For example, the AND sum of placing the numbers [1, 3] into slot 1 and [4, 6] into
- * slot 2 is equal to (1 AND 1) + (3 AND 1) + (4 AND 2) + (6 AND 2) = 1 + 1 + 0 + 2 = 4.
- *
- * Return the maximum possible AND sum of nums given numSlots slots.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} numSlots
- * @return {number}
- */
-var maximumANDSum = function(nums, numSlots) {
- const map = new Map();
-
- return dp(0, new Array(numSlots).fill(0));
-
- function dp(index, slots) {
- if (index >= nums.length) return 0;
-
- const key = `${index},${slots.join(',')}`;
- if (map.has(key)) return map.get(key);
-
- let result = 0;
- for (let i = 0; i < numSlots; i++) {
- if (slots[i] < 2) {
- slots[i]++;
- result = Math.max(result, (nums[index] & (i + 1)) + dp(index + 1, slots));
- slots[i]--;
- }
- }
-
- map.set(key, result);
- return result;
- }
-};
diff --git a/solutions/2176-count-equal-and-divisible-pairs-in-an-array.js b/solutions/2176-count-equal-and-divisible-pairs-in-an-array.js
deleted file mode 100644
index a0adb051..00000000
--- a/solutions/2176-count-equal-and-divisible-pairs-in-an-array.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2176. Count Equal and Divisible Pairs in an Array
- * https://leetcode.com/problems/count-equal-and-divisible-pairs-in-an-array/
- * Difficulty: Easy
- *
- * Given a 0-indexed integer array nums of length n and an integer k, return the number of
- * pairs (i, j) where 0 <= i < j < n, such that nums[i] == nums[j] and (i * j) is divisible by k.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countPairs = function(nums, k) {
- const frequencyMap = new Map();
- let result = 0;
-
- nums.forEach((num, index) => {
- if (frequencyMap.has(num)) {
- const values = frequencyMap.get(num);
- values.forEach(prevIndex => {
- if ((prevIndex * index) % k === 0) {
- result++;
- }
- });
- values.push(index);
- } else {
- frequencyMap.set(num, [index]);
- }
- });
-
- return result;
-};
diff --git a/solutions/2177-find-three-consecutive-integers-that-sum-to-a-given-number.js b/solutions/2177-find-three-consecutive-integers-that-sum-to-a-given-number.js
deleted file mode 100644
index f77b1221..00000000
--- a/solutions/2177-find-three-consecutive-integers-that-sum-to-a-given-number.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 2177. Find Three Consecutive Integers That Sum to a Given Number
- * https://leetcode.com/problems/find-three-consecutive-integers-that-sum-to-a-given-number/
- * Difficulty: Medium
- *
- * Given an integer num, return three consecutive integers (as a sorted array) that sum to num.
- * If num cannot be expressed as the sum of three consecutive integers, return an empty array.
- */
-
-/**
- * @param {number} num
- * @return {number[]}
- */
-var sumOfThree = function(num) {
- if (num % 3 !== 0) return [];
-
- const middle = num / 3;
- return [middle - 1, middle, middle + 1];
-};
diff --git a/solutions/2178-maximum-split-of-positive-even-integers.js b/solutions/2178-maximum-split-of-positive-even-integers.js
deleted file mode 100644
index 602b2ab7..00000000
--- a/solutions/2178-maximum-split-of-positive-even-integers.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2178. Maximum Split of Positive Even Integers
- * https://leetcode.com/problems/maximum-split-of-positive-even-integers/
- * Difficulty: Medium
- *
- * You are given an integer finalSum. Split it into a sum of a maximum number of unique
- * positive even integers.
- * - For example, given finalSum = 12, the following splits are valid (unique positive even
- * integers summing up to finalSum): (12), (2 + 10), (2 + 4 + 6), and (4 + 8). Among them,
- * (2 + 4 + 6) contains the maximum number of integers. Note that finalSum cannot be split
- * into (2 + 2 + 4 + 4) as all the numbers should be unique.
- *
- * Return a list of integers that represent a valid split containing a maximum number of
- * integers. If no valid split exists for finalSum, return an empty list. You may return
- * the integers in any order.
- */
-
-/**
- * @param {number} finalSum
- * @return {number[]}
- */
-var maximumEvenSplit = function(finalSum) {
- if (finalSum % 2 !== 0) return [];
-
- const result = [];
- let current = 2;
- let remaining = finalSum;
-
- while (remaining >= current) {
- if (remaining - current <= current) {
- result.push(remaining);
- return result;
- }
- result.push(current);
- remaining -= current;
- current += 2;
- }
-
- return result;
-};
diff --git a/solutions/2179-count-good-triplets-in-an-array.js b/solutions/2179-count-good-triplets-in-an-array.js
deleted file mode 100644
index 1046d371..00000000
--- a/solutions/2179-count-good-triplets-in-an-array.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 2179. Count Good Triplets in an Array
- * https://leetcode.com/problems/count-good-triplets-in-an-array/
- * Difficulty: Hard
- *
- * You are given two 0-indexed arrays nums1 and nums2 of length n, both of which are permutations
- * of [0, 1, ..., n - 1].
- *
- * A good triplet is a set of 3 distinct values which are present in increasing order by position
- * both in nums1 and nums2. In other words, if we consider pos1v as the index of the value v in
- * nums1 and pos2v as the index of the value v in nums2, then a good triplet will be a set (x, y, z)
- * where 0 <= x, y, z <= n - 1, such that pos1x < pos1y < pos1z and pos2x < pos2y < pos2z.
- *
- * Return the total number of good triplets.
- */
-
-/**
- * @param {number[]} nums1
- * @param {number[]} nums2
- * @return {number}
- */
-var goodTriplets = function(nums1, nums2) {
- const length = nums1.length;
- const pos1 = new Array(length);
- const pos2 = new Array(length);
-
- for (let i = 0; i < length; i++) {
- pos1[nums1[i]] = i;
- pos2[nums2[i]] = i;
- }
-
- const indices = new Array(length);
- for (let i = 0; i < length; i++) {
- indices[pos1[i]] = pos2[i];
- }
-
- const leftTree = new Array(length + 1).fill(0);
- const rightTree = new Array(length + 1).fill(0);
-
- let result = 0;
- for (let i = length - 1; i >= 0; i--) {
- const position = indices[i];
- update(rightTree, position, 1);
- }
-
- for (let i = 0; i < length; i++) {
- const position = indices[i];
- update(rightTree, position, -1);
- const smaller = query(leftTree, position);
- const larger = query(rightTree, length - 1) - query(rightTree, position);
- result += smaller * larger;
- update(leftTree, position, 1);
- }
-
- return result;
-
- function update(tree, index, delta) {
- for (let i = index + 1; i <= length; i += i & -i) {
- tree[i] += delta;
- }
- }
-
- function query(tree, index) {
- let sum = 0;
- for (let i = index + 1; i > 0; i -= i & -i) {
- sum += tree[i];
- }
- return sum;
- }
-};
diff --git a/solutions/2180-count-integers-with-even-digit-sum.js b/solutions/2180-count-integers-with-even-digit-sum.js
deleted file mode 100644
index c1a077e6..00000000
--- a/solutions/2180-count-integers-with-even-digit-sum.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2180. Count Integers With Even Digit Sum
- * https://leetcode.com/problems/count-integers-with-even-digit-sum/
- * Difficulty: Easy
- *
- * Given a positive integer num, return the number of positive integers less than or equal to num
- * whose digit sums are even.
- *
- * The digit sum of a positive integer is the sum of all its digits.
- */
-
-/**
- * @param {number} num
- * @return {number}
- */
-var countEven = function(num) {
- let result = 0;
-
- for (let i = 1; i <= num; i++) {
- let sum = 0;
- let current = i;
- while (current > 0) {
- sum += current % 10;
- current = Math.floor(current / 10);
- }
- if (sum % 2 === 0) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2181-merge-nodes-in-between-zeros.js b/solutions/2181-merge-nodes-in-between-zeros.js
deleted file mode 100644
index f5993c27..00000000
--- a/solutions/2181-merge-nodes-in-between-zeros.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2181. Merge Nodes in Between Zeros
- * https://leetcode.com/problems/merge-nodes-in-between-zeros/
- * Difficulty: Medium
- *
- * You are given the head of a linked list, which contains a series of integers separated
- * by 0's. The beginning and end of the linked list will have Node.val == 0.
- *
- * For every two consecutive 0's, merge all the nodes lying in between them into a single
- * node whose value is the sum of all the merged nodes. The modified list should not contain
- * any 0's.
- *
- * Return the head of the modified linked list.
- */
-
-/**
- * Definition for singly-linked list.
- * function ListNode(val, next) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- */
-/**
- * @param {ListNode} head
- * @return {ListNode}
- */
-var mergeNodes = function(head) {
- const result = new ListNode(0);
- let current = result;
- let sum = 0;
-
- head = head.next;
-
- while (head) {
- if (head.val === 0) {
- current.next = new ListNode(sum);
- current = current.next;
- sum = 0;
- } else {
- sum += head.val;
- }
- head = head.next;
- }
-
- return result.next;
-};
diff --git a/solutions/2183-count-array-pairs-divisible-by-k.js b/solutions/2183-count-array-pairs-divisible-by-k.js
deleted file mode 100644
index 96f923c4..00000000
--- a/solutions/2183-count-array-pairs-divisible-by-k.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2183. Count Array Pairs Divisible by K
- * https://leetcode.com/problems/count-array-pairs-divisible-by-k/
- * Difficulty: Hard
- *
- * Given a 0-indexed integer array nums of length n and an integer k, return the number
- * of pairs (i, j) such that:
- * - 0 <= i < j <= n - 1 and
- * - nums[i] * nums[j] is divisible by k.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countPairs = function(nums, k) {
- const map = new Map();
- let pairs = 0;
-
- for (const num of nums) {
- const gcd1 = gcd(num, k);
- for (const [gcd2, count] of map) {
- if ((gcd1 * gcd2) % k === 0) {
- pairs += count;
- }
- }
- map.set(gcd1, (map.get(gcd1) || 0) + 1);
- }
-
- return pairs;
-};
-
-function gcd(a, b) {
- while (b) {
- [a, b] = [b, a % b];
- }
- return a;
-}
diff --git a/solutions/2186-minimum-number-of-steps-to-make-two-strings-anagram-ii.js b/solutions/2186-minimum-number-of-steps-to-make-two-strings-anagram-ii.js
deleted file mode 100644
index 2501cbd5..00000000
--- a/solutions/2186-minimum-number-of-steps-to-make-two-strings-anagram-ii.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2186. Minimum Number of Steps to Make Two Strings Anagram II
- * https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram-ii/
- * Difficulty: Medium
- *
- * You are given two strings s and t. In one step, you can append any character to either s or t.
- *
- * Return the minimum number of steps to make s and t anagrams of each other.
- *
- * An anagram of a string is a string that contains the same characters with a different (or the
- * same) ordering.
- */
-
-/**
- * @param {string} s
- * @param {string} t
- * @return {number}
- */
-var minSteps = function(s, t) {
- const charCount = new Array(26).fill(0);
-
- for (const char of s) {
- charCount[char.charCodeAt(0) - 97]++;
- }
-
- for (const char of t) {
- charCount[char.charCodeAt(0) - 97]--;
- }
-
- let result = 0;
- for (const count of charCount) {
- result += Math.abs(count);
- }
-
- return result;
-};
diff --git a/solutions/2187-minimum-time-to-complete-trips.js b/solutions/2187-minimum-time-to-complete-trips.js
deleted file mode 100644
index 305712f8..00000000
--- a/solutions/2187-minimum-time-to-complete-trips.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2187. Minimum Time to Complete Trips
- * https://leetcode.com/problems/minimum-time-to-complete-trips/
- * Difficulty: Medium
- *
- * You are given an array time where time[i] denotes the time taken by the ith bus to complete
- * one trip.
- *
- * Each bus can make multiple trips successively; that is, the next trip can start immediately
- * after completing the current trip. Also, each bus operates independently; that is, the trips
- * of one bus do not influence the trips of any other bus.
- *
- * You are also given an integer totalTrips, which denotes the number of trips all buses should
- * make in total. Return the minimum time required for all buses to complete at least totalTrips
- * trips.
- */
-
-/**
- * @param {number[]} time
- * @param {number} totalTrips
- * @return {number}
- */
-var minimumTime = function(time, totalTrips) {
- let left = 1;
- let right = Math.min(...time) * totalTrips;
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- const trips = time.reduce((sum, t) => sum + Math.floor(mid / t), 0);
-
- if (trips >= totalTrips) {
- right = mid;
- } else {
- left = mid + 1;
- }
- }
-
- return left;
-};
diff --git a/solutions/2188-minimum-time-to-finish-the-race.js b/solutions/2188-minimum-time-to-finish-the-race.js
deleted file mode 100644
index fbce3d25..00000000
--- a/solutions/2188-minimum-time-to-finish-the-race.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 2188. Minimum Time to Finish the Race
- * https://leetcode.com/problems/minimum-time-to-finish-the-race/
- * Difficulty: Hard
- *
- * You are given a 0-indexed 2D integer array tires where tires[i] = [fi, ri] indicates that
- * the ith tire can finish its xth successive lap in fi * ri(x-1) seconds.
- * - For example, if fi = 3 and ri = 2, then the tire would finish its 1st lap in 3 seconds,
- * its 2nd lap in 3 * 2 = 6 seconds, its 3rd lap in 3 * 22 = 12 seconds, etc.
- *
- * You are also given an integer changeTime and an integer numLaps.
- *
- * The race consists of numLaps laps and you may start the race with any tire. You have an
- * unlimited supply of each tire and after every lap, you may change to any given tire (including
- * the current tire type) if you wait changeTime seconds.
- *
- * Return the minimum time to finish the race.
- */
-
-/**
- * @param {number[][]} tires
- * @param {number} changeTime
- * @param {number} numLaps
- * @return {number}
- */
-var minimumFinishTime = function(tires, changeTime, numLaps) {
- const minTimes = new Array(18).fill(Infinity);
- const bestTime = new Array(numLaps + 1).fill(Infinity);
-
- for (const [baseTime, multiplier] of tires) {
- let currentTime = baseTime;
- let totalTime = baseTime;
-
- for (let lap = 1; lap <= Math.min(numLaps, 17); lap++) {
- if (currentTime > changeTime + baseTime) break;
- minTimes[lap] = Math.min(minTimes[lap], totalTime);
- currentTime *= multiplier;
- totalTime += currentTime;
- }
- }
-
- bestTime[0] = 0;
-
- for (let lap = 1; lap <= numLaps; lap++) {
- for (let prev = 1; prev <= Math.min(lap, 17); prev++) {
- if (minTimes[prev] !== Infinity) {
- bestTime[lap] = Math.min(
- bestTime[lap],
- bestTime[lap - prev] + minTimes[prev] + (lap === prev ? 0 : changeTime)
- );
- }
- }
- }
-
- return bestTime[numLaps];
-};
diff --git a/solutions/2190-most-frequent-number-following-key-in-an-array.js b/solutions/2190-most-frequent-number-following-key-in-an-array.js
deleted file mode 100644
index b5485503..00000000
--- a/solutions/2190-most-frequent-number-following-key-in-an-array.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2190. Most Frequent Number Following Key In an Array
- * https://leetcode.com/problems/most-frequent-number-following-key-in-an-array/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums. You are also given an integer key, which is
- * present in nums.
- *
- * For every unique integer target in nums, count the number of times target immediately follows
- * an occurrence of key in nums. In other words, count the number of indices i such that:
- * - 0 <= i <= nums.length - 2,
- * - nums[i] == key and,
- * - nums[i + 1] == target.
- *
- * Return the target with the maximum count. The test cases will be generated such that the target
- * with maximum count is unique.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} key
- * @return {number}
- */
-var mostFrequent = function(nums, key) {
- const frequency = new Map();
- let maxCount = 0;
- let result = 0;
-
- for (let i = 0; i < nums.length - 1; i++) {
- if (nums[i] === key) {
- const target = nums[i + 1];
- const count = (frequency.get(target) || 0) + 1;
- frequency.set(target, count);
-
- if (count > maxCount) {
- maxCount = count;
- result = target;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2191-sort-the-jumbled-numbers.js b/solutions/2191-sort-the-jumbled-numbers.js
deleted file mode 100644
index 490e1d17..00000000
--- a/solutions/2191-sort-the-jumbled-numbers.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 2191. Sort the Jumbled Numbers
- * https://leetcode.com/problems/sort-the-jumbled-numbers/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array mapping which represents the mapping rule of a shuffled
- * decimal system. mapping[i] = j means digit i should be mapped to digit j in this system.
- *
- * The mapped value of an integer is the new integer obtained by replacing each occurrence of digit
- * i in the integer with mapping[i] for all 0 <= i <= 9.
- *
- * You are also given another integer array nums. Return the array nums sorted in non-decreasing
- * order based on the mapped values of its elements.
- *
- * Notes:
- * - Elements with the same mapped values should appear in the same relative order as in the input.
- * - The elements of nums should only be sorted based on their mapped values and not be replaced by
- * them.
- */
-
-/**
- * @param {number[]} mapping
- * @param {number[]} nums
- * @return {number[]}
- */
-var sortJumbled = function(mapping, nums) {
- const mapped = nums.map((num, index) => {
- let mappedNum = 0;
- let temp = num;
-
- if (temp === 0) {
- mappedNum = mapping[0];
- } else {
- const digits = [];
- while (temp > 0) {
- digits.push(mapping[temp % 10]);
- temp = Math.floor(temp / 10);
- }
- while (digits.length > 0) {
- mappedNum = mappedNum * 10 + digits.pop();
- }
- }
-
- return { original: num, mapped: mappedNum, index };
- });
-
- mapped.sort((a, b) => {
- if (a.mapped === b.mapped) return a.index - b.index;
- return a.mapped - b.mapped;
- });
-
- return mapped.map(item => item.original);
-};
diff --git a/solutions/2192-all-ancestors-of-a-node-in-a-directed-acyclic-graph.js b/solutions/2192-all-ancestors-of-a-node-in-a-directed-acyclic-graph.js
deleted file mode 100644
index 9eeb8509..00000000
--- a/solutions/2192-all-ancestors-of-a-node-in-a-directed-acyclic-graph.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 2192. All Ancestors of a Node in a Directed Acyclic Graph
- * https://leetcode.com/problems/all-ancestors-of-a-node-in-a-directed-acyclic-graph/
- * Difficulty: Medium
- *
- * You are given a positive integer n representing the number of nodes of a Directed Acyclic
- * Graph (DAG). The nodes are numbered from 0 to n - 1 (inclusive).
- *
- * You are also given a 2D integer array edges, where edges[i] = [fromi, toi] denotes that there
- * is a unidirectional edge from fromi to toi in the graph.
- *
- * Return a list answer, where answer[i] is the list of ancestors of the ith node, sorted in
- * ascending order.
- *
- * A node u is an ancestor of another node v if u can reach v via a set of edges.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @return {number[][]}
- */
-var getAncestors = function(n, edges) {
- const graph = Array.from({ length: n }, () => []);
- const ancestors = Array.from({ length: n }, () => new Set());
-
- for (const [from, to] of edges) {
- graph[to].push(from);
- }
-
- for (let i = 0; i < n; i++) {
- findAncestors(i);
- }
-
- return ancestors.map(set => [...set].sort((a, b) => a - b));
-
- function findAncestors(node) {
- if (ancestors[node].size > 0) return;
-
- for (const parent of graph[node]) {
- ancestors[node].add(parent);
- findAncestors(parent);
- for (const ancestor of ancestors[parent]) {
- ancestors[node].add(ancestor);
- }
- }
- }
-};
diff --git a/solutions/2193-minimum-number-of-moves-to-make-palindrome.js b/solutions/2193-minimum-number-of-moves-to-make-palindrome.js
deleted file mode 100644
index c25800e2..00000000
--- a/solutions/2193-minimum-number-of-moves-to-make-palindrome.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2193. Minimum Number of Moves to Make Palindrome
- * https://leetcode.com/problems/minimum-number-of-moves-to-make-palindrome/
- * Difficulty: Hard
- *
- * You are given a string s consisting only of lowercase English letters.
- *
- * In one move, you can select any two adjacent characters of s and swap them.
- *
- * Return the minimum number of moves needed to make s a palindrome.
- *
- * Note that the input will be generated such that s can always be converted to a palindrome.
- */
-
-/**
-* @param {string} s
-* @return {number}
-*/
-var minMovesToMakePalindrome = function(s) {
- const chars = s.split('');
- let moves = 0;
-
- while (chars.length > 1) {
- const matchIndex = chars.lastIndexOf(chars[0]);
-
- if (matchIndex === 0) {
- const middlePos = Math.floor(chars.length / 2);
- moves += middlePos;
- chars.splice(0, 1);
- } else {
- for (let i = matchIndex; i < chars.length - 1; i++) {
- [chars[i], chars[i + 1]] = [chars[i + 1], chars[i]];
- moves++;
- }
-
- chars.pop();
- chars.shift();
- }
- }
-
- return moves;
-};
diff --git a/solutions/2194-cells-in-a-range-on-an-excel-sheet.js b/solutions/2194-cells-in-a-range-on-an-excel-sheet.js
deleted file mode 100644
index 194c60cc..00000000
--- a/solutions/2194-cells-in-a-range-on-an-excel-sheet.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2194. Cells in a Range on an Excel Sheet
- * https://leetcode.com/problems/cells-in-a-range-on-an-excel-sheet/
- * Difficulty: Easy
- *
- * A cell (r, c) of an excel sheet is represented as a string "" where:
- * - denotes the column number c of the cell. It is represented by alphabetical letters.
- * - For example, the 1st column is denoted by 'A', the 2nd by 'B', the 3rd by 'C', and so on.
- * - is the row number r of the cell. The rth row is represented by the integer r.
- * - You are given a string s in the format ":", where represents
- * the column c1, represents the row r1, represents the column c2, and
- * represents the row r2, such that r1 <= r2 and c1 <= c2.
- *
- * Return the list of cells (x, y) such that r1 <= x <= r2 and c1 <= y <= c2. The cells should
- * be represented as strings in the format mentioned above and be sorted in non-decreasing order
- * first by columns and then by rows.
- */
-
-/**
- * @param {string} s
- * @return {string[]}
- */
-var cellsInRange = function(s) {
- const result = [];
- const startCol = s.charCodeAt(0);
- const endCol = s.charCodeAt(3);
- const startRow = parseInt(s[1], 10);
- const endRow = parseInt(s[4], 10);
-
- for (let col = startCol; col <= endCol; col++) {
- for (let row = startRow; row <= endRow; row++) {
- result.push(String.fromCharCode(col) + row);
- }
- }
-
- return result;
-};
diff --git a/solutions/2195-append-k-integers-with-minimal-sum.js b/solutions/2195-append-k-integers-with-minimal-sum.js
deleted file mode 100644
index bc873455..00000000
--- a/solutions/2195-append-k-integers-with-minimal-sum.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2195. Append K Integers With Minimal Sum
- * https://leetcode.com/problems/append-k-integers-with-minimal-sum/
- * Difficulty: Medium
- *
- * You are given an integer array nums and an integer k. Append k unique positive integers that do
- * not appear in nums to nums such that the resulting total sum is minimum.
- *
- * Return the sum of the k integers appended to nums.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var minimalKSum = function(nums, k) {
- const sortedUnique = [...new Set(nums)].sort((a, b) => a - b);
- let sum = BigInt(0);
- let current = 1;
- let i = 0;
-
- while (k > 0 && i < sortedUnique.length) {
- if (current < sortedUnique[i]) {
- const count = Math.min(k, sortedUnique[i] - current);
- sum += (BigInt(current) + BigInt(current + count - 1)) * BigInt(count) / BigInt(2);
- k -= count;
- current += count;
- } else {
- current = sortedUnique[i] + 1;
- i++;
- }
- }
-
- if (k > 0) {
- sum += (BigInt(current) + BigInt(current + k - 1)) * BigInt(k) / BigInt(2);
- }
-
- return Number(sum);
-};
diff --git a/solutions/2196-create-binary-tree-from-descriptions.js b/solutions/2196-create-binary-tree-from-descriptions.js
deleted file mode 100644
index 67af6416..00000000
--- a/solutions/2196-create-binary-tree-from-descriptions.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 2196. Create Binary Tree From Descriptions
- * https://leetcode.com/problems/create-binary-tree-from-descriptions/
- * Difficulty: Medium
- *
- * You are given a 2D integer array descriptions where descriptions[i] = [parenti, childi, isLefti]
- * indicates that parenti is the parent of childi in a binary tree of unique values. Furthermore,
- * - If isLefti == 1, then childi is the left child of parenti.
- * - If isLefti == 0, then childi is the right child of parenti.
- *
- * Construct the binary tree described by descriptions and return its root.
- *
- * The test cases will be generated such that the binary tree is valid.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {number[][]} descriptions
- * @return {TreeNode}
- */
-var createBinaryTree = function(descriptions) {
- const nodes = new Map();
- const children = new Set();
-
- for (const [parent, child, isLeft] of descriptions) {
- if (!nodes.has(parent)) {
- nodes.set(parent, new TreeNode(parent));
- }
- if (!nodes.has(child)) {
- nodes.set(child, new TreeNode(child));
- }
- children.add(child);
- if (isLeft) {
- nodes.get(parent).left = nodes.get(child);
- } else {
- nodes.get(parent).right = nodes.get(child);
- }
- }
-
- for (const [val, node] of nodes) {
- if (!children.has(val)) {
- return node;
- }
- }
-
- return null;
-};
diff --git a/solutions/2197-replace-non-coprime-numbers-in-array.js b/solutions/2197-replace-non-coprime-numbers-in-array.js
deleted file mode 100644
index 2bc8e2d5..00000000
--- a/solutions/2197-replace-non-coprime-numbers-in-array.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 2197. Replace Non-Coprime Numbers in Array
- * https://leetcode.com/problems/replace-non-coprime-numbers-in-array/
- * Difficulty: Hard
- *
- * You are given an array of integers nums. Perform the following steps:
- * 1. Find any two adjacent numbers in nums that are non-coprime.
- * 2. If no such numbers are found, stop the process.
- * 3. Otherwise, delete the two numbers and replace them with their LCM (Least Common Multiple).
- * 4. Repeat this process as long as you keep finding two adjacent non-coprime numbers.
- *
- * Return the final modified array. It can be shown that replacing adjacent non-coprime numbers in
- * any arbitrary order will lead to the same result.
- *
- * The test cases are generated such that the values in the final array are less than or equal to
- * 108.
- *
- * Two values x and y are non-coprime if GCD(x, y) > 1 where GCD(x, y) is the Greatest Common
- * Divisor of x and y.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var replaceNonCoprimes = function(nums) {
- const result = [];
-
- for (let num of nums) {
- while (result.length > 0) {
- const last = result[result.length - 1];
- const gcdValue = gcd(last, num);
- if (gcdValue === 1) break;
- result.pop();
- num = (last / gcdValue) * num;
- }
- result.push(num);
- }
-
- return result;
-};
-
-function gcd(a, b) {
- while (b) {
- [a, b] = [b, a % b];
- }
- return a;
-}
diff --git a/solutions/2200-find-all-k-distant-indices-in-an-array.js b/solutions/2200-find-all-k-distant-indices-in-an-array.js
deleted file mode 100644
index 5a2cd1bd..00000000
--- a/solutions/2200-find-all-k-distant-indices-in-an-array.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2200. Find All K-Distant Indices in an Array
- * https://leetcode.com/problems/find-all-k-distant-indices-in-an-array/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums and two integers key and k. A k-distant index
- * is an index i of nums for which there exists at least one index j such that |i - j| <= k
- * and nums[j] == key.
- *
- * Return a list of all k-distant indices sorted in increasing order.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} key
- * @param {number} k
- * @return {number[]}
- */
-var findKDistantIndices = function(nums, key, k) {
- const result = new Set();
-
- for (let j = 0; j < nums.length; j++) {
- if (nums[j] === key) {
- for (let i = Math.max(0, j - k); i <= Math.min(nums.length - 1, j + k); i++) {
- result.add(i);
- }
- }
- }
-
- return [...result].sort((a, b) => a - b);
-};
diff --git a/solutions/2201-count-artifacts-that-can-be-extracted.js b/solutions/2201-count-artifacts-that-can-be-extracted.js
deleted file mode 100644
index cd5f5627..00000000
--- a/solutions/2201-count-artifacts-that-can-be-extracted.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 2201. Count Artifacts That Can Be Extracted
- * https://leetcode.com/problems/count-artifacts-that-can-be-extracted/
- * Difficulty: Medium
- *
- * There is an n x n 0-indexed grid with some artifacts buried in it. You are given the integer
- * n and a 0-indexed 2D integer array artifacts describing the positions of the rectangular
- * artifacts where artifacts[i] = [r1i, c1i, r2i, c2i] denotes that the ith artifact is buried
- * in the subgrid where:
- * - (r1i, c1i) is the coordinate of the top-left cell of the ith artifact and
- * - (r2i, c2i) is the coordinate of the bottom-right cell of the ith artifact.
- *
- * You will excavate some cells of the grid and remove all the mud from them. If the cell has a
- * part of an artifact buried underneath, it will be uncovered. If all the parts of an artifact
- * are uncovered, you can extract it.
- *
- * Given a 0-indexed 2D integer array dig where dig[i] = [ri, ci] indicates that you will excavate
- * the cell (ri, ci), return the number of artifacts that you can extract.
- *
- * The test cases are generated such that:
- * - No two artifacts overlap.
- * - Each artifact only covers at most 4 cells.
- * - The entries of dig are unique.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} artifacts
- * @param {number[][]} dig
- * @return {number}
- */
-var digArtifacts = function(n, artifacts, dig) {
- const excavated = new Set();
- let result = 0;
-
- for (const [row, col] of dig) {
- excavated.add(`${row},${col}`);
- }
-
- for (const [r1, c1, r2, c2] of artifacts) {
- let allUncovered = true;
-
- for (let r = r1; r <= r2; r++) {
- for (let c = c1; c <= c2; c++) {
- if (!excavated.has(`${r},${c}`)) {
- allUncovered = false;
- break;
- }
- }
- if (!allUncovered) break;
- }
-
- if (allUncovered) result++;
- }
-
- return result;
-};
diff --git a/solutions/2202-maximize-the-topmost-element-after-k-moves.js b/solutions/2202-maximize-the-topmost-element-after-k-moves.js
deleted file mode 100644
index 8b1554b2..00000000
--- a/solutions/2202-maximize-the-topmost-element-after-k-moves.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2202. Maximize the Topmost Element After K Moves
- * https://leetcode.com/problems/maximize-the-topmost-element-after-k-moves/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums representing the contents of a pile, where nums[0]
- * is the topmost element of the pile.
- *
- * In one move, you can perform either of the following:
- * - If the pile is not empty, remove the topmost element of the pile.
- * - If there are one or more removed elements, add any one of them back onto the pile. This element
- * becomes the new topmost element.
- *
- * You are also given an integer k, which denotes the total number of moves to be made.
- *
- * Return the maximum value of the topmost element of the pile possible after exactly k moves. In
- * case it is not possible to obtain a non-empty pile after k moves, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var maximumTop = function(nums, k) {
- const n = nums.length;
-
- if (n === 1 && k % 2 === 1) return -1;
- if (k === 0) return nums[0];
- if (k === 1) return n > 1 ? nums[1] : -1;
-
- let result = 0;
- for (let i = 0; i < Math.min(k - 1, n); i++) {
- result = Math.max(result, nums[i]);
- }
-
- if (k < n) {
- result = Math.max(result, nums[k]);
- }
-
- return result;
-};
diff --git a/solutions/2203-minimum-weighted-subgraph-with-the-required-paths.js b/solutions/2203-minimum-weighted-subgraph-with-the-required-paths.js
deleted file mode 100644
index 4ace48ff..00000000
--- a/solutions/2203-minimum-weighted-subgraph-with-the-required-paths.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 2203. Minimum Weighted Subgraph With the Required Paths
- * https://leetcode.com/problems/minimum-weighted-subgraph-with-the-required-paths/
- * Difficulty: Hard
- *
- * You are given an integer n denoting the number of nodes of a weighted directed graph. The nodes
- * are numbered from 0 to n - 1.
- *
- * You are also given a 2D integer array edges where edges[i] = [fromi, toi, weighti] denotes that
- * there exists a directed edge from fromi to toi with weight weighti.
- *
- * Lastly, you are given three distinct integers src1, src2, and dest denoting three distinct nodes
- * of the graph.
- *
- * Return the minimum weight of a subgraph of the graph such that it is possible to reach dest from
- * both src1 and src2 via a set of edges of this subgraph. In case such a subgraph does not exist,
- * return -1.
- *
- * A subgraph is a graph whose vertices and edges are subsets of the original graph. The weight of
- * a subgraph is the sum of weights of its constituent edges.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @param {number} src1
- * @param {number} src2
- * @param {number} dest
- * @return {number}
- */
-var minimumWeight = function(n, edges, src1, src2, dest) {
- const forwardGraph = Array.from({ length: n }, () => []);
- const reverseGraph = Array.from({ length: n }, () => []);
-
- for (const [from, to, weight] of edges) {
- forwardGraph[from].push([to, weight]);
- reverseGraph[to].push([from, weight]);
- }
-
- const distFromSrc1 = dijkstra(forwardGraph, src1);
- const distFromSrc2 = dijkstra(forwardGraph, src2);
- const distToDest = dijkstra(reverseGraph, dest);
- let minWeight = Infinity;
- for (let i = 0; i < n; i++) {
- if (distFromSrc1[i] !== Infinity && distFromSrc2[i] !== Infinity
- && distToDest[i] !== Infinity) {
- minWeight = Math.min(minWeight, distFromSrc1[i] + distFromSrc2[i] + distToDest[i]);
- }
- }
-
- return minWeight === Infinity ? -1 : minWeight;
-
- function dijkstra(graph, start) {
- const distances = new Array(n).fill(Infinity);
- distances[start] = 0;
- const pq = new PriorityQueue((a, b) => a[0] - b[0]);
- pq.enqueue([0, start]);
-
- while (!pq.isEmpty()) {
- const [dist, node] = pq.dequeue();
- if (dist > distances[node]) continue;
-
- for (const [next, weight] of graph[node]) {
- if (distances[next] > dist + weight) {
- distances[next] = dist + weight;
- pq.enqueue([distances[next], next]);
- }
- }
- }
-
- return distances;
- }
-};
diff --git a/solutions/2206-divide-array-into-equal-pairs.js b/solutions/2206-divide-array-into-equal-pairs.js
deleted file mode 100644
index 6a2765e0..00000000
--- a/solutions/2206-divide-array-into-equal-pairs.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2206. Divide Array Into Equal Pairs
- * https://leetcode.com/problems/divide-array-into-equal-pairs/
- * Difficulty: Easy
- *
- * You are given an integer array nums consisting of 2 * n integers.
- *
- * You need to divide nums into n pairs such that:
- * - Each element belongs to exactly one pair.
- * - The elements present in a pair are equal.
- *
- * Return true if nums can be divided into n pairs, otherwise return false.
- */
-
-/**
- * @param {number[]} nums
- * @return {boolean}
- */
-/**
- * @param {number[]} nums
- * @return {boolean}
- */
-var divideArray = function(nums) {
- const map = new Map();
-
- for (const num of nums) {
- map.set(num, (map.get(num) || 0) + 1);
- }
- for (const count of map.values()) {
- if (count % 2 !== 0) {
- return false;
- }
- }
-
- return true;
-};
diff --git a/solutions/2207-maximize-number-of-subsequences-in-a-string.js b/solutions/2207-maximize-number-of-subsequences-in-a-string.js
deleted file mode 100644
index d7ad35a6..00000000
--- a/solutions/2207-maximize-number-of-subsequences-in-a-string.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2207. Maximize Number of Subsequences in a String
- * https://leetcode.com/problems/maximize-number-of-subsequences-in-a-string/
- * Difficulty: Medium
- *
- * You are given a 0-indexed string text and another 0-indexed string pattern of length 2, both
- * of which consist of only lowercase English letters.
- *
- * You can add either pattern[0] or pattern[1] anywhere in text exactly once. Note that the
- * character can be added even at the beginning or at the end of text.
- *
- * Return the maximum number of times pattern can occur as a subsequence of the modified text.
- *
- * A subsequence is a string that can be derived from another string by deleting some or no
- * characters without changing the order of the remaining characters.
- */
-
-/**
- * @param {string} text
- * @param {string} pattern
- * @return {number}
- */
-var maximumSubsequenceCount = function(text, pattern) {
- const firstChar = pattern[0];
- const secondChar = pattern[1];
- let firstCount = 0;
- let secondCount = 0;
- let subsequences = 0;
-
- for (const char of text) {
- if (char === secondChar) {
- subsequences += firstCount;
- secondCount++;
- }
- if (char === firstChar) {
- firstCount++;
- }
- }
-
- return subsequences + Math.max(firstCount, secondCount);
-};
diff --git a/solutions/2209-minimum-white-tiles-after-covering-with-carpets.js b/solutions/2209-minimum-white-tiles-after-covering-with-carpets.js
deleted file mode 100644
index 08fb5fd3..00000000
--- a/solutions/2209-minimum-white-tiles-after-covering-with-carpets.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2209. Minimum White Tiles After Covering With Carpets
- * https://leetcode.com/problems/minimum-white-tiles-after-covering-with-carpets/
- * Difficulty: Hard
- *
- * You are given a 0-indexed binary string floor, which represents the colors of tiles on a floor:
- * - floor[i] = '0' denotes that the ith tile of the floor is colored black.
- * - On the other hand, floor[i] = '1' denotes that the ith tile of the floor is colored white.
- *
- * You are also given numCarpets and carpetLen. You have numCarpets black carpets, each of length
- * carpetLen tiles. Cover the tiles with the given carpets such that the number of white tiles
- * still visible is minimum. Carpets may overlap one another.
- *
- * Return the minimum number of white tiles still visible.
- */
-
-/**
- * @param {string} floor
- * @param {number} numCarpets
- * @param {number} carpetLen
- * @return {number}
- */
-var minimumWhiteTiles = function(floor, numCarpets, carpetLen) {
- const n = floor.length;
- const dp = Array.from({ length: n + 1 }, () => Array(numCarpets + 1).fill(0));
-
- for (let i = 1; i <= n; i++) {
- for (let j = 0; j <= numCarpets; j++) {
- const skip = dp[i - 1][j] + (floor[i - 1] === '1' ? 1 : 0);
- const cover = j > 0 ? dp[Math.max(0, i - carpetLen)][j - 1] : Infinity;
- dp[i][j] = Math.min(skip, cover);
- }
- }
-
- return dp[n][numCarpets];
-};
diff --git a/solutions/2210-count-hills-and-valleys-in-an-array.js b/solutions/2210-count-hills-and-valleys-in-an-array.js
deleted file mode 100644
index 388d78f5..00000000
--- a/solutions/2210-count-hills-and-valleys-in-an-array.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2210. Count Hills and Valleys in an Array
- * https://leetcode.com/problems/count-hills-and-valleys-in-an-array/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums. An index i is part of a hill in nums if the
- * closest non-equal neighbors of i are smaller than nums[i]. Similarly, an index i is part
- * of a valley in nums if the closest non-equal neighbors of i are larger than nums[i].
- * Adjacent indices i and j are part of the same hill or valley if nums[i] == nums[j].
- *
- * Note that for an index to be part of a hill or valley, it must have a non-equal neighbor
- * on both the left and right of the index.
- *
- * Return the number of hills and valleys in nums.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var countHillValley = function(nums) {
- let count = 0;
- let prev = nums[0];
-
- for (let i = 1; i < nums.length - 1; i++) {
- if (nums[i] === nums[i + 1]) continue;
- const left = prev;
- const right = nums[i + 1];
-
- if ((nums[i] > left && nums[i] > right) || (nums[i] < left && nums[i] < right)) {
- count++;
- }
-
- prev = nums[i];
- }
-
- return count;
-};
diff --git a/solutions/2211-count-collisions-on-a-road.js b/solutions/2211-count-collisions-on-a-road.js
deleted file mode 100644
index acbd8920..00000000
--- a/solutions/2211-count-collisions-on-a-road.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2211. Count Collisions on a Road
- * https://leetcode.com/problems/count-collisions-on-a-road/
- * Difficulty: Medium
- *
- * There are n cars on an infinitely long road. The cars are numbered from 0 to n - 1 from left
- * to right and each car is present at a unique point.
- *
- * You are given a 0-indexed string directions of length n. directions[i] can be either 'L', 'R',
- * or 'S' denoting whether the ith car is moving towards the left, towards the right, or staying
- * at its current point respectively. Each moving car has the same speed.
- *
- * The number of collisions can be calculated as follows:
- * - When two cars moving in opposite directions collide with each other, the number of collisions
- * increases by 2.
- * - When a moving car collides with a stationary car, the number of collisions increases by 1.
- *
- * After a collision, the cars involved can no longer move and will stay at the point where they
- * collided. Other than that, cars cannot change their state or direction of motion.
- *
- * Return the total number of collisions that will happen on the road.
- */
-
-/**
- * @param {string} directions
- * @return {number}
- */
-var countCollisions = function(directions) {
- let result = 0;
- let left = 0;
- let right = directions.length - 1;
-
- while (left < directions.length && directions[left] === 'L') left++;
- while (right >= 0 && directions[right] === 'R') right--;
-
- for (let i = left; i <= right; i++) {
- if (directions[i] !== 'S') result++;
- }
-
- return result;
-};
diff --git a/solutions/2212-maximum-points-in-an-archery-competition.js b/solutions/2212-maximum-points-in-an-archery-competition.js
deleted file mode 100644
index 2c09fc29..00000000
--- a/solutions/2212-maximum-points-in-an-archery-competition.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 2212. Maximum Points in an Archery Competition
- * https://leetcode.com/problems/maximum-points-in-an-archery-competition/
- * Difficulty: Medium
- *
- * Alice and Bob are opponents in an archery competition. The competition has set the
- * following rules:
- * 1. Alice first shoots numArrows arrows and then Bob shoots numArrows arrows.
- * 2. The points are then calculated as follows:
- * 1. The target has integer scoring sections ranging from 0 to 11 inclusive.
- * 2. For each section of the target with score k (in between 0 to 11), say Alice and Bob have
- * shot ak and bk arrows on that section respectively. If ak >= bk, then Alice takes k points.
- * If ak < bk, then Bob takes k points.
- * 3. However, if ak == bk == 0, then nobody takes k points.
- * - For example, if Alice and Bob both shot 2 arrows on the section with score 11, then Alice takes
- * 11 points. On the other hand, if Alice shot 0 arrows on the section with score 11 and Bob shot
- * 2 arrows on that same section, then Bob takes 11 points.
- *
- * You are given the integer numArrows and an integer array aliceArrows of size 12, which represents
- * the number of arrows Alice shot on each scoring section from 0 to 11. Now, Bob wants to maximize
- * the total number of points he can obtain.
- *
- * Return the array bobArrows which represents the number of arrows Bob shot on each scoring section
- * from 0 to 11. The sum of the values in bobArrows should equal numArrows.
- *
- * If there are multiple ways for Bob to earn the maximum total points, return any one of them.
- */
-
-/**
- * @param {number} numArrows
- * @param {number[]} aliceArrows
- * @return {number[]}
- */
-var maximumBobPoints = function(numArrows, aliceArrows) {
- let maxScore = 0;
- let bestConfig = new Array(12).fill(0);
-
- backtrack(1, numArrows, 0, new Array(12).fill(0));
- return bestConfig;
-
- function backtrack(index, arrowsLeft, score, config) {
- if (index === 12 || arrowsLeft === 0) {
- if (score > maxScore) {
- maxScore = score;
- bestConfig = [...config];
- bestConfig[0] += arrowsLeft;
- }
- return;
- }
-
- const needed = aliceArrows[index] + 1;
- if (arrowsLeft >= needed) {
- config[index] = needed;
- backtrack(index + 1, arrowsLeft - needed, score + index, config);
- config[index] = 0;
- }
-
- backtrack(index + 1, arrowsLeft, score, config);
- }
-};
diff --git a/solutions/2213-longest-substring-of-one-repeating-character.js b/solutions/2213-longest-substring-of-one-repeating-character.js
deleted file mode 100644
index ca5e006d..00000000
--- a/solutions/2213-longest-substring-of-one-repeating-character.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * 2213. Longest Substring of One Repeating Character
- * https://leetcode.com/problems/longest-substring-of-one-repeating-character/
- * Difficulty: Hard
- *
- * You are given a 0-indexed string s. You are also given a 0-indexed string queryCharacters of
- * length k and a 0-indexed array of integer indices queryIndices of length k, both of which are
- * used to describe k queries.
- *
- * The ith query updates the character in s at index queryIndices[i] to the character
- * queryCharacters[i].
- *
- * Return an array lengths of length k where lengths[i] is the length of the longest substring of
- * s consisting of only one repeating character after the ith query is performed.
- */
-
-/**
-* @param {string} s
-* @param {string} queryCharacters
-* @param {number[]} queryIndices
-* @return {number[]}
-*/
-var longestRepeating = function(s, queryCharacters, queryIndices) {
- const chars = s.split('');
- const n = chars.length;
- const k = queryIndices.length;
- const result = [];
-
- class Node {
- constructor() {
- this.left = 0;
- this.right = 0;
- this.max = 0;
- this.total = 0;
- }
- }
-
- const tree = new Array(4 * n);
- for (let i = 0; i < 4 * n; i++) {
- tree[i] = new Node();
- }
-
- function buildTree(node, start, end) {
- if (start === end) {
- tree[node].left = 1;
- tree[node].right = 1;
- tree[node].max = 1;
- tree[node].total = 1;
- return;
- }
-
- const mid = Math.floor((start + end) / 2);
- buildTree(2 * node, start, mid);
- buildTree(2 * node + 1, mid + 1, end);
-
- updateNode(node, start, end);
- }
-
- function updateNode(node, start, end) {
- const leftChild = 2 * node;
- const rightChild = 2 * node + 1;
- const mid = Math.floor((start + end) / 2);
-
- tree[node].total = tree[leftChild].total + tree[rightChild].total;
-
- if (tree[leftChild].total === tree[leftChild].left
- && mid + 1 <= end && chars[mid] === chars[mid + 1]) {
- tree[node].left = tree[leftChild].total + tree[rightChild].left;
- } else {
- tree[node].left = tree[leftChild].left;
- }
-
- if (tree[rightChild].total === tree[rightChild].right
- && mid >= start && chars[mid] === chars[mid + 1]) {
- tree[node].right = tree[rightChild].total + tree[leftChild].right;
- } else {
- tree[node].right = tree[rightChild].right;
- }
-
- tree[node].max = Math.max(tree[leftChild].max, tree[rightChild].max);
-
- if (mid >= start && mid + 1 <= end && chars[mid] === chars[mid + 1]) {
- tree[node].max = Math.max(tree[node].max,
- tree[leftChild].right + tree[rightChild].left);
- }
- }
-
- function update(node, start, end, index) {
- if (index < start || index > end) {
- return;
- }
-
- if (start === end) {
- return;
- }
-
- const mid = Math.floor((start + end) / 2);
- update(2 * node, start, mid, index);
- update(2 * node + 1, mid + 1, end, index);
-
- updateNode(node, start, end);
- }
-
- buildTree(1, 0, n - 1);
-
- for (let q = 0; q < k; q++) {
- const index = queryIndices[q];
- const newChar = queryCharacters[q];
-
- chars[index] = newChar;
- update(1, 0, n - 1, index);
-
- result.push(tree[1].max);
- }
-
- return result;
-};
diff --git a/solutions/2216-minimum-deletions-to-make-array-beautiful.js b/solutions/2216-minimum-deletions-to-make-array-beautiful.js
deleted file mode 100644
index 7cb1012e..00000000
--- a/solutions/2216-minimum-deletions-to-make-array-beautiful.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2216. Minimum Deletions to Make Array Beautiful
- * https://leetcode.com/problems/minimum-deletions-to-make-array-beautiful/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums. The array nums is beautiful if:
- * - nums.length is even.
- * - nums[i] != nums[i + 1] for all i % 2 == 0.
- *
- * Note that an empty array is considered beautiful.
- *
- * You can delete any number of elements from nums. When you delete an element, all the elements
- * to the right of the deleted element will be shifted one unit to the left to fill the gap
- * created and all the elements to the left of the deleted element will remain unchanged.
- *
- * Return the minimum number of elements to delete from nums to make it beautiful.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minDeletion = function(nums) {
- let result = 0;
- let i = 0;
-
- while (i < nums.length - 1) {
- if (nums[i] === nums[i + 1]) {
- result++;
- i++;
- } else {
- i += 2;
- }
- }
-
- if ((nums.length - result) % 2 !== 0) {
- result++;
- }
-
- return result;
-};
diff --git a/solutions/2217-find-palindrome-with-fixed-length.js b/solutions/2217-find-palindrome-with-fixed-length.js
deleted file mode 100644
index 4e6a83aa..00000000
--- a/solutions/2217-find-palindrome-with-fixed-length.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2217. Find Palindrome With Fixed Length
- * https://leetcode.com/problems/find-palindrome-with-fixed-length/
- * Difficulty: Medium
- *
- * Given an integer array queries and a positive integer intLength, return an array answer where
- * answer[i] is either the queries[i]th smallest positive palindrome of length intLength or -1
- * if no such palindrome exists.
- *
- * A palindrome is a number that reads the same backwards and forwards. Palindromes cannot have
- * leading zeros.
- */
-
-/**
- * @param {number[]} queries
- * @param {number} intLength
- * @return {number[]}
- */
-var kthPalindrome = function(queries, intLength) {
- const halfLength = Math.ceil(intLength / 2);
- const maxPalindromes = Math.pow(10, halfLength - 1) * 9;
-
- return queries.map(generatePalindrome);
-
- function generatePalindrome(query) {
- if (query > maxPalindromes) return -1;
-
- let firstHalf = Math.pow(10, halfLength - 1) + query - 1;
- let result = firstHalf;
-
- if (intLength % 2 === 1) firstHalf = Math.floor(firstHalf / 10);
-
- while (firstHalf > 0) {
- result = result * 10 + (firstHalf % 10);
- firstHalf = Math.floor(firstHalf / 10);
- }
-
- return result;
- }
-};
diff --git a/solutions/2218-maximum-value-of-k-coins-from-piles.js b/solutions/2218-maximum-value-of-k-coins-from-piles.js
deleted file mode 100644
index 743b4b17..00000000
--- a/solutions/2218-maximum-value-of-k-coins-from-piles.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2218. Maximum Value of K Coins From Piles
- * https://leetcode.com/problems/maximum-value-of-k-coins-from-piles/
- * Difficulty: Hard
- *
- * There are n piles of coins on a table. Each pile consists of a positive number of coins of
- * assorted denominations.
- *
- * In one move, you can choose any coin on top of any pile, remove it, and add it to your wallet.
- *
- * Given a list piles, where piles[i] is a list of integers denoting the composition of the ith
- * pile from top to bottom, and a positive integer k, return the maximum total value of coins
- * you can have in your wallet if you choose exactly k coins optimally.
- */
-
-/**
- * @param {number[][]} piles
- * @param {number} k
- * @return {number}
- */
-var maxValueOfCoins = function(piles, k) {
- const n = piles.length;
- const dp = Array.from({ length: n + 1 }, () => new Array(k + 1).fill(-1));
-
- return maximize(0, k);
-
- function maximize(pileIndex, remainingCoins) {
- if (pileIndex === n || remainingCoins === 0) return 0;
- if (dp[pileIndex][remainingCoins] !== -1) return dp[pileIndex][remainingCoins];
-
- let maxValue = maximize(pileIndex + 1, remainingCoins);
- let currentSum = 0;
-
- for (let i = 0; i < Math.min(piles[pileIndex].length, remainingCoins); i++) {
- currentSum += piles[pileIndex][i];
- maxValue = Math.max(
- maxValue,
- currentSum + maximize(pileIndex + 1, remainingCoins - (i + 1))
- );
- }
-
- return dp[pileIndex][remainingCoins] = maxValue;
- }
-};
diff --git a/solutions/2220-minimum-bit-flips-to-convert-number.js b/solutions/2220-minimum-bit-flips-to-convert-number.js
deleted file mode 100644
index 28e0a9da..00000000
--- a/solutions/2220-minimum-bit-flips-to-convert-number.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 2220. Minimum Bit Flips to Convert Number
- * https://leetcode.com/problems/minimum-bit-flips-to-convert-number/
- * Difficulty: Easy
- *
- * A bit flip of a number x is choosing a bit in the binary representation of x and flipping it
- * from either 0 to 1 or 1 to 0.
- * - For example, for x = 7, the binary representation is 111 and we may choose any bit (including
- * any leading zeros not shown) and flip it. We can flip the first bit from the right to get 110,
- * flip the second bit from the right to get 101, flip the fifth bit from the right (a leading
- * zero) to get 10111, etc.
- *
- * Given two integers start and goal, return the minimum number of bit flips to convert start to
- * goal.
- */
-
-/**
- * @param {number} start
- * @param {number} goal
- * @return {number}
- */
-var minBitFlips = function(start, goal) {
- return (start ^ goal).toString(2).replace(/0+/g, '').length;
-};
diff --git a/solutions/2221-find-triangular-sum-of-an-array.js b/solutions/2221-find-triangular-sum-of-an-array.js
deleted file mode 100644
index 3ef02fcd..00000000
--- a/solutions/2221-find-triangular-sum-of-an-array.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2221. Find Triangular Sum of an Array
- * https://leetcode.com/problems/find-triangular-sum-of-an-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums, where nums[i] is a digit between 0 and
- * 9 (inclusive).
- *
- * The triangular sum of nums is the value of the only element present in nums after the
- * following process terminates:
- * 1. Let nums comprise of n elements. If n == 1, end the process. Otherwise, create a new
- * 0-indexed integer array newNums of length n - 1.
- * 2. For each index i, where 0 <= i < n - 1, assign the value of newNums[i] as
- * (nums[i] + nums[i+1]) % 10, where % denotes modulo operator.
- * 3. Replace the array nums with newNums.
- * 4. Repeat the entire process starting from step 1.
- *
- * Return the triangular sum of nums.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var triangularSum = function(nums) {
- while (nums.length > 1) {
- const updated = [];
- for (let i = 0; i < nums.length - 1; i++) {
- updated.push((nums[i] + nums[i + 1]) % 10);
- }
- nums = updated;
- }
- return nums[0];
-};
diff --git a/solutions/2222-number-of-ways-to-select-buildings.js b/solutions/2222-number-of-ways-to-select-buildings.js
deleted file mode 100644
index 012573fc..00000000
--- a/solutions/2222-number-of-ways-to-select-buildings.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 2222. Number of Ways to Select Buildings
- * https://leetcode.com/problems/number-of-ways-to-select-buildings/
- * Difficulty: Medium
- *
- * You are given a 0-indexed binary string s which represents the types of buildings along
- * a street where:
- * - s[i] = '0' denotes that the ith building is an office and
- * - s[i] = '1' denotes that the ith building is a restaurant.
- *
- * As a city official, you would like to select 3 buildings for random inspection. However, to
- * ensure variety, no two consecutive buildings out of the selected buildings can be of the same
- * type.
- * - For example, given s = "001101", we cannot select the 1st, 3rd, and 5th buildings as that
- * would form "011" which is not allowed due to having two consecutive buildings of the same type.
- *
- * Return the number of valid ways to select 3 buildings.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var numberOfWays = function(s) {
- const prefixCounts = [[0, 0]];
- let zeros = 0;
- let ones = 0;
-
- for (const char of s) {
- if (char === '0') zeros++;
- else ones++;
- prefixCounts.push([zeros, ones]);
- }
-
- let result = 0;
- for (let i = 1; i < s.length - 1; i++) {
- if (s[i] === '0') {
- const leftOnes = prefixCounts[i][1];
- const rightOnes = prefixCounts[s.length][1] - prefixCounts[i + 1][1];
- result += leftOnes * rightOnes;
- } else {
- const leftZeros = prefixCounts[i][0];
- const rightZeros = prefixCounts[s.length][0] - prefixCounts[i + 1][0];
- result += leftZeros * rightZeros;
- }
- }
-
- return result;
-};
diff --git a/solutions/2223-sum-of-scores-of-built-strings.js b/solutions/2223-sum-of-scores-of-built-strings.js
deleted file mode 100644
index 4b5110cc..00000000
--- a/solutions/2223-sum-of-scores-of-built-strings.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2223. Sum of Scores of Built Strings
- * https://leetcode.com/problems/sum-of-scores-of-built-strings/
- * Difficulty: Hard
- *
- * You are building a string s of length n one character at a time, prepending each new character
- * to the front of the string. The strings are labeled from 1 to n, where the string with length
- * i is labeled si.
- * - For example, for s = "abaca", s1 == "a", s2 == "ca", s3 == "aca", etc.
- *
- * The score of si is the length of the longest common prefix between si and sn (Note that s == sn).
- *
- * Given the final string s, return the sum of the score of every si.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var sumScores = function(s) {
- const n = s.length;
- const z = new Array(n).fill(0);
- let left = 0;
- let right = 0;
-
- for (let i = 1; i < n; i++) {
- if (i <= right) {
- z[i] = Math.min(right - i + 1, z[i - left]);
- }
- while (i + z[i] < n && s[z[i]] === s[i + z[i]]) {
- z[i]++;
- }
- if (i + z[i] - 1 > right) {
- left = i;
- right = i + z[i] - 1;
- }
- }
-
- return z.reduce((sum, val) => sum + val, n);
-};
diff --git a/solutions/2224-minimum-number-of-operations-to-convert-time.js b/solutions/2224-minimum-number-of-operations-to-convert-time.js
deleted file mode 100644
index 95b7a154..00000000
--- a/solutions/2224-minimum-number-of-operations-to-convert-time.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2224. Minimum Number of Operations to Convert Time
- * https://leetcode.com/problems/minimum-number-of-operations-to-convert-time/
- * Difficulty: Easy
- *
- * You are given two strings current and correct representing two 24-hour times.
- *
- * 24-hour times are formatted as "HH:MM", where HH is between 00 and 23, and MM is between 00
- * and 59. The earliest 24-hour time is 00:00, and the latest is 23:59.
- *
- * In one operation you can increase the time current by 1, 5, 15, or 60 minutes. You can perform
- * this operation any number of times.
- *
- * Return the minimum number of operations needed to convert current to correct.
- */
-
-/**
- * @param {string} current
- * @param {string} correct
- * @return {number}
- */
-var convertTime = function(current, correct) {
- const toMinutes = time => {
- const [hours, minutes] = time.split(':').map(Number);
- return hours * 60 + minutes;
- };
-
- let diff = toMinutes(correct) - toMinutes(current);
- const increments = [60, 15, 5, 1];
- let result = 0;
-
- for (const increment of increments) {
- result += Math.floor(diff / increment);
- diff %= increment;
- }
-
- return result;
-};
diff --git a/solutions/2225-find-players-with-zero-or-one-losses.js b/solutions/2225-find-players-with-zero-or-one-losses.js
deleted file mode 100644
index 3182523e..00000000
--- a/solutions/2225-find-players-with-zero-or-one-losses.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2225. Find Players With Zero or One Losses
- * https://leetcode.com/problems/find-players-with-zero-or-one-losses/
- * Difficulty: Medium
- *
- * You are given an integer array matches where matches[i] = [winneri, loseri] indicates that
- * the player winneri defeated player loseri in a match.
- *
- * Return a list answer of size 2 where:
- * - answer[0] is a list of all players that have not lost any matches.
- * - answer[1] is a list of all players that have lost exactly one match.
- *
- * The values in the two lists should be returned in increasing order.
- *
- * Note:
- * - You should only consider the players that have played at least one match.
- * - The testcases will be generated such that no two matches will have the same outcome.
- */
-
-/**
- * @param {number[][]} matches
- * @return {number[][]}
- */
-var findWinners = function(matches) {
- const lossCount = new Map();
-
- for (const [winner, loser] of matches) {
- lossCount.set(winner, lossCount.get(winner) || 0);
- lossCount.set(loser, (lossCount.get(loser) || 0) + 1);
- }
-
- const noLosses = [];
- const oneLoss = [];
-
- for (const [player, losses] of lossCount) {
- if (losses === 0) noLosses.push(player);
- else if (losses === 1) oneLoss.push(player);
- }
-
- return [
- noLosses.sort((a, b) => a - b),
- oneLoss.sort((a, b) => a - b)
- ];
-};
diff --git a/solutions/2226-maximum-candies-allocated-to-k-children.js b/solutions/2226-maximum-candies-allocated-to-k-children.js
deleted file mode 100644
index 98f340a4..00000000
--- a/solutions/2226-maximum-candies-allocated-to-k-children.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2226. Maximum Candies Allocated to K Children
- * https://leetcode.com/problems/maximum-candies-allocated-to-k-children/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array candies. Each element in the array denotes a pile of
- * candies of size candies[i]. You can divide each pile into any number of sub piles, but you
- * cannot merge two piles together.
- *
- * You are also given an integer k. You should allocate piles of candies to k children such that
- * each child gets the same number of candies. Each child can be allocated candies from only one
- * pile of candies and some piles of candies may go unused.
- *
- * Return the maximum number of candies each child can get.
- */
-
-/**
- * @param {number[]} candies
- * @param {number} k
- * @return {number}
- */
-var maximumCandies = function(candies, k) {
- let left = 0;
- let right = 1e7 + 1;
-
- while (left + 1 !== right) {
- const middle = Math.floor((left + right) / 2);
- let piles = 0;
- for (const candy of candies) {
- piles += Math.floor(candy / middle);
- }
- if (piles >= k) {
- left = middle;
- } else {
- right = middle;
- }
- }
-
- return left;
-};
diff --git a/solutions/2227-encrypt-and-decrypt-strings.js b/solutions/2227-encrypt-and-decrypt-strings.js
deleted file mode 100644
index fd773ffb..00000000
--- a/solutions/2227-encrypt-and-decrypt-strings.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 2227. Encrypt and Decrypt Strings
- * https://leetcode.com/problems/encrypt-and-decrypt-strings/
- * Difficulty: Hard
- *
- * You are given a character array keys containing unique characters and a string array values
- * containing strings of length 2. You are also given another string array dictionary that
- * contains all permitted original strings after decryption. You should implement a data structure
- * that can encrypt or decrypt a 0-indexed string.
- *
- * A string is encrypted with the following process:
- * 1. For each character c in the string, we find the index i satisfying keys[i] == c in keys.
- * 2. Replace c with values[i] in the string.
- *
- * Note that in case a character of the string is not present in keys, the encryption process cannot
- * be carried out, and an empty string "" is returned.
- *
- * A string is decrypted with the following process:
- * 1. For each substring s of length 2 occurring at an even index in the string, we find an i such
- * that values[i] == s. If there are multiple valid i, we choose any one of them. This means a
- * string could have multiple possible strings it can decrypt to.
- * 2. Replace s with keys[i] in the string.
- *
- * Implement the Encrypter class:
- * - Encrypter(char[] keys, String[] values, String[] dictionary) Initializes the Encrypter class
- * with keys, values, and dictionary.
- * - String encrypt(String word1) Encrypts word1 with the encryption process described above and
- * returns the encrypted string.
- * - int decrypt(String word2) Returns the number of possible strings word2 could decrypt to that
- * also appear in dictionary.
- */
-
-/**
- * @param {character[]} keys
- * @param {string[]} values
- * @param {string[]} dictionary
- */
-var Encrypter = function(keys, values, dictionary) {
- this.encryptMap = new Map();
- this.validEncryptions = new Map();
-
- for (let i = 0; i < keys.length; i++) {
- this.encryptMap.set(keys[i], values[i]);
- }
-
- for (const word of dictionary) {
- const encrypted = this.encrypt(word);
- if (encrypted !== '') {
- this.validEncryptions.set(encrypted, (this.validEncryptions.get(encrypted) || 0) + 1);
- }
- }
-};
-
-/**
- * @param {string} word1
- * @return {string}
- */
-Encrypter.prototype.encrypt = function(word1) {
- let result = '';
-
- for (const char of word1) {
- if (!this.encryptMap.has(char)) {
- return '';
- }
- result += this.encryptMap.get(char);
- }
-
- return result;
-};
-
-/**
- * @param {string} word2
- * @return {number}
- */
-Encrypter.prototype.decrypt = function(word2) {
- return this.validEncryptions.get(word2) || 0;
-};
diff --git a/solutions/2232-minimize-result-by-adding-parentheses-to-expression.js b/solutions/2232-minimize-result-by-adding-parentheses-to-expression.js
deleted file mode 100644
index f32f3fd9..00000000
--- a/solutions/2232-minimize-result-by-adding-parentheses-to-expression.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2232. Minimize Result by Adding Parentheses to Expression
- * https://leetcode.com/problems/minimize-result-by-adding-parentheses-to-expression/
- * Difficulty: Medium
- *
- * You are given a 0-indexed string expression of the form "+" where
- * and represent positive integers.
- *
- * Add a pair of parentheses to expression such that after the addition of parentheses,
- * expression is a valid mathematical expression and evaluates to the smallest possible
- * value. The left parenthesis must be added to the left of '+' and the right parenthesis
- * must be added to the right of '+'.
- *
- * Return expression after adding a pair of parentheses such that expression evaluates to the
- * smallest possible value. If there are multiple answers that yield the same result, return
- * any of them.
- *
- * The input has been generated such that the original value of expression, and the value of
- * expression after adding any pair of parentheses that meets the requirements fits within
- * a signed 32-bit integer.
- */
-
-/**
- * @param {string} expression
- * @return {string}
- */
-var minimizeResult = function(expression) {
- const plusIndex = expression.indexOf('+');
- const left = expression.slice(0, plusIndex);
- const right = expression.slice(plusIndex + 1);
- let minValue = Infinity;
- let result = '';
-
- for (let i = 0; i < left.length; i++) {
- for (let j = 1; j <= right.length; j++) {
- const leftPrefix = i === 0 ? 1 : parseInt(left.slice(0, i));
- const leftNum = parseInt(left.slice(i), 10);
- const rightNum = parseInt(right.slice(0, j), 10);
- const rightSuffix = j === right.length ? 1 : parseInt(right.slice(j), 10);
- const value = leftPrefix * (leftNum + rightNum) * rightSuffix;
-
- if (value < minValue) {
- minValue = value;
- result = `${left.slice(0, i)}(${left.slice(i)}+${right.slice(0, j)})${right.slice(j)}`;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2234-maximum-total-beauty-of-the-gardens.js b/solutions/2234-maximum-total-beauty-of-the-gardens.js
deleted file mode 100644
index 54985527..00000000
--- a/solutions/2234-maximum-total-beauty-of-the-gardens.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * 2234. Maximum Total Beauty of the Gardens
- * https://leetcode.com/problems/maximum-total-beauty-of-the-gardens/
- * Difficulty: Hard
- *
- * Alice is a caretaker of n gardens and she wants to plant flowers to maximize the total
- * beauty of all her gardens.
- *
- * You are given a 0-indexed integer array flowers of size n, where flowers[i] is the number
- * of flowers already planted in the ith garden. Flowers that are already planted cannot be
- * removed. You are then given another integer newFlowers, which is the maximum number of
- * flowers that Alice can additionally plant. You are also given the integers target, full,
- * and partial.
- *
- * A garden is considered complete if it has at least target flowers. The total beauty of the
- * gardens is then determined as the sum of the following:
- * - The number of complete gardens multiplied by full.
- * - The minimum number of flowers in any of the incomplete gardens multiplied by partial.
- * If there are no incomplete gardens, then this value will be 0.
- *
- * Return the maximum total beauty that Alice can obtain after planting at most newFlowers flowers.
- */
-
-/**
- * @param {number[]} flowers
- * @param {number} newFlowers
- * @param {number} target
- * @param {number} full
- * @param {number} partial
- * @return {number}
- */
-var maximumBeauty = function(flowers, newFlowers, target, full, partial) {
- const n = flowers.length;
- flowers.sort((a, b) => b - a);
-
- const suffixCost = Array(n + 1).fill(0);
- let lastUniqueIndex = n - 1;
- let minIndex = n - 2;
-
- for (; minIndex >= 0; --minIndex) {
- if (flowers[minIndex] >= target) break;
-
- const flowerDiff = flowers[minIndex] - flowers[minIndex + 1];
- const gardenCount = n - lastUniqueIndex;
- suffixCost[minIndex] = suffixCost[minIndex + 1] + flowerDiff * gardenCount;
-
- if (suffixCost[minIndex] > newFlowers) break;
-
- if (flowers[minIndex] !== flowers[minIndex - 1]) {
- lastUniqueIndex = minIndex;
- }
- }
-
- ++minIndex;
-
- const remainingFlowersForMin = newFlowers - suffixCost[minIndex];
- const gardenCountForMin = n - minIndex;
- let minFlowerValue = Math.min(
- target - 1,
- flowers[minIndex] + Math.floor(remainingFlowersForMin / gardenCountForMin)
- );
-
- let result = 0;
-
- for (let i = 0; i < n; ++i) {
- if (flowers[i] >= target) {
- continue;
- }
-
- const currentBeauty = i * full + minFlowerValue * partial;
- result = Math.max(result, currentBeauty);
-
- const flowersNeeded = target - flowers[i];
- if (flowersNeeded > newFlowers) break;
-
- newFlowers -= flowersNeeded;
- flowers[i] = target;
-
- while (
- minIndex <= i || newFlowers < suffixCost[minIndex]
- || (minIndex > 0 && flowers[minIndex] === flowers[minIndex - 1])
- ) {
- ++minIndex;
- }
-
- const updatedRemaining = newFlowers - suffixCost[minIndex];
- const updatedGardenCount = n - minIndex;
- minFlowerValue = Math.min(
- target - 1,
- flowers[minIndex] + Math.floor(updatedRemaining / updatedGardenCount)
- );
- }
-
- if (flowers[n - 1] >= target) {
- result = Math.max(result, n * full);
- }
-
- return result;
-};
diff --git a/solutions/2236-root-equals-sum-of-children.js b/solutions/2236-root-equals-sum-of-children.js
deleted file mode 100644
index fa9a3cd9..00000000
--- a/solutions/2236-root-equals-sum-of-children.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 2236. Root Equals Sum of Children
- * https://leetcode.com/problems/root-equals-sum-of-children/
- * Difficulty: Easy
- *
- * You are given the root of a binary tree that consists of exactly 3 nodes: the root, its
- * left child, and its right child.
- *
- * Return true if the value of the root is equal to the sum of the values of its two children,
- * or false otherwise.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode} root
- * @return {boolean}
- */
-var checkTree = function(root) {
- return root.val === root.left.val + root.right.val;
-};
diff --git a/solutions/2239-find-closest-number-to-zero.js b/solutions/2239-find-closest-number-to-zero.js
deleted file mode 100644
index 56d07d8e..00000000
--- a/solutions/2239-find-closest-number-to-zero.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 2239. Find Closest Number to Zero
- * https://leetcode.com/problems/find-closest-number-to-zero/
- * Difficulty: Easy
- *
- * Given an integer array nums of size n, return the number with the value closest to 0 in nums.
- * If there are multiple answers, return the number with the largest value.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var findClosestNumber = function(nums) {
- let result = nums[0];
- let minDistance = Math.abs(nums[0]);
-
- for (const num of nums) {
- const distance = Math.abs(num);
- if (distance < minDistance || (distance === minDistance && num > result)) {
- minDistance = distance;
- result = num;
- }
- }
-
- return result;
-};
diff --git a/solutions/2240-number-of-ways-to-buy-pens-and-pencils.js b/solutions/2240-number-of-ways-to-buy-pens-and-pencils.js
deleted file mode 100644
index b55f1cff..00000000
--- a/solutions/2240-number-of-ways-to-buy-pens-and-pencils.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2240. Number of Ways to Buy Pens and Pencils
- * https://leetcode.com/problems/number-of-ways-to-buy-pens-and-pencils/
- * Difficulty: Medium
- *
- * You are given an integer total indicating the amount of money you have. You are also given
- * two integers cost1 and cost2 indicating the price of a pen and pencil respectively. You can
- * spend part or all of your money to buy multiple quantities (or none) of each kind of writing
- * utensil.
- *
- * Return the number of distinct ways you can buy some number of pens and pencils.
- */
-
-/**
- * @param {number} total
- * @param {number} cost1
- * @param {number} cost2
- * @return {number}
- */
-var waysToBuyPensPencils = function(total, cost1, cost2) {
- let result = 0;
- const maxPens = Math.floor(total / cost1);
-
- for (let pens = 0; pens <= maxPens; pens++) {
- const remaining = total - pens * cost1;
- const pencils = Math.floor(remaining / cost2);
- result += pencils + 1;
- }
-
- return result;
-};
diff --git a/solutions/2241-design-an-atm-machine.js b/solutions/2241-design-an-atm-machine.js
deleted file mode 100644
index 4a5afa87..00000000
--- a/solutions/2241-design-an-atm-machine.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 2241. Design an ATM Machine
- * https://leetcode.com/problems/design-an-atm-machine/
- * Difficulty: Medium
- *
- * There is an ATM machine that stores banknotes of 5 denominations: 20, 50, 100, 200, and
- * 500 dollars. Initially the ATM is empty. The user can use the machine to deposit or
- * withdraw any amount of money.
- *
- * When withdrawing, the machine prioritizes using banknotes of larger values.
- * - For example, if you want to withdraw $300 and there are 2 $50 banknotes, 1 $100 banknote,
- * and 1 $200 banknote, then the machine will use the $100 and $200 banknotes.
- * - However, if you try to withdraw $600 and there are 3 $200 banknotes and 1 $500 banknote,
- * then the withdraw request will be rejected because the machine will first try to use the
- * $500 banknote and then be unable to use banknotes to complete the remaining $100. Note
- * that the machine is not allowed to use the $200 banknotes instead of the $500 banknote.
- *
- * Implement the ATM class:
- * - ATM() Initializes the ATM object.
- * - void deposit(int[] banknotesCount) Deposits new banknotes in the order $20, $50, $100,
- * $200, and $500.
- * - int[] withdraw(int amount) Returns an array of length 5 of the number of banknotes that
- * will be handed to the user in the order $20, $50, $100, $200, and $500, and update the
- * number of banknotes in the ATM after withdrawing. Returns [-1] if it is not possible (do
- * not withdraw any banknotes in this case).
- */
-
-var ATM = function() {
- this.denominations = [20, 50, 100, 200, 500];
- this.notes = [0, 0, 0, 0, 0];
-};
-
-/**
- * @param {number[]} banknotesCount
- * @return {void}
- */
-ATM.prototype.deposit = function(banknotesCount) {
- for (let i = 0; i < 5; i++) {
- this.notes[i] += banknotesCount[i];
- }
-};
-
-/**
- * @param {number} amount
- * @return {number[]}
- */
-ATM.prototype.withdraw = function(amount) {
- const result = [0, 0, 0, 0, 0];
- let remaining = amount;
-
- for (let i = 4; i >= 0; i--) {
- const count = Math.min(Math.floor(remaining / this.denominations[i]), this.notes[i]);
- result[i] = count;
- remaining -= count * this.denominations[i];
- }
-
- if (remaining !== 0) return [-1];
-
- for (let i = 0; i < 5; i++) {
- this.notes[i] -= result[i];
- }
-
- return result;
-};
diff --git a/solutions/2242-maximum-score-of-a-node-sequence.js b/solutions/2242-maximum-score-of-a-node-sequence.js
deleted file mode 100644
index b64c16ce..00000000
--- a/solutions/2242-maximum-score-of-a-node-sequence.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 2242. Maximum Score of a Node Sequence
- * https://leetcode.com/problems/maximum-score-of-a-node-sequence/
- * Difficulty: Hard
- *
- * There is an undirected graph with n nodes, numbered from 0 to n - 1.
- *
- * You are given a 0-indexed integer array scores of length n where scores[i] denotes the score
- * of node i. You are also given a 2D integer array edges where edges[i] = [ai, bi] denotes that
- * there exists an undirected edge connecting nodes ai and bi.
- *
- * A node sequence is valid if it meets the following conditions:
- * - There is an edge connecting every pair of adjacent nodes in the sequence.
- * - No node appears more than once in the sequence.
- *
- * The score of a node sequence is defined as the sum of the scores of the nodes in the sequence.
- *
- * Return the maximum score of a valid node sequence with a length of 4. If no such sequence exists,
- * return -1.
- */
-
-/**
- * @param {number[]} scores
- * @param {number[][]} edges
- * @return {number}
- */
-var maximumScore = function(scores, edges) {
- const n = scores.length;
- const graph = new Array(n).fill().map(() => []);
-
- for (const [a, b] of edges) {
- graph[a].push(b);
- graph[b].push(a);
- }
-
- for (let i = 0; i < n; i++) {
- graph[i].sort((a, b) => scores[b] - scores[a]);
- if (graph[i].length > 3) {
- graph[i] = graph[i].slice(0, 3);
- }
- }
-
- let result = -1;
- for (const [a, b] of edges) {
- for (const c of graph[a]) {
- if (c === b) continue;
- for (const d of graph[b]) {
- if (d === a || d === c) continue;
- result = Math.max(result, scores[a] + scores[b] + scores[c] + scores[d]);
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2243-calculate-digit-sum-of-a-string.js b/solutions/2243-calculate-digit-sum-of-a-string.js
deleted file mode 100644
index 293438ed..00000000
--- a/solutions/2243-calculate-digit-sum-of-a-string.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2243. Calculate Digit Sum of a String
- * https://leetcode.com/problems/calculate-digit-sum-of-a-string/
- * Difficulty: Easy
- *
- * You are given a string s consisting of digits and an integer k.
- *
- * A round can be completed if the length of s is greater than k. In one round, do the following:
- * 1. Divide s into consecutive groups of size k such that the first k characters are in the first
- * group, the next k characters are in the second group, and so on. Note that the size of the
- * last group can be smaller than k.
- * 2. Replace each group of s with a string representing the sum of all its digits. For example,
- * "346" is replaced with "13" because 3 + 4 + 6 = 13.
- * 3. Merge consecutive groups together to form a new string. If the length of the string is greater
- * than k, repeat from step 1.
- *
- * Return s after all rounds have been completed.
- */
-
-/**
- * @param {string} s
- * @param {number} k
- * @return {string}
- */
-var digitSum = function(s, k) {
- while (s.length > k) {
- let next = '';
- for (let i = 0; i < s.length; i += k) {
- const group = s.slice(i, i + k);
- const sum = group.split('').reduce((acc, digit) => acc + Number(digit), 0);
- next += sum;
- }
- s = next;
- }
- return s;
-};
diff --git a/solutions/2245-maximum-trailing-zeros-in-a-cornered-path.js b/solutions/2245-maximum-trailing-zeros-in-a-cornered-path.js
deleted file mode 100644
index 7f18ed32..00000000
--- a/solutions/2245-maximum-trailing-zeros-in-a-cornered-path.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * 2245. Maximum Trailing Zeros in a Cornered Path
- * https://leetcode.com/problems/maximum-trailing-zeros-in-a-cornered-path/
- * Difficulty: Medium
- *
- * You are given a 2D integer array grid of size m x n, where each cell contains a positive integer.
- *
- * A cornered path is defined as a set of adjacent cells with at most one turn. More specifically,
- * the path should exclusively move either horizontally or vertically up to the turn (if there is
- * one), without returning to a previously visited cell. After the turn, the path will then move
- * exclusively in the alternate direction: move vertically if it moved horizontally, and vice versa,
- * also without returning to a previously visited cell.
- *
- * The product of a path is defined as the product of all the values in the path.
- *
- * Return the maximum number of trailing zeros in the product of a cornered path found in grid.
- *
- * Note:
- * - Horizontal movement means moving in either the left or right direction.
- * - Vertical movement means moving in either the up or down direction.
- */
-
-/**
- * @param {number[][]} grid
- * @return {number}
- */
-var maxTrailingZeros = function(grid) {
- const m = grid.length;
- const n = grid[0].length;
-
- function countFactors(num) {
- let count2 = 0;
- let count5 = 0;
-
- while (num % 2 === 0) {
- count2++;
- num = Math.floor(num / 2);
- }
-
- while (num % 5 === 0) {
- count5++;
- num = Math.floor(num / 5);
- }
-
- return [count2, count5];
- }
-
- const factors = new Array(m).fill().map(() => new Array(n).fill().map(() => [0, 0]));
- for (let i = 0; i < m; i++) {
- for (let j = 0; j < n; j++) {
- factors[i][j] = countFactors(grid[i][j]);
- }
- }
-
- const rowPrefix = new Array(m).fill().map(() => new Array(n + 1).fill().map(() => [0, 0]));
- for (let i = 0; i < m; i++) {
- for (let j = 0; j < n; j++) {
- rowPrefix[i][j + 1][0] = rowPrefix[i][j][0] + factors[i][j][0];
- rowPrefix[i][j + 1][1] = rowPrefix[i][j][1] + factors[i][j][1];
- }
- }
-
- const colPrefix = new Array(m + 1).fill().map(() => new Array(n).fill().map(() => [0, 0]));
- for (let j = 0; j < n; j++) {
- for (let i = 0; i < m; i++) {
- colPrefix[i + 1][j][0] = colPrefix[i][j][0] + factors[i][j][0];
- colPrefix[i + 1][j][1] = colPrefix[i][j][1] + factors[i][j][1];
- }
- }
-
- let maxZeros = 0;
- for (let i = 0; i < m; i++) {
- for (let j = 0; j < n; j++) {
- const [count2, count5] = factors[i][j];
-
- const leftUp = [
- rowPrefix[i][j][0] + colPrefix[i][j][0],
- rowPrefix[i][j][1] + colPrefix[i][j][1]
- ];
-
- const leftDown = [
- rowPrefix[i][j][0] + (colPrefix[m][j][0] - colPrefix[i + 1][j][0]),
- rowPrefix[i][j][1] + (colPrefix[m][j][1] - colPrefix[i + 1][j][1])
- ];
-
- const rightUp = [
- (rowPrefix[i][n][0] - rowPrefix[i][j + 1][0]) + colPrefix[i][j][0],
- (rowPrefix[i][n][1] - rowPrefix[i][j + 1][1]) + colPrefix[i][j][1]
- ];
-
- const rightDown = [
- (rowPrefix[i][n][0] - rowPrefix[i][j + 1][0])
- + (colPrefix[m][j][0] - colPrefix[i + 1][j][0]),
- (rowPrefix[i][n][1] - rowPrefix[i][j + 1][1])
- + (colPrefix[m][j][1] - colPrefix[i + 1][j][1])
- ];
-
- const paths = [
- [leftUp[0] + count2, leftUp[1] + count5],
- [leftDown[0] + count2, leftDown[1] + count5],
- [rightUp[0] + count2, rightUp[1] + count5],
- [rightDown[0] + count2, rightDown[1] + count5]
- ];
-
- for (const [path2, path5] of paths) {
- maxZeros = Math.max(maxZeros, Math.min(path2, path5));
- }
- }
- }
-
- return maxZeros;
-};
diff --git a/solutions/2246-longest-path-with-different-adjacent-characters.js b/solutions/2246-longest-path-with-different-adjacent-characters.js
deleted file mode 100644
index 4eb8cb53..00000000
--- a/solutions/2246-longest-path-with-different-adjacent-characters.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 2246. Longest Path With Different Adjacent Characters
- * https://leetcode.com/problems/longest-path-with-different-adjacent-characters/
- * Difficulty: Hard
- *
- * You are given a tree (i.e. a connected, undirected graph that has no cycles) rooted at node
- * 0 consisting of n nodes numbered from 0 to n - 1. The tree is represented by a 0-indexed array
- * parent of size n, where parent[i] is the parent of node i. Since node 0 is the root,
- * parent[0] == -1.
- *
- * You are also given a string s of length n, where s[i] is the character assigned to node i.
- *
- * Return the length of the longest path in the tree such that no pair of adjacent nodes on the path
- * have the same character assigned to them.
- */
-
-/**
- * @param {number[]} parent
- * @param {string} s
- * @return {number}
- */
-var longestPath = function(parent, s) {
- const n = parent.length;
- const children = Array.from({ length: n }, () => []);
- let result = 1;
-
- for (let i = 1; i < n; i++) {
- children[parent[i]].push(i);
- }
-
- findLongest(0);
-
- return result;
-
- function findLongest(node) {
- let longest = 0;
- let secondLongest = 0;
-
- for (const child of children[node]) {
- const length = findLongest(child);
- if (s[child] !== s[node]) {
- if (length > longest) {
- secondLongest = longest;
- longest = length;
- } else if (length > secondLongest) {
- secondLongest = length;
- }
- }
- }
-
- result = Math.max(result, longest + secondLongest + 1);
- return longest + 1;
- }
-};
diff --git a/solutions/2248-intersection-of-multiple-arrays.js b/solutions/2248-intersection-of-multiple-arrays.js
deleted file mode 100644
index fa162656..00000000
--- a/solutions/2248-intersection-of-multiple-arrays.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2248. Intersection of Multiple Arrays
- * https://leetcode.com/problems/intersection-of-multiple-arrays/
- * Difficulty: Easy
- *
- * Given a 2D integer array nums where nums[i] is a non-empty array of distinct positive integers,
- * return the list of integers that are present in each array of nums sorted in ascending order.
- */
-
-/**
- * @param {number[][]} nums
- * @return {number[]}
- */
-var intersection = function(nums) {
- const count = new Map();
-
- for (const array of nums) {
- for (const num of array) {
- count.set(num, (count.get(num) || 0) + 1);
- }
- }
-
- const result = [];
- for (const [num, freq] of count) {
- if (freq === nums.length) {
- result.push(num);
- }
- }
-
- return result.sort((a, b) => a - b);
-};
diff --git a/solutions/2249-count-lattice-points-inside-a-circle.js b/solutions/2249-count-lattice-points-inside-a-circle.js
deleted file mode 100644
index 2c762806..00000000
--- a/solutions/2249-count-lattice-points-inside-a-circle.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2249. Count Lattice Points Inside a Circle
- * https://leetcode.com/problems/count-lattice-points-inside-a-circle/
- * Difficulty: Medium
- *
- * Given a 2D integer array circles where circles[i] = [xi, yi, ri] represents the center (xi, yi)
- * and radius ri of the ith circle drawn on a grid, return the number of lattice points that are
- * present inside at least one circle.
- *
- * Note:
- * - A lattice point is a point with integer coordinates.
- * - Points that lie on the circumference of a circle are also considered to be inside it.
- */
-
-/**
- * @param {number[][]} circles
- * @return {number}
- */
-var countLatticePoints = function(circles) {
- const set = new Set();
-
- for (const [x, y, r] of circles) {
- for (let i = x - r; i <= x + r; i++) {
- for (let j = y - r; j <= y + r; j++) {
- if ((x - i) ** 2 + (y - j) ** 2 <= r ** 2) {
- set.add(`${i},${j}`);
- }
- }
- }
- }
-
- return set.size;
-};
diff --git a/solutions/2250-count-number-of-rectangles-containing-each-point.js b/solutions/2250-count-number-of-rectangles-containing-each-point.js
deleted file mode 100644
index 79ed186c..00000000
--- a/solutions/2250-count-number-of-rectangles-containing-each-point.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 2250. Count Number of Rectangles Containing Each Point
- * https://leetcode.com/problems/count-number-of-rectangles-containing-each-point/
- * Difficulty: Medium
- *
- * You are given a 2D integer array rectangles where rectangles[i] = [li, hi] indicates that ith
- * rectangle has a length of li and a height of hi. You are also given a 2D integer array points
- * where points[j] = [xj, yj] is a point with coordinates (xj, yj).
- *
- * The ith rectangle has its bottom-left corner point at the coordinates (0, 0) and its top-right
- * corner point at (li, hi).
- *
- * Return an integer array count of length points.length where count[j] is the number of rectangles
- * that contain the jth point.
- *
- * The ith rectangle contains the jth point if 0 <= xj <= li and 0 <= yj <= hi. Note that points
- * that lie on the edges of a rectangle are also considered to be contained by that rectangle.
- */
-
-/**
- * @param {number[][]} rectangles
- * @param {number[][]} points
- * @return {number[]}
- */
-var countRectangles = function(rectangles, points) {
- const rectByHeight = new Array(101).fill().map(() => []);
-
- for (const [length, height] of rectangles) {
- rectByHeight[height].push(length);
- }
-
- for (let h = 0; h <= 100; h++) {
- rectByHeight[h].sort((a, b) => a - b);
- }
-
- const result = new Array(points.length).fill(0);
- for (let i = 0; i < points.length; i++) {
- const [x, y] = points[i];
-
- for (let h = y; h <= 100; h++) {
- const lengths = rectByHeight[h];
-
- let left = 0;
- let right = lengths.length - 1;
- let insertPos = lengths.length;
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
- if (lengths[mid] >= x) {
- insertPos = mid;
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- result[i] += lengths.length - insertPos;
- }
- }
-
- return result;
-};
diff --git a/solutions/2251-number-of-flowers-in-full-bloom.js b/solutions/2251-number-of-flowers-in-full-bloom.js
deleted file mode 100644
index c9ae393f..00000000
--- a/solutions/2251-number-of-flowers-in-full-bloom.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2251. Number of Flowers in Full Bloom
- * https://leetcode.com/problems/number-of-flowers-in-full-bloom/
- * Difficulty: Hard
- *
- * You are given a 0-indexed 2D integer array flowers, where flowers[i] = [starti, endi] means
- * the ith flower will be in full bloom from starti to endi (inclusive). You are also given a
- * 0-indexed integer array people of size n, where people[i] is the time that the ith person
- * will arrive to see the flowers.
- *
- * Return an integer array answer of size n, where answer[i] is the number of flowers that are
- * in full bloom when the ith person arrives.
- */
-
-/**
- * @param {number[][]} flowers
- * @param {number[]} people
- * @return {number[]}
- */
-var fullBloomFlowers = function(flowers, people) {
- const events = [];
- for (const [start, end] of flowers) {
- events.push([start, 1]);
- events.push([end + 1, -1]);
- }
- events.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
-
- const result = new Array(people.length).fill(0);
- const peopleWithIndex = people.map((time, index) => [time, index]);
- peopleWithIndex.sort((a, b) => a[0] - b[0]);
-
- let bloomCount = 0;
- let eventIndex = 0;
- for (const [time, personIndex] of peopleWithIndex) {
- while (eventIndex < events.length && events[eventIndex][0] <= time) {
- bloomCount += events[eventIndex][1];
- eventIndex++;
- }
- result[personIndex] = bloomCount;
- }
-
- return result;
-};
diff --git a/solutions/2255-count-prefixes-of-a-given-string.js b/solutions/2255-count-prefixes-of-a-given-string.js
deleted file mode 100644
index 25f3ecbf..00000000
--- a/solutions/2255-count-prefixes-of-a-given-string.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * 2255. Count Prefixes of a Given String
- * https://leetcode.com/problems/count-prefixes-of-a-given-string/
- * Difficulty: Easy
- *
- * You are given a string array words and a string s, where words[i] and s comprise only of
- * lowercase English letters.
- *
- * Return the number of strings in words that are a prefix of s.
- *
- * A prefix of a string is a substring that occurs at the beginning of the string. A substring
- * is a contiguous sequence of characters within a string.
- */
-
-/**
- * @param {string[]} words
- * @param {string} s
- * @return {number}
- */
-var countPrefixes = function(words, s) {
- let result = 0;
-
- for (const word of words) {
- if (word.length <= s.length && s.startsWith(word)) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2256-minimum-average-difference.js b/solutions/2256-minimum-average-difference.js
deleted file mode 100644
index 8c7ebdde..00000000
--- a/solutions/2256-minimum-average-difference.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2256. Minimum Average Difference
- * https://leetcode.com/problems/minimum-average-difference/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums of length n.
- *
- * The average difference of the index i is the absolute difference between the average of the
- * first i + 1 elements of nums and the average of the last n - i - 1 elements. Both averages
- * should be rounded down to the nearest integer.
- *
- * Return the index with the minimum average difference. If there are multiple such indices,
- * return the smallest one.
- *
- * Note:
- * - The absolute difference of two numbers is the absolute value of their difference.
- * - The average of n elements is the sum of the n elements divided (integer division) by n.
- * - The average of 0 elements is considered to be 0.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minimumAverageDifference = function(nums) {
- const n = nums.length;
- let leftSum = 0;
- let rightSum = nums.reduce((sum, num) => sum + num, 0);
- let minDiff = Infinity;
- let result = 0;
-
- for (let i = 0; i < n; i++) {
- leftSum += nums[i];
- rightSum -= nums[i];
- const leftAvg = Math.floor(leftSum / (i + 1));
- const rightAvg = i === n - 1 ? 0 : Math.floor(rightSum / (n - i - 1));
- const diff = Math.abs(leftAvg - rightAvg);
-
- if (diff < minDiff) {
- minDiff = diff;
- result = i;
- }
- }
-
- return result;
-};
diff --git a/solutions/2257-count-unguarded-cells-in-the-grid.js b/solutions/2257-count-unguarded-cells-in-the-grid.js
deleted file mode 100644
index 87cbde16..00000000
--- a/solutions/2257-count-unguarded-cells-in-the-grid.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 2257. Count Unguarded Cells in the Grid
- * https://leetcode.com/problems/count-unguarded-cells-in-the-grid/
- * Difficulty: Medium
- *
- * You are given two integers m and n representing a 0-indexed m x n grid. You are also given two
- * 2D integer arrays guards and walls where guards[i] = [rowi, coli] and walls[j] = [rowj, colj]
- * represent the positions of the ith guard and jth wall respectively.
- *
- * A guard can see every cell in the four cardinal directions (north, east, south, or west) starting
- * from their position unless obstructed by a wall or another guard. A cell is guarded if there is
- * at least one guard that can see it.
- *
- * Return the number of unoccupied cells that are not guarded.
- */
-
-/**
- * @param {number} m
- * @param {number} n
- * @param {number[][]} guards
- * @param {number[][]} walls
- * @return {number}
- */
-var countUnguarded = function(m, n, guards, walls) {
- const grid = Array.from({ length: m }, () => Array(n).fill(0));
-
- for (const [row, col] of walls) {
- grid[row][col] = 1;
- }
- for (const [row, col] of guards) {
- grid[row][col] = 2;
- }
-
- for (const [row, col] of guards) {
- for (let i = row - 1; i >= 0 && grid[i][col] !== 1 && grid[i][col] !== 2; i--) {
- grid[i][col] = 3;
- }
- for (let i = row + 1; i < m && grid[i][col] !== 1 && grid[i][col] !== 2; i++) {
- grid[i][col] = 3;
- }
- for (let j = col - 1; j >= 0 && grid[row][j] !== 1 && grid[row][j] !== 2; j--) {
- grid[row][j] = 3;
- }
- for (let j = col + 1; j < n && grid[row][j] !== 1 && grid[row][j] !== 2; j++) {
- grid[row][j] = 3;
- }
- }
-
- let result = 0;
- for (let i = 0; i < m; i++) {
- for (let j = 0; j < n; j++) {
- if (grid[i][j] === 0) {
- result++;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2258-escape-the-spreading-fire.js b/solutions/2258-escape-the-spreading-fire.js
deleted file mode 100644
index 7e26720a..00000000
--- a/solutions/2258-escape-the-spreading-fire.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * 2258. Escape the Spreading Fire
- * https://leetcode.com/problems/escape-the-spreading-fire/
- * Difficulty: Hard
- *
- * You are given a 0-indexed 2D integer array grid of size m x n which represents a field.
- * Each cell has one of three values:
- * - 0 represents grass,
- * - 1 represents fire,
- * - 2 represents a wall that you and fire cannot pass through.
- *
- * You are situated in the top-left cell, (0, 0), and you want to travel to the safehouse at the
- * bottom-right cell, (m - 1, n - 1). Every minute, you may move to an adjacent grass cell. After
- * your move, every fire cell will spread to all adjacent cells that are not walls.
- *
- * Return the maximum number of minutes that you can stay in your initial position before moving
- * while still safely reaching the safehouse. If this is impossible, return -1. If you can always
- * reach the safehouse regardless of the minutes stayed, return 109.
- *
- * Note that even if the fire spreads to the safehouse immediately after you have reached it, it
- * will be counted as safely reaching the safehouse.
- *
- * A cell is adjacent to another cell if the former is directly north, east, south, or west of the
- * latter (i.e., their sides are touching).
- */
-
-/**
- * @param {number[][]} grid
- * @return {number}
- */
-var maximumMinutes = function(grid) {
- const m = grid.length;
- const n = grid[0].length;
- const directions = [[0, 1], [1, 0], [0, -1], [-1, 0]];
- const MAX_ANSWER = 1000000000;
-
- function isValid(x, y) {
- return x >= 0 && x < m && y >= 0 && y < n && grid[x][y] === 0;
- }
-
- function calculateFireTime() {
- const fireTime = new Array(m).fill().map(() => new Array(n).fill(Infinity));
- const queue = [];
-
- for (let i = 0; i < m; i++) {
- for (let j = 0; j < n; j++) {
- if (grid[i][j] === 1) {
- queue.push([i, j, 0]);
- fireTime[i][j] = 0;
- }
- }
- }
-
- while (queue.length > 0) {
- const [x, y, time] = queue.shift();
-
- for (const [dx, dy] of directions) {
- const nx = x + dx;
- const ny = y + dy;
-
- if (isValid(nx, ny) && fireTime[nx][ny] === Infinity) {
- fireTime[nx][ny] = time + 1;
- queue.push([nx, ny, time + 1]);
- }
- }
- }
-
- return fireTime;
- }
-
- function canReachSafehouse(delay) {
- const fireTime = calculateFireTime();
- const visited = new Array(m).fill().map(() => new Array(n).fill(false));
- const queue = [[0, 0, delay]];
- visited[0][0] = true;
-
- while (queue.length > 0) {
- const [x, y, time] = queue.shift();
-
- for (const [dx, dy] of directions) {
- const nx = x + dx;
- const ny = y + dy;
-
- if (!isValid(nx, ny) || visited[nx][ny]) continue;
-
- if (nx === m - 1 && ny === n - 1) {
- if (time + 1 <= fireTime[nx][ny] || fireTime[nx][ny] === Infinity) {
- return true;
- }
- }
-
- if (time + 1 < fireTime[nx][ny]) {
- visited[nx][ny] = true;
- queue.push([nx, ny, time + 1]);
- }
- }
- }
-
- return false;
- }
-
- let left = 0;
- let right = MAX_ANSWER;
- let result = -1;
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
-
- if (canReachSafehouse(mid)) {
- result = mid;
- left = mid + 1;
- } else {
- right = mid - 1;
- }
- }
-
- return result;
-};
diff --git a/solutions/2259-remove-digit-from-number-to-maximize-result.js b/solutions/2259-remove-digit-from-number-to-maximize-result.js
deleted file mode 100644
index d9ee4397..00000000
--- a/solutions/2259-remove-digit-from-number-to-maximize-result.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2259. Remove Digit From Number to Maximize Result
- * https://leetcode.com/problems/remove-digit-from-number-to-maximize-result/
- * Difficulty: Easy
- *
- * You are given a string number representing a positive integer and a character digit.
- *
- * Return the resulting string after removing exactly one occurrence of digit from number such that
- * the value of the resulting string in decimal form is maximized. The test cases are generated such
- * that digit occurs at least once in number.
- */
-
-/**
- * @param {string} number
- * @param {character} digit
- * @return {string}
- */
-var removeDigit = function(number, digit) {
- let result = '';
-
- for (let i = 0; i < number.length; i++) {
- if (number[i] === digit) {
- const candidate = number.slice(0, i) + number.slice(i + 1);
- if (candidate > result) {
- result = candidate;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2260-minimum-consecutive-cards-to-pick-up.js b/solutions/2260-minimum-consecutive-cards-to-pick-up.js
deleted file mode 100644
index 4463e10c..00000000
--- a/solutions/2260-minimum-consecutive-cards-to-pick-up.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 2260. Minimum Consecutive Cards to Pick Up
- * https://leetcode.com/problems/minimum-consecutive-cards-to-pick-up/
- * Difficulty: Medium
- *
- * You are given an integer array cards where cards[i] represents the value of the ith card. A pair
- * of cards are matching if the cards have the same value.
- *
- * Return the minimum number of consecutive cards you have to pick up to have a pair of matching
- * cards among the picked cards. If it is impossible to have matching cards, return -1.
- */
-
-/**
- * @param {number[]} cards
- * @return {number}
- */
-var minimumCardPickup = function(cards) {
- const map = new Map();
- let minLength = Infinity;
-
- for (let i = 0; i < cards.length; i++) {
- if (map.has(cards[i])) {
- minLength = Math.min(minLength, i - map.get(cards[i]) + 1);
- }
- map.set(cards[i], i);
- }
-
- return minLength === Infinity ? -1 : minLength;
-};
diff --git a/solutions/2261-k-divisible-elements-subarrays.js b/solutions/2261-k-divisible-elements-subarrays.js
deleted file mode 100644
index 72d781d1..00000000
--- a/solutions/2261-k-divisible-elements-subarrays.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2261. K Divisible Elements Subarrays
- * https://leetcode.com/problems/k-divisible-elements-subarrays/
- * Difficulty: Medium
- *
- * Given an integer array nums and two integers k and p, return the number of distinct subarrays,
- * which have at most k elements that are divisible by p.
- *
- * Two arrays nums1 and nums2 are said to be distinct if:
- * - They are of different lengths, or
- * - There exists at least one index i where nums1[i] != nums2[i].
- *
- * A subarray is defined as a non-empty contiguous sequence of elements in an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @param {number} p
- * @return {number}
- */
-var countDistinct = function(nums, k, p) {
- const n = nums.length;
- const seen = new Set();
-
- for (let start = 0; start < n; start++) {
- const subarray = [];
- let divisibleCount = 0;
-
- for (let end = start; end < n; end++) {
- subarray.push(nums[end]);
- if (nums[end] % p === 0) divisibleCount++;
-
- if (divisibleCount <= k) {
- seen.add(subarray.join(','));
- }
- }
- }
-
- return seen.size;
-};
diff --git a/solutions/2262-total-appeal-of-a-string.js b/solutions/2262-total-appeal-of-a-string.js
deleted file mode 100644
index 20c2e2c3..00000000
--- a/solutions/2262-total-appeal-of-a-string.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2262. Total Appeal of A String
- * https://leetcode.com/problems/total-appeal-of-a-string/
- * Difficulty: Hard
- *
- * The appeal of a string is the number of distinct characters found in the string.
- * - For example, the appeal of "abbca" is 3 because it has 3 distinct characters:
- * 'a', 'b', and 'c'.
- *
- * Given a string s, return the total appeal of all of its substrings.
- *
- * A substring is a contiguous sequence of characters within a string.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var appealSum = function(s) {
- const n = s.length;
- const lastSeen = new Array(26).fill(-1);
- let result = 0;
-
- for (let i = 0; i < n; i++) {
- const charIndex = s.charCodeAt(i) - 97;
- result += (i - lastSeen[charIndex]) * (n - i);
- lastSeen[charIndex] = i;
- }
-
- return result;
-};
diff --git a/solutions/2264-largest-3-same-digit-number-in-string.js b/solutions/2264-largest-3-same-digit-number-in-string.js
deleted file mode 100644
index ef1df3a9..00000000
--- a/solutions/2264-largest-3-same-digit-number-in-string.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 2264. Largest 3-Same-Digit Number in String
- * https://leetcode.com/problems/largest-3-same-digit-number-in-string/
- * Difficulty: Easy
- *
- * You are given a string num representing a large integer. An integer is good if it meets
- * the following conditions:
- * - It is a substring of num with length 3.
- * - It consists of only one unique digit.
- *
- * Return the maximum good integer as a string or an empty string "" if no such integer exists.
- *
- * Note:
- * - A substring is a contiguous sequence of characters within a string.
- * - There may be leading zeroes in num or a good integer.
- */
-
-/**
- * @param {string} num
- * @return {string}
- */
-var largestGoodInteger = function(num) {
- let result = '';
-
- for (let i = 0; i <= num.length - 3; i++) {
- const substring = num.slice(i, i + 3);
- if (substring[0] === substring[1] && substring[1] === substring[2]) {
- if (substring > result) {
- result = substring;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2265-count-nodes-equal-to-average-of-subtree.js b/solutions/2265-count-nodes-equal-to-average-of-subtree.js
deleted file mode 100644
index 2e3f4cb5..00000000
--- a/solutions/2265-count-nodes-equal-to-average-of-subtree.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2265. Count Nodes Equal to Average of Subtree
- * https://leetcode.com/problems/count-nodes-equal-to-average-of-subtree/
- * Difficulty: Medium
- *
- * Given the root of a binary tree, return the number of nodes where the value of the node is
- * equal to the average of the values in its subtree.
- *
- * Note:
- * - The average of n elements is the sum of the n elements divided by n and rounded down to
- * the nearest integer.
- * - A subtree of root is a tree consisting of root and all of its descendants.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode} root
- * @return {number}
- */
-var averageOfSubtree = function(root) {
- let count = 0;
- traverse(root);
- return count;
-
- function traverse(node) {
- if (!node) return [0, 0];
-
- const [leftSum, leftCount] = traverse(node.left);
- const [rightSum, rightCount] = traverse(node.right);
- const totalSum = leftSum + rightSum + node.val;
- const totalCount = leftCount + rightCount + 1;
-
- if (Math.floor(totalSum / totalCount) === node.val) {
- count++;
- }
-
- return [totalSum, totalCount];
- }
-};
diff --git a/solutions/2266-count-number-of-texts.js b/solutions/2266-count-number-of-texts.js
deleted file mode 100644
index d2f9cf84..00000000
--- a/solutions/2266-count-number-of-texts.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 2266. Count Number of Texts
- * https://leetcode.com/problems/count-number-of-texts/
- * Difficulty: Medium
- *
- * Alice is texting Bob using her phone. The mapping of digits to letters is shown in the
- * figure below.
- *
- * In order to add a letter, Alice has to press the key of the corresponding digit i times,
- * where i is the position of the letter in the key.
- * - For example, to add the letter 's', Alice has to press '7' four times. Similarly, to
- * add the letter 'k', Alice has to press '5' twice.
- * - Note that the digits '0' and '1' do not map to any letters, so Alice does not use them.
- *
- * However, due to an error in transmission, Bob did not receive Alice's text message but
- * received a string of pressed keys instead.
- * - For example, when Alice sent the message "bob", Bob received the string "2266622".
- *
- * Given a string pressedKeys representing the string received by Bob, return the total
- * number of possible text messages Alice could have sent.
- *
- * Since the answer may be very large, return it modulo 109 + 7.
- */
-
-/**
- * @param {string} pressedKeys
- * @return {number}
- */
-var countTexts = function(pressedKeys) {
- const mod = 1e9 + 7;
- const maxGroup = pressedKeys.length;
- const dp = new Array(maxGroup + 1).fill(0);
- dp[0] = 1;
-
- const map = new Map([
- ['2', 3], ['3', 3], ['4', 3], ['5', 3],
- ['6', 3], ['7', 4], ['8', 3], ['9', 4]
- ]);
-
- for (let i = 1; i <= maxGroup; i++) {
- dp[i] = dp[i - 1];
- if (i >= 2 && pressedKeys[i - 1] === pressedKeys[i - 2]) {
- dp[i] = (dp[i] + dp[i - 2]) % mod;
- }
- if (i >= 3 && pressedKeys[i - 1] === pressedKeys[i - 2]
- && pressedKeys[i - 2] === pressedKeys[i - 3]) {
- dp[i] = (dp[i] + dp[i - 3]) % mod;
- }
- if (i >= 4 && pressedKeys[i - 1] === pressedKeys[i - 2]
- && pressedKeys[i - 2] === pressedKeys[i - 3]
- && pressedKeys[i - 3] === pressedKeys[i - 4] && map.get(pressedKeys[i - 1]) === 4) {
- dp[i] = (dp[i] + dp[i - 4]) % mod;
- }
- }
-
- return dp[maxGroup];
-};
diff --git a/solutions/2267-check-if-there-is-a-valid-parentheses-string-path.js b/solutions/2267-check-if-there-is-a-valid-parentheses-string-path.js
deleted file mode 100644
index 8dc163ed..00000000
--- a/solutions/2267-check-if-there-is-a-valid-parentheses-string-path.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 2267. Check if There Is a Valid Parentheses String Path
- * https://leetcode.com/problems/check-if-there-is-a-valid-parentheses-string-path/
- * Difficulty: Hard
- *
- * A parentheses string is a non-empty string consisting only of '(' and ')'. It is valid if any of
- * the following conditions is true:
- * - It is ().
- * - It can be written as AB (A concatenated with B), where A and B are valid parentheses strings.
- * - It can be written as (A), where A is a valid parentheses string.
- *
- * You are given an m x n matrix of parentheses grid. A valid parentheses string path in the grid
- * is a path satisfying all of the following conditions:
- * - The path starts from the upper left cell (0, 0).
- * - The path ends at the bottom-right cell (m - 1, n - 1).
- * - The path only ever moves down or right.
- * - The resulting parentheses string formed by the path is valid.
- *
- * Return true if there exists a valid parentheses string path in the grid. Otherwise, return false.
- */
-
-/**
-* @param {character[][]} grid
-* @return {boolean}
-*/
-var hasValidPath = function(grid) {
- const m = grid.length;
- const n = grid[0].length;
-
- if ((m + n - 1) % 2 !== 0) {
- return false;
- }
-
- if (grid[0][0] === ')' || grid[m - 1][n - 1] === '(') {
- return false;
- }
-
- const visited = new Set();
- return dfs(0, 0, 0);
-
- function dfs(i, j, openCount) {
- if (i >= m || j >= n || openCount < 0) {
- return false;
- }
- openCount += grid[i][j] === '(' ? 1 : -1;
- if (i === m - 1 && j === n - 1) {
- return openCount === 0;
- }
- const key = `${i},${j},${openCount}`;
- if (visited.has(key)) {
- return false;
- }
- visited.add(key);
-
- return dfs(i + 1, j, openCount) || dfs(i, j + 1, openCount);
- }
-};
diff --git a/solutions/2269-find-the-k-beauty-of-a-number.js b/solutions/2269-find-the-k-beauty-of-a-number.js
deleted file mode 100644
index 3027e4d4..00000000
--- a/solutions/2269-find-the-k-beauty-of-a-number.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2269. Find the K-Beauty of a Number
- * https://leetcode.com/problems/find-the-k-beauty-of-a-number/
- * Difficulty: Easy
- *
- * The k-beauty of an integer num is defined as the number of substrings of num when it is
- * read as a string that meet the following conditions:
- * - It has a length of k.
- * - It is a divisor of num.
- *
- * Given integers num and k, return the k-beauty of num.
- *
- * Note:
- * - Leading zeros are allowed.
- * - 0 is not a divisor of any value.
- *
- * A substring is a contiguous sequence of characters in a string.
- */
-
-/**
- * @param {number} num
- * @param {number} k
- * @return {number}
- */
-var divisorSubstrings = function(num, k) {
- const numStr = num.toString();
- let result = 0;
-
- for (let i = 0; i <= numStr.length - k; i++) {
- const substring = parseInt(numStr.slice(i, i + k));
- if (substring !== 0 && num % substring === 0) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2270-number-of-ways-to-split-array.js b/solutions/2270-number-of-ways-to-split-array.js
deleted file mode 100644
index f7ac5451..00000000
--- a/solutions/2270-number-of-ways-to-split-array.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2270. Number of Ways to Split Array
- * https://leetcode.com/problems/number-of-ways-to-split-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums of length n.
- *
- * nums contains a valid split at index i if the following are true:
- * - The sum of the first i + 1 elements is greater than or equal to the sum of the
- * last n - i - 1 elements.
- * - There is at least one element to the right of i. That is, 0 <= i < n - 1.
- *
- * Return the number of valid splits in nums.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var waysToSplitArray = function(nums) {
- const total = nums.reduce((a, b) => a + b);
- let result = 0;
-
- for (let i = 0, sum = 0; i < nums.length - 1; i++) {
- sum += nums[i];
- if (sum >= total - sum) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2271-maximum-white-tiles-covered-by-a-carpet.js b/solutions/2271-maximum-white-tiles-covered-by-a-carpet.js
deleted file mode 100644
index 0af443fc..00000000
--- a/solutions/2271-maximum-white-tiles-covered-by-a-carpet.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2271. Maximum White Tiles Covered by a Carpet
- * https://leetcode.com/problems/maximum-white-tiles-covered-by-a-carpet/
- * Difficulty: Medium
- *
- * You are given a 2D integer array tiles where tiles[i] = [li, ri] represents that every tile
- * j in the range li <= j <= ri is colored white.
- *
- * You are also given an integer carpetLen, the length of a single carpet that can be placed
- * anywhere.
- *
- * Return the maximum number of white tiles that can be covered by the carpet.
- */
-
-/**
- * @param {number[][]} tiles
- * @param {number} carpetLen
- * @return {number}
- */
-var maximumWhiteTiles = function(tiles, carpetLen) {
- tiles.sort((a, b) => a[0] - b[0]);
-
- let result = 0;
- let covered = 0;
- let j = 0;
-
- for (let i = 0; i < tiles.length; i++) {
- const carpetEnd = tiles[i][0] + carpetLen - 1;
-
- while (j < tiles.length && tiles[j][0] <= carpetEnd) {
- if (tiles[j][1] <= carpetEnd) {
- covered += tiles[j][1] - tiles[j][0] + 1;
- j++;
- } else {
- covered += carpetEnd - tiles[j][0] + 1;
- result = Math.max(result, covered);
- covered -= carpetEnd - tiles[j][0] + 1;
- break;
- }
- }
-
- result = Math.max(result, covered);
-
- if (j === tiles.length) break;
-
- covered -= tiles[i][1] - tiles[i][0] + 1;
- }
-
- return result;
-};
diff --git a/solutions/2272-substring-with-largest-variance.js b/solutions/2272-substring-with-largest-variance.js
deleted file mode 100644
index f11361c2..00000000
--- a/solutions/2272-substring-with-largest-variance.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 2272. Substring With Largest Variance
- * https://leetcode.com/problems/substring-with-largest-variance/
- * Difficulty: Hard
- *
- * The variance of a string is defined as the largest difference between the number of occurrences
- * of any 2 characters present in the string. Note the two characters may or may not be the same.
- *
- * Given a string s consisting of lowercase English letters only, return the largest variance
- * possible among all substrings of s.
- *
- * A substring is a contiguous sequence of characters within a string.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var largestVariance = function(s) {
- const map = new Set(s);
- let result = 0;
-
- for (const charA of map) {
- for (const charB of map) {
- if (charA === charB) continue;
-
- let countA = 0;
- let countB = 0;
- let hasA = false;
- let hasB = false;
-
- for (const char of s) {
- if (char === charA) {
- countA++;
- hasA = true;
- }
- if (char === charB) {
- countB++;
- hasB = true;
- }
-
- if (hasA && hasB) {
- result = Math.max(result, Math.abs(countA - countB));
- }
-
- if (countA < countB) {
- countA = 0;
- countB = 0;
- hasA = false;
- hasB = false;
- }
- }
-
- countA = 0;
- countB = 0;
- hasA = false;
- hasB = false;
-
- for (let i = s.length - 1; i >= 0; i--) {
- if (s[i] === charA) {
- countA++;
- hasA = true;
- }
- if (s[i] === charB) {
- countB++;
- hasB = true;
- }
-
- if (hasA && hasB) {
- result = Math.max(result, Math.abs(countA - countB));
- }
-
- if (countA < countB) {
- countA = 0;
- countB = 0;
- hasA = false;
- hasB = false;
- }
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2273-find-resultant-array-after-removing-anagrams.js b/solutions/2273-find-resultant-array-after-removing-anagrams.js
deleted file mode 100644
index 8e0ef746..00000000
--- a/solutions/2273-find-resultant-array-after-removing-anagrams.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2273. Find Resultant Array After Removing Anagrams
- * https://leetcode.com/problems/find-resultant-array-after-removing-anagrams/
- * Difficulty: Easy
- *
- * You are given a 0-indexed string array words, where words[i] consists of lowercase
- * English letters.
- *
- * In one operation, select any index i such that 0 < i < words.length and words[i - 1] and
- * words[i] are anagrams, and delete words[i] from words. Keep performing this operation as
- * long as you can select an index that satisfies the conditions.
- *
- * Return words after performing all operations. It can be shown that selecting the indices
- * for each operation in any arbitrary order will lead to the same result.
- *
- * An Anagram is a word or phrase formed by rearranging the letters of a different word or
- * phrase using all the original letters exactly once. For example, "dacb" is an anagram of
- * "abdc".
- */
-
-/**
- * @param {string[]} words
- * @return {string[]}
- */
-var removeAnagrams = function(words) {
- const result = [words[0]];
-
- for (let i = 1; i < words.length; i++) {
- const prevSorted = result[result.length - 1].split('').sort().join('');
- const currSorted = words[i].split('').sort().join('');
-
- if (prevSorted !== currSorted) {
- result.push(words[i]);
- }
- }
-
- return result;
-};
diff --git a/solutions/2274-maximum-consecutive-floors-without-special-floors.js b/solutions/2274-maximum-consecutive-floors-without-special-floors.js
deleted file mode 100644
index 6ccb00f4..00000000
--- a/solutions/2274-maximum-consecutive-floors-without-special-floors.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2274. Maximum Consecutive Floors Without Special Floors
- * https://leetcode.com/problems/maximum-consecutive-floors-without-special-floors/
- * Difficulty: Medium
- *
- * Alice manages a company and has rented some floors of a building as office space. Alice has
- * decided some of these floors should be special floors, used for relaxation only.
- *
- * You are given two integers bottom and top, which denote that Alice has rented all the floors
- * from bottom to top (inclusive). You are also given the integer array special, where special[i]
- * denotes a special floor that Alice has designated for relaxation.
- *
- * Return the maximum number of consecutive floors without a special floor.
- */
-
-/**
- * @param {number} bottom
- * @param {number} top
- * @param {number[]} special
- * @return {number}
- */
-var maxConsecutive = function(bottom, top, special) {
- special.sort((a, b) => a - b);
- let result = Math.max(special[0] - bottom, top - special[special.length - 1]);
-
- for (let i = 1; i < special.length; i++) {
- result = Math.max(result, special[i] - special[i - 1] - 1);
- }
-
- return result;
-};
diff --git a/solutions/2275-largest-combination-with-bitwise-and-greater-than-zero.js b/solutions/2275-largest-combination-with-bitwise-and-greater-than-zero.js
deleted file mode 100644
index e75f68d3..00000000
--- a/solutions/2275-largest-combination-with-bitwise-and-greater-than-zero.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2275. Largest Combination With Bitwise AND Greater Than Zero
- * https://leetcode.com/problems/largest-combination-with-bitwise-and-greater-than-zero/
- * Difficulty: Medium
- *
- * The bitwise AND of an array nums is the bitwise AND of all integers in nums.
- * - For example, for nums = [1, 5, 3], the bitwise AND is equal to 1 & 5 & 3 = 1.
- * - Also, for nums = [7], the bitwise AND is 7.
- *
- * You are given an array of positive integers candidates. Compute the bitwise AND for all
- * possible combinations of elements in the candidates array.
- *
- * Return the size of the largest combination of candidates with a bitwise AND greater than 0.
- */
-
-/**
- * @param {number[]} candidates
- * @return {number}
- */
-var largestCombination = function(candidates) {
- const bitCounts = new Array(32).fill(0);
- let result = 0;
-
- for (const num of candidates) {
- for (let i = 0; i < 32; i++) {
- if (num & (1 << i)) {
- bitCounts[i]++;
- }
- }
- }
-
- for (const count of bitCounts) {
- result = Math.max(result, count);
- }
-
- return result;
-};
diff --git a/solutions/2278-percentage-of-letter-in-string.js b/solutions/2278-percentage-of-letter-in-string.js
deleted file mode 100644
index fb3dfdbb..00000000
--- a/solutions/2278-percentage-of-letter-in-string.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * 2278. Percentage of Letter in String
- * https://leetcode.com/problems/percentage-of-letter-in-string/
- * Difficulty: Easy
- *
- * Given a string s and a character letter, return the percentage of characters in s that equal
- * letter rounded down to the nearest whole percent.
- */
-
-/**
- * @param {string} s
- * @param {character} letter
- * @return {number}
- */
-var percentageLetter = function(s, letter) {
- return Math.floor((s.split('').filter(char => char === letter).length / s.length) * 100);
-};
diff --git a/solutions/2279-maximum-bags-with-full-capacity-of-rocks.js b/solutions/2279-maximum-bags-with-full-capacity-of-rocks.js
deleted file mode 100644
index 77d36c1a..00000000
--- a/solutions/2279-maximum-bags-with-full-capacity-of-rocks.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2279. Maximum Bags With Full Capacity of Rocks
- * https://leetcode.com/problems/maximum-bags-with-full-capacity-of-rocks/
- * Difficulty: Medium
- *
- * You have n bags numbered from 0 to n - 1. You are given two 0-indexed integer arrays capacity
- * and rocks. The ith bag can hold a maximum of capacity[i] rocks and currently contains rocks[i]
- * rocks. You are also given an integer additionalRocks, the number of additional rocks you can
- * place in any of the bags.
- *
- * Return the maximum number of bags that could have full capacity after placing the additional
- * rocks in some bags.
- */
-
-/**
- * @param {number[]} capacity
- * @param {number[]} rocks
- * @param {number} additionalRocks
- * @return {number}
- */
-var maximumBags = function(capacity, rocks, additionalRocks) {
- const remaining = capacity.map((cap, i) => cap - rocks[i]);
- remaining.sort((a, b) => a - b);
-
- let result = 0;
- let rocksLeft = additionalRocks;
-
- for (const needed of remaining) {
- if (needed <= rocksLeft) {
- result++;
- rocksLeft -= needed;
- } else {
- break;
- }
- }
-
- return result;
-};
diff --git a/solutions/2280-minimum-lines-to-represent-a-line-chart.js b/solutions/2280-minimum-lines-to-represent-a-line-chart.js
deleted file mode 100644
index ff401c32..00000000
--- a/solutions/2280-minimum-lines-to-represent-a-line-chart.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2280. Minimum Lines to Represent a Line Chart
- * https://leetcode.com/problems/minimum-lines-to-represent-a-line-chart/
- * Difficulty: Medium
- *
- * You are given a 2D integer array stockPrices where stockPrices[i] = [dayi, pricei] indicates
- * the price of the stock on day dayi is pricei. A line chart is created from the array by
- * plotting the points on an XY plane with the X-axis representing the day and the Y-axis
- * representing the price and connecting adjacent points. One such example is shown below.
- *
- * Return the minimum number of lines needed to represent the line chart.
- */
-
-/**
- * @param {number[][]} stockPrices
- * @return {number}
- */
-var minimumLines = function(stockPrices) {
- if (stockPrices.length <= 2) return stockPrices.length - 1;
-
- stockPrices.sort((a, b) => a[0] - b[0]);
-
- let lines = 1;
- for (let i = 2; i < stockPrices.length; i++) {
- const [x0, y0] = stockPrices[i - 2];
- const [x1, y1] = stockPrices[i - 1];
- const [x2, y2] = stockPrices[i];
-
- const dx1 = BigInt(x1 - x0);
- const dy1 = BigInt(y1 - y0);
- const dx2 = BigInt(x2 - x1);
- const dy2 = BigInt(y2 - y1);
-
- if (dy1 * dx2 !== dy2 * dx1) lines++;
- }
-
- return lines;
-};
diff --git a/solutions/2283-check-if-number-has-equal-digit-count-and-digit-value.js b/solutions/2283-check-if-number-has-equal-digit-count-and-digit-value.js
deleted file mode 100644
index ea342877..00000000
--- a/solutions/2283-check-if-number-has-equal-digit-count-and-digit-value.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * 2283. Check if Number Has Equal Digit Count and Digit Value
- * https://leetcode.com/problems/check-if-number-has-equal-digit-count-and-digit-value/
- * Difficulty: Easy
- *
- * You are given a 0-indexed string num of length n consisting of digits.
- *
- * Return true if for every index i in the range 0 <= i < n, the digit i occurs num[i] times in num,
- * otherwise return false.
- */
-
-/**
- * @param {string} num
- * @return {boolean}
- */
-var digitCount = function(num) {
- const frequency = new Array(10).fill(0);
-
- for (const digit of num) {
- frequency[digit]++;
- }
-
- for (let i = 0; i < num.length; i++) {
- if (frequency[i] !== Number(num[i])) {
- return false;
- }
- }
-
- return true;
-};
diff --git a/solutions/2284-sender-with-largest-word-count.js b/solutions/2284-sender-with-largest-word-count.js
deleted file mode 100644
index d4c02260..00000000
--- a/solutions/2284-sender-with-largest-word-count.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2284. Sender With Largest Word Count
- * https://leetcode.com/problems/sender-with-largest-word-count/
- * Difficulty: Medium
- *
- * You have a chat log of n messages. You are given two string arrays messages and senders
- * where messages[i] is a message sent by senders[i].
- *
- * A message is list of words that are separated by a single space with no leading or trailing
- * spaces. The word count of a sender is the total number of words sent by the sender. Note
- * that a sender may send more than one message.
- *
- * Return the sender with the largest word count. If there is more than one sender with the
- * largest word count, return the one with the lexicographically largest name.
- *
- * Note:
- * - Uppercase letters come before lowercase letters in lexicographical order.
- * - "Alice" and "alice" are distinct.
- */
-
-/**
- * @param {string[]} messages
- * @param {string[]} senders
- * @return {string}
- */
-var largestWordCount = function(messages, senders) {
- const map = new Map();
- let maxWords = 0;
- let result = '';
-
- for (let i = 0; i < messages.length; i++) {
- const wordCount = messages[i].split(' ').length;
- const sender = senders[i];
- const totalWords = (map.get(sender) || 0) + wordCount;
- map.set(sender, totalWords);
-
- if (totalWords > maxWords || (totalWords === maxWords && sender > result)) {
- maxWords = totalWords;
- result = sender;
- }
- }
-
- return result;
-};
diff --git a/solutions/2287-rearrange-characters-to-make-target-string.js b/solutions/2287-rearrange-characters-to-make-target-string.js
deleted file mode 100644
index 310eb5a2..00000000
--- a/solutions/2287-rearrange-characters-to-make-target-string.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2287. Rearrange Characters to Make Target String
- * https://leetcode.com/problems/rearrange-characters-to-make-target-string/
- * Difficulty: Easy
- *
- * You are given two 0-indexed strings s and target. You can take some letters from s and
- * rearrange them to form new strings.
- *
- * Return the maximum number of copies of target that can be formed by taking letters from
- * s and rearranging them.
- */
-
-/**
- * @param {string} s
- * @param {string} target
- * @return {number}
- */
-var rearrangeCharacters = function(s, target) {
- const sourceFreq = new Array(26).fill(0);
- const targetFreq = new Array(26).fill(0);
-
- for (const char of s) {
- sourceFreq[char.charCodeAt(0) - 97]++;
- }
-
- for (const char of target) {
- targetFreq[char.charCodeAt(0) - 97]++;
- }
-
- let result = Infinity;
- for (let i = 0; i < 26; i++) {
- if (targetFreq[i] > 0) {
- result = Math.min(result, Math.floor(sourceFreq[i] / targetFreq[i]));
- }
- }
-
- return result;
-};
diff --git a/solutions/2288-apply-discount-to-prices.js b/solutions/2288-apply-discount-to-prices.js
deleted file mode 100644
index 4645204e..00000000
--- a/solutions/2288-apply-discount-to-prices.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2288. Apply Discount to Prices
- * https://leetcode.com/problems/apply-discount-to-prices/
- * Difficulty: Medium
- *
- * A sentence is a string of single-space separated words where each word can contain digits,
- * lowercase letters, and the dollar sign '$'. A word represents a price if it is a sequence
- * of digits preceded by a dollar sign.
- * - For example, "$100", "$23", and "$6" represent prices while "100", "$", and "$1e5" do not.
- *
- * You are given a string sentence representing a sentence and an integer discount. For each
- * word representing a price, apply a discount of discount% on the price and update the word
- * in the sentence. All updated prices should be represented with exactly two decimal places.
- *
- * Return a string representing the modified sentence.
- *
- * Note that all prices will contain at most 10 digits.
- */
-
-/**
- * @param {string} sentence
- * @param {number} discount
- * @return {string}
- */
-var discountPrices = function(sentence, discount) {
- const words = sentence.split(' ');
- const discountFactor = 1 - discount / 100;
-
- for (let i = 0; i < words.length; i++) {
- if (words[i].startsWith('$') && /^[0-9]+$/.test(words[i].slice(1))) {
- const price = parseInt(words[i].slice(1)) * discountFactor;
- words[i] = `$${price.toFixed(2)}`;
- }
- }
-
- return words.join(' ');
-};
diff --git a/solutions/2293-min-max-game.js b/solutions/2293-min-max-game.js
deleted file mode 100644
index b6952f9c..00000000
--- a/solutions/2293-min-max-game.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2293. Min Max Game
- * https://leetcode.com/problems/min-max-game/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums whose length is a power of 2.
- *
- * Apply the following algorithm on nums:
- * 1. Let n be the length of nums. If n == 1, end the process. Otherwise, create a new 0-indexed
- * integer array newNums of length n / 2.
- * 2. For every even index i where 0 <= i < n / 2, assign the value of newNums[i] as
- * min(nums[2 * i], nums[2 * i + 1]).
- * 3. For every odd index i where 0 <= i < n / 2, assign the value of newNums[i] as
- * max(nums[2 * i], nums[2 * i + 1]).
- * 4. Replace the array nums with newNums.
- * 5. Repeat the entire process starting from step 1.
- *
- * Return the last number that remains in nums after applying the algorithm.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minMaxGame = function(nums) {
- let array = nums.slice();
-
- while (array.length > 1) {
- const newArray = new Array(array.length / 2);
-
- for (let i = 0; i < newArray.length; i++) {
- if (i % 2 === 0) {
- newArray[i] = Math.min(array[2 * i], array[2 * i + 1]);
- } else {
- newArray[i] = Math.max(array[2 * i], array[2 * i + 1]);
- }
- }
-
- array = newArray;
- }
-
- return array[0];
-};
diff --git a/solutions/2294-partition-array-such-that-maximum-difference-is-k.js b/solutions/2294-partition-array-such-that-maximum-difference-is-k.js
deleted file mode 100644
index 06cad3ae..00000000
--- a/solutions/2294-partition-array-such-that-maximum-difference-is-k.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2294. Partition Array Such That Maximum Difference Is K
- * https://leetcode.com/problems/partition-array-such-that-maximum-difference-is-k/
- * Difficulty: Medium
- *
- * You are given an integer array nums and an integer k. You may partition nums into one or more
- * subsequences such that each element in nums appears in exactly one of the subsequences.
- *
- * Return the minimum number of subsequences needed such that the difference between the maximum
- * and minimum values in each subsequence is at most k.
- *
- * A subsequence is a sequence that can be derived from another sequence by deleting some or no
- * elements without changing the order of the remaining elements.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var partitionArray = function(nums, k) {
- nums.sort((a, b) => a - b);
- let result = 1;
- let minValue = nums[0];
-
- for (let i = 1; i < nums.length; i++) {
- if (nums[i] - minValue > k) {
- result++;
- minValue = nums[i];
- }
- }
-
- return result;
-};
diff --git a/solutions/2295-replace-elements-in-an-array.js b/solutions/2295-replace-elements-in-an-array.js
deleted file mode 100644
index de3bbad0..00000000
--- a/solutions/2295-replace-elements-in-an-array.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2295. Replace Elements in an Array
- * https://leetcode.com/problems/replace-elements-in-an-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array nums that consists of n distinct positive integers.
- * Apply m operations to this array, where in the ith operation you replace the number
- * operations[i][0] with operations[i][1].
- *
- * It is guaranteed that in the ith operation:
- * - operations[i][0] exists in nums.
- * - operations[i][1] does not exist in nums.
- *
- * Return the array obtained after applying all the operations.
- */
-
-/**
- * @param {number[]} nums
- * @param {number[][]} operations
- * @return {number[]}
- */
-var arrayChange = function(nums, operations) {
- const map = new Map();
- for (let i = 0; i < nums.length; i++) {
- map.set(nums[i], i);
- }
-
- for (const [oldVal, newVal] of operations) {
- const index = map.get(oldVal);
- nums[index] = newVal;
- map.set(newVal, index);
- map.delete(oldVal);
- }
-
- return nums;
-};
diff --git a/solutions/2296-design-a-text-editor.js b/solutions/2296-design-a-text-editor.js
deleted file mode 100644
index 6020598d..00000000
--- a/solutions/2296-design-a-text-editor.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 2296. Design a Text Editor
- * https://leetcode.com/problems/design-a-text-editor/
- * Difficulty: Hard
- *
- * Design a text editor with a cursor that can do the following:
- * - Add text to where the cursor is.
- * - Delete text from where the cursor is (simulating the backspace key).
- * - Move the cursor either left or right.
- *
- * When deleting text, only characters to the left of the cursor will be deleted. The cursor
- * will also remain within the actual text and cannot be moved beyond it. More formally,
- * we have that 0 <= cursor.position <= currentText.length always holds.
- *
- * Implement the TextEditor class:
- * - TextEditor() Initializes the object with empty text.
- * - void addText(string text) Appends text to where the cursor is. The cursor ends to the
- * right of text.
- * - int deleteText(int k) Deletes k characters to the left of the cursor. Returns the number
- * of characters actually deleted.
- * - string cursorLeft(int k) Moves the cursor to the left k times. Returns the last
- * min(10, len) characters to the left of the cursor, where len is the number of characters
- * to the left of the cursor.
- * - string cursorRight(int k) Moves the cursor to the right k times. Returns the last
- * min(10, len) characters to the left of the cursor, where len is the number of characters
- * to the left of the cursor.
- */
-
-var TextEditor = function() {
- this.left = [];
- this.right = [];
-};
-
-/**
- * @param {string} text
- * @return {void}
- */
-TextEditor.prototype.addText = function(text) {
- for (const char of text) {
- this.left.push(char);
- }
-};
-
-/**
- * @param {number} k
- * @return {number}
- */
-TextEditor.prototype.deleteText = function(k) {
- const deleteCount = Math.min(k, this.left.length);
- for (let i = 0; i < deleteCount; i++) {
- this.left.pop();
- }
- return deleteCount;
-};
-
-/**
- * @param {number} k
- * @return {string}
- */
-TextEditor.prototype.cursorLeft = function(k) {
- for (let i = 0; i < k && this.left.length; i++) {
- this.right.push(this.left.pop());
- }
- const start = Math.max(0, this.left.length - 10);
- return this.left.slice(start).join('');
-};
-
-/**
- * @param {number} k
- * @return {string}
- */
-TextEditor.prototype.cursorRight = function(k) {
- for (let i = 0; i < k && this.right.length; i++) {
- this.left.push(this.right.pop());
- }
- const start = Math.max(0, this.left.length - 10);
- return this.left.slice(start).join('');
-};
diff --git a/solutions/2299-strong-password-checker-ii.js b/solutions/2299-strong-password-checker-ii.js
deleted file mode 100644
index f96fac07..00000000
--- a/solutions/2299-strong-password-checker-ii.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2299. Strong Password Checker II
- * https://leetcode.com/problems/strong-password-checker-ii/
- * Difficulty: Easy
- *
- * A password is said to be strong if it satisfies all the following criteria:
- * - It has at least 8 characters.
- * - It contains at least one lowercase letter.
- * - It contains at least one uppercase letter.
- * - It contains at least one digit.
- * - It contains at least one special character. The special characters are the characters
- * in the following string: "!@#$%^&*()-+".
- * - It does not contain 2 of the same character in adjacent positions (i.e., "aab" violates
- * this condition, but "aba" does not).
- *
- * Given a string password, return true if it is a strong password. Otherwise, return false.
- */
-
-/**
- * @param {string} password
- * @return {boolean}
- */
-var strongPasswordCheckerII = function(password) {
- if (password.length < 8) return false;
-
- let hasLower = false;
- let hasUpper = false;
- let hasDigit = false;
- let hasSpecial = false;
- const set = new Set(['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '+']);
-
- for (let i = 0; i < password.length; i++) {
- if (i > 0 && password[i] === password[i - 1]) return false;
-
- const char = password[i];
- if (/[a-z]/.test(char)) hasLower = true;
- else if (/[A-Z]/.test(char)) hasUpper = true;
- else if (/\d/.test(char)) hasDigit = true;
- else if (set.has(char)) hasSpecial = true;
- }
-
- return hasLower && hasUpper && hasDigit && hasSpecial;
-};
diff --git a/solutions/2301-match-substring-after-replacement.js b/solutions/2301-match-substring-after-replacement.js
deleted file mode 100644
index fc7e5a91..00000000
--- a/solutions/2301-match-substring-after-replacement.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2301. Match Substring After Replacement
- * https://leetcode.com/problems/match-substring-after-replacement/
- * Difficulty: Hard
- *
- * You are given two strings s and sub. You are also given a 2D character array mappings where
- * mappings[i] = [oldi, newi] indicates that you may perform the following operation any number
- * of times:
- * - Replace a character oldi of sub with newi.
- *
- * Each character in sub cannot be replaced more than once.
- *
- * Return true if it is possible to make sub a substring of s by replacing zero or more characters
- * according to mappings. Otherwise, return false.
- *
- * A substring is a contiguous non-empty sequence of characters within a string.
- */
-
-/**
- * @param {string} s
- * @param {string} sub
- * @param {character[][]} mappings
- * @return {boolean}
- */
-var matchReplacement = function(s, sub, mappings) {
- const map = new Map();
-
- for (const [oldChar, newChar] of mappings) {
- if (!map.has(oldChar)) {
- map.set(oldChar, new Set());
- }
- map.get(oldChar).add(newChar);
- }
-
- const subLen = sub.length;
- for (let i = 0; i <= s.length - subLen; i++) {
- let isValid = true;
- for (let j = 0; j < subLen; j++) {
- const sChar = s[i + j];
- const subChar = sub[j];
- if (sChar !== subChar && (!map.has(subChar) || !map.get(subChar).has(sChar))) {
- isValid = false;
- break;
- }
- }
- if (isValid) return true;
- }
-
- return false;
-};
diff --git a/solutions/2302-count-subarrays-with-score-less-than-k.js b/solutions/2302-count-subarrays-with-score-less-than-k.js
deleted file mode 100644
index 29aa7eda..00000000
--- a/solutions/2302-count-subarrays-with-score-less-than-k.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 2302. Count Subarrays With Score Less Than K
- * https://leetcode.com/problems/count-subarrays-with-score-less-than-k/
- * Difficulty: Hard
- *
- * The score of an array is defined as the product of its sum and its length.
- * - For example, the score of [1, 2, 3, 4, 5] is (1 + 2 + 3 + 4 + 5) * 5 = 75.
- *
- * Given a positive integer array nums and an integer k, return the number of non-empty subarrays
- * of nums whose score is strictly less than k.
- *
- * A subarray is a contiguous sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countSubarrays = function(nums, k) {
- let result = 0;
- let currentSum = 0;
- let left = 0;
-
- for (let right = 0; right < nums.length; right++) {
- currentSum += nums[right];
- while (currentSum * (right - left + 1) >= k) {
- currentSum -= nums[left];
- left++;
- }
- result += right - left + 1;
- }
-
- return result;
-};
diff --git a/solutions/2303-calculate-amount-paid-in-taxes.js b/solutions/2303-calculate-amount-paid-in-taxes.js
deleted file mode 100644
index 6944f54b..00000000
--- a/solutions/2303-calculate-amount-paid-in-taxes.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2303. Calculate Amount Paid in Taxes
- * https://leetcode.com/problems/calculate-amount-paid-in-taxes/
- * Difficulty: Easy
- *
- * You are given a 0-indexed 2D integer array brackets where brackets[i] = [upperi, percenti]
- * means that the ith tax bracket has an upper bound of upperi and is taxed at a rate of percenti.
- * The brackets are sorted by upper bound (i.e. upperi-1 < upperi for 0 < i < brackets.length).
- *
- * Tax is calculated as follows:
- * - The first upper0 dollars earned are taxed at a rate of percent0.
- * - The next upper1 - upper0 dollars earned are taxed at a rate of percent1.
- * - The next upper2 - upper1 dollars earned are taxed at a rate of percent2.
- * - And so on.
- *
- * You are given an integer income representing the amount of money you earned. Return the
- * amount of money that you have to pay in taxes. Answers within 10-5 of the actual answer
- * will be accepted.
- */
-
-/**
- * @param {number[][]} brackets
- * @param {number} income
- * @return {number}
- */
-var calculateTax = function(brackets, income) {
- let result = 0;
- let previousUpper = 0;
-
- for (const [upper, percent] of brackets) {
- if (income > previousUpper) {
- const taxable = Math.min(income, upper) - previousUpper;
- result += taxable * (percent / 100);
- previousUpper = upper;
- } else {
- break;
- }
- }
-
- return result;
-};
diff --git a/solutions/2304-minimum-path-cost-in-a-grid.js b/solutions/2304-minimum-path-cost-in-a-grid.js
deleted file mode 100644
index eb1f10c4..00000000
--- a/solutions/2304-minimum-path-cost-in-a-grid.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 2304. Minimum Path Cost in a Grid
- * https://leetcode.com/problems/minimum-path-cost-in-a-grid/
- * Difficulty: Medium
- *
- * You are given a 0-indexed m x n integer matrix grid consisting of distinct integers from
- * 0 to m * n - 1. You can move in this matrix from a cell to any other cell in the next row.
- * That is, if you are in cell (x, y) such that x < m - 1, you can move to any of the cells
- * (x + 1, 0), (x + 1, 1), ..., (x + 1, n - 1). Note that it is not possible to move from
- * cells in the last row.
- *
- * Each possible move has a cost given by a 0-indexed 2D array moveCost of size (m * n) x n,
- * where moveCost[i][j] is the cost of moving from a cell with value i to a cell in column j
- * of the next row. The cost of moving from cells in the last row of grid can be ignored.
- *
- * The cost of a path in grid is the sum of all values of cells visited plus the sum of costs
- * of all the moves made. Return the minimum cost of a path that starts from any cell in the
- * first row and ends at any cell in the last row.
- */
-
-/**
- * @param {number[][]} grid
- * @param {number[][]} moveCost
- * @return {number}
- */
-var minPathCost = function(grid, moveCost) {
- const m = grid.length;
- const n = grid[0].length;
- const dp = Array.from({ length: m }, () => new Array(n).fill(Infinity));
-
- for (let j = 0; j < n; j++) {
- dp[0][j] = grid[0][j];
- }
-
- for (let i = 0; i < m - 1; i++) {
- for (let j = 0; j < n; j++) {
- const value = grid[i][j];
- for (let k = 0; k < n; k++) {
- dp[i + 1][k] = Math.min(
- dp[i + 1][k],
- dp[i][j] + grid[i + 1][k] + moveCost[value][k]
- );
- }
- }
- }
-
- return Math.min(...dp[m - 1]);
-};
diff --git a/solutions/2305-fair-distribution-of-cookies.js b/solutions/2305-fair-distribution-of-cookies.js
deleted file mode 100644
index dffcb4a4..00000000
--- a/solutions/2305-fair-distribution-of-cookies.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2305. Fair Distribution of Cookies
- * https://leetcode.com/problems/fair-distribution-of-cookies/
- * Difficulty: Medium
- *
- * You are given an integer array cookies, where cookies[i] denotes the number of cookies in the
- * ith bag. You are also given an integer k that denotes the number of children to distribute
- * all the bags of cookies to. All the cookies in the same bag must go to the same child and
- * cannot be split up.
- *
- * The unfairness of a distribution is defined as the maximum total cookies obtained by a single
- * child in the distribution.
- *
- * Return the minimum unfairness of all distributions.
- */
-
-/**
- * @param {number[]} cookies
- * @param {number} k
- * @return {number}
- */
-var distributeCookies = function(cookies, k) {
- const distribution = new Array(k).fill(0);
- let result = Infinity;
-
- distribute(0);
-
- return result;
-
- function distribute(index) {
- if (index === cookies.length) {
- result = Math.min(result, Math.max(...distribution));
- return;
- }
-
- for (let i = 0; i < k; i++) {
- distribution[i] += cookies[index];
- if (distribution[i] < result) {
- distribute(index + 1);
- }
- distribution[i] -= cookies[index];
-
- if (distribution[i] === 0) break;
- }
- }
-};
diff --git a/solutions/2306-naming-a-company.js b/solutions/2306-naming-a-company.js
deleted file mode 100644
index bef81dfe..00000000
--- a/solutions/2306-naming-a-company.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2306. Naming a Company
- * https://leetcode.com/problems/naming-a-company/
- * Difficulty: Hard
- *
- * You are given an array of strings ideas that represents a list of names to be used in the
- * process of naming a company. The process of naming a company is as follows:
- * 1. Choose 2 distinct names from ideas, call them ideaA and ideaB.
- * 2. Swap the first letters of ideaA and ideaB with each other.
- * 3. If both of the new names are not found in the original ideas, then the name ideaA ideaB
- * (the concatenation of ideaA and ideaB, separated by a space) is a valid company name.
- * 4. Otherwise, it is not a valid name.
- *
- * Return the number of distinct valid names for the company.
- */
-
-/**
- * @param {string[]} ideas
- * @return {number}
- */
-var distinctNames = function(ideas) {
- const groups = Array.from({ length: 26 }, () => new Set());
- let result = 0;
-
- for (const idea of ideas) {
- groups[idea.charCodeAt(0) - 97].add(idea.slice(1));
- }
-
- for (let i = 0; i < 25; i++) {
- for (let j = i + 1; j < 26; j++) {
- const mutualCount = [...groups[i]].filter(suffix => groups[j].has(suffix)).length;
- result += 2 * (groups[i].size - mutualCount) * (groups[j].size - mutualCount);
- }
- }
-
- return result;
-};
diff --git a/solutions/2309-greatest-english-letter-in-upper-and-lower-case.js b/solutions/2309-greatest-english-letter-in-upper-and-lower-case.js
deleted file mode 100644
index b86b8f8b..00000000
--- a/solutions/2309-greatest-english-letter-in-upper-and-lower-case.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2309. Greatest English Letter in Upper and Lower Case
- * https://leetcode.com/problems/greatest-english-letter-in-upper-and-lower-case/
- * Difficulty: Easy
- *
- * Given a string of English letters s, return the greatest English letter which occurs as both
- * a lowercase and uppercase letter in s. The returned letter should be in uppercase. If no such
- * letter exists, return an empty string.
- *
- * An English letter b is greater than another letter a if b appears after a in the English
- * alphabet.
- */
-
-/**
- * @param {string} s
- * @return {string}
- */
-var greatestLetter = function(s) {
- const lowerSet = new Set();
- const upperSet = new Set();
-
- for (const char of s) {
- if (char >= 'a' && char <= 'z') {
- lowerSet.add(char);
- } else {
- upperSet.add(char.toLowerCase());
- }
- }
-
- let maxLetter = '';
- for (const char of lowerSet) {
- if (upperSet.has(char) && char > maxLetter) {
- maxLetter = char;
- }
- }
-
- return maxLetter.toUpperCase();
-};
diff --git a/solutions/2312-selling-pieces-of-wood.js b/solutions/2312-selling-pieces-of-wood.js
deleted file mode 100644
index 6edab3a0..00000000
--- a/solutions/2312-selling-pieces-of-wood.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2312. Selling Pieces of Wood
- * https://leetcode.com/problems/selling-pieces-of-wood/
- * Difficulty: Hard
- *
- * You are given two integers m and n that represent the height and width of a rectangular piece
- * of wood. You are also given a 2D integer array prices, where prices[i] = [hi, wi, pricei]
- * indicates you can sell a rectangular piece of wood of height hi and width wi for pricei dollars.
- *
- * To cut a piece of wood, you must make a vertical or horizontal cut across the entire height
- * or width of the piece to split it into two smaller pieces. After cutting a piece of wood into
- * some number of smaller pieces, you can sell pieces according to prices. You may sell multiple
- * pieces of the same shape, and you do not have to sell all the shapes. The grain of the wood
- * makes a difference, so you cannot rotate a piece to swap its height and width.
- *
- * Return the maximum money you can earn after cutting an m x n piece of wood.
- *
- * Note that you can cut the piece of wood as many times as you want.
- */
-
-/**
- * @param {number} m
- * @param {number} n
- * @param {number[][]} prices
- * @return {number}
- */
-var sellingWood = function(m, n, prices) {
- const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
-
- for (const [h, w, price] of prices) {
- dp[h][w] = price;
- }
-
- for (let i = 1; i <= m; i++) {
- for (let j = 1; j <= n; j++) {
- for (let k = 1; k < i; k++) {
- dp[i][j] = Math.max(dp[i][j], dp[k][j] + dp[i - k][j]);
- }
- for (let k = 1; k < j; k++) {
- dp[i][j] = Math.max(dp[i][j], dp[i][k] + dp[i][j - k]);
- }
- }
- }
-
- return dp[m][n];
-};
diff --git a/solutions/2315-count-asterisks.js b/solutions/2315-count-asterisks.js
deleted file mode 100644
index 650055eb..00000000
--- a/solutions/2315-count-asterisks.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2315. Count Asterisks
- * https://leetcode.com/problems/count-asterisks/
- * Difficulty: Easy
- *
- * You are given a string s, where every two consecutive vertical bars '|' are grouped into
- * a pair. In other words, the 1st and 2nd '|' make a pair, the 3rd and 4th '|' make a pair,
- * and so forth.
- *
- * Return the number of '*' in s, excluding the '*' between each pair of '|'.
- *
- * Note that each '|' will belong to exactly one pair.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var countAsterisks = function(s) {
- let isInsidePair = false;
- let result = 0;
-
- for (const char of s) {
- if (char === '|') {
- isInsidePair = !isInsidePair;
- } else if (char === '*' && !isInsidePair) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2316-count-unreachable-pairs-of-nodes-in-an-undirected-graph.js b/solutions/2316-count-unreachable-pairs-of-nodes-in-an-undirected-graph.js
deleted file mode 100644
index 4de0c07b..00000000
--- a/solutions/2316-count-unreachable-pairs-of-nodes-in-an-undirected-graph.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 2316. Count Unreachable Pairs of Nodes in an Undirected Graph
- * https://leetcode.com/problems/count-unreachable-pairs-of-nodes-in-an-undirected-graph/
- * Difficulty: Medium
- *
- * You are given an integer n. There is an undirected graph with n nodes, numbered from 0
- * to n - 1. You are given a 2D integer array edges where edges[i] = [ai, bi] denotes that
- * there exists an undirected edge connecting nodes ai and bi.
- *
- * Return the number of pairs of different nodes that are unreachable from each other.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @return {number}
- */
-var countPairs = function(n, edges) {
- const graph = Array.from({ length: n }, () => []);
- for (const [a, b] of edges) {
- graph[a].push(b);
- graph[b].push(a);
- }
-
- const visited = new Array(n).fill(false);
- let result = 0;
-
- let totalNodes = 0;
- for (let node = 0; node < n; node++) {
- if (!visited[node]) {
- const componentSize = exploreComponent(node);
- result += totalNodes * componentSize;
- totalNodes += componentSize;
- }
- }
-
- return result;
-
- function exploreComponent(node) {
- if (visited[node]) return 0;
- visited[node] = true;
- let size = 1;
- for (const neighbor of graph[node]) {
- size += exploreComponent(neighbor);
- }
- return size;
- }
-};
diff --git a/solutions/2317-maximum-xor-after-operations.js b/solutions/2317-maximum-xor-after-operations.js
deleted file mode 100644
index 7049675b..00000000
--- a/solutions/2317-maximum-xor-after-operations.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 2317. Maximum XOR After Operations
- * https://leetcode.com/problems/maximum-xor-after-operations/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums. In one operation, select any non-negative
- * integer x and an index i, then update nums[i] to be equal to nums[i] AND (nums[i] XOR x).
- *
- * Note that AND is the bitwise AND operation and XOR is the bitwise XOR operation.
- *
- * Return the maximum possible bitwise XOR of all elements of nums after applying the operation
- * any number of times.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var maximumXOR = function(nums) {
- let maxXor = 0;
-
- for (const num of nums) {
- maxXor |= num;
- }
-
- return maxXor;
-};
diff --git a/solutions/2318-number-of-distinct-roll-sequences.js b/solutions/2318-number-of-distinct-roll-sequences.js
deleted file mode 100644
index 5f67f5c0..00000000
--- a/solutions/2318-number-of-distinct-roll-sequences.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 2318. Number of Distinct Roll Sequences
- * https://leetcode.com/problems/number-of-distinct-roll-sequences/
- * Difficulty: Hard
- *
- * You are given an integer n. You roll a fair 6-sided dice n times. Determine the total number
- * of distinct sequences of rolls possible such that the following conditions are satisfied:
- * 1. The greatest common divisor of any adjacent values in the sequence is equal to 1.
- * 2. There is at least a gap of 2 rolls between equal valued rolls. More formally, if the
- * value of the ith roll is equal to the value of the jth roll, then abs(i - j) > 2.
- *
- * Return the total number of distinct sequences possible. Since the answer may be very large,
- * return it modulo 109 + 7.
- *
- * Two sequences are considered distinct if at least one element is different.
- */
-
-/**
- * @param {number} n
- * @return {number}
- */
-var distinctSequences = function(n) {
- const MOD = 1e9 + 7;
- const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
-
- const dp = new Array(n + 1)
- .fill()
- .map(() => new Array(7).fill().map(() => new Array(7).fill(0)));
-
- for (let i = 1; i <= 6; i++) {
- dp[1][i][0] = 1;
- }
-
- for (let len = 2; len <= n; len++) {
- for (let curr = 1; curr <= 6; curr++) {
- for (let prev = 0; prev <= 6; prev++) {
- for (let prevPrev = 0; prevPrev <= 6; prevPrev++) {
- if (dp[len - 1][prev][prevPrev] === 0) continue;
- if (curr === prev || curr === prevPrev) continue;
- if (prev !== 0 && gcd(curr, prev) !== 1) continue;
- dp[len][curr][prev] = (dp[len][curr][prev] + dp[len - 1][prev][prevPrev]) % MOD;
- }
- }
- }
- }
-
- let result = 0;
- for (let curr = 1; curr <= 6; curr++) {
- for (let prev = 0; prev <= 6; prev++) {
- result = (result + dp[n][curr][prev]) % MOD;
- }
- }
-
- return result;
-};
diff --git a/solutions/2319-check-if-matrix-is-x-matrix.js b/solutions/2319-check-if-matrix-is-x-matrix.js
deleted file mode 100644
index ee45ca42..00000000
--- a/solutions/2319-check-if-matrix-is-x-matrix.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2319. Check if Matrix Is X-Matrix
- * https://leetcode.com/problems/check-if-matrix-is-x-matrix/
- * Difficulty: Easy
- *
- * A square matrix is said to be an X-Matrix if both of the following conditions hold:
- * 1. All the elements in the diagonals of the matrix are non-zero.
- * 2. All other elements are 0.
- *
- * Given a 2D integer array grid of size n x n representing a square matrix, return true if grid
- * is an X-Matrix. Otherwise, return false.
- */
-
-/**
- * @param {number[][]} grid
- * @return {boolean}
- */
-var checkXMatrix = function(grid) {
- const size = grid.length;
-
- for (let row = 0; row < size; row++) {
- for (let col = 0; col < size; col++) {
- const isDiagonal = row === col || row + col === size - 1;
- const isNonZero = grid[row][col] !== 0;
-
- if (isDiagonal && !isNonZero) return false;
- if (!isDiagonal && isNonZero) return false;
- }
- }
-
- return true;
-};
diff --git a/solutions/2320-count-number-of-ways-to-place-houses.js b/solutions/2320-count-number-of-ways-to-place-houses.js
deleted file mode 100644
index 39c28f72..00000000
--- a/solutions/2320-count-number-of-ways-to-place-houses.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 2320. Count Number of Ways to Place Houses
- * https://leetcode.com/problems/count-number-of-ways-to-place-houses/
- * Difficulty: Medium
- *
- * There is a street with n * 2 plots, where there are n plots on each side of the street. The plots
- * on each side are numbered from 1 to n. On each plot, a house can be placed.
- *
- * Return the number of ways houses can be placed such that no two houses are adjacent to each other
- * on the same side of the street. Since the answer may be very large, return it modulo 109 + 7.
- *
- * Note that if a house is placed on the ith plot on one side of the street, a house can also be
- * placed on the ith plot on the other side of the street.
- */
-
-/**
- * @param {number} n
- * @return {number}
- */
-var countHousePlacements = function(n) {
- const MOD = 1e9 + 7;
- let empty = 1n;
- let house = 1n;
-
- for (let i = 2; i <= n; i++) {
- const nextEmpty = (empty + house) % BigInt(MOD);
- const nextHouse = empty;
- empty = nextEmpty;
- house = nextHouse;
- }
-
- const sideWays = (empty + house) % BigInt(MOD);
- return Number((sideWays * sideWays) % BigInt(MOD));
-};
diff --git a/solutions/2321-maximum-score-of-spliced-array.js b/solutions/2321-maximum-score-of-spliced-array.js
deleted file mode 100644
index 3ecf5068..00000000
--- a/solutions/2321-maximum-score-of-spliced-array.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 2321. Maximum Score Of Spliced Array
- * https://leetcode.com/problems/maximum-score-of-spliced-array/
- * Difficulty: Hard
- *
- * You are given two 0-indexed integer arrays nums1 and nums2, both of length n.
- *
- * You can choose two integers left and right where 0 <= left <= right < n and swap the subarray
- * nums1[left...right] with the subarray nums2[left...right].
- * - For example, if nums1 = [1,2,3,4,5] and nums2 = [11,12,13,14,15] and you choose left = 1 and
- * right = 2, nums1 becomes [1,12,13,4,5] and nums2 becomes [11,2,3,14,15].
- *
- * You may choose to apply the mentioned operation once or not do anything.
- *
- * The score of the arrays is the maximum of sum(nums1) and sum(nums2), where sum(arr) is the sum
- * of all the elements in the array arr.
- *
- * Return the maximum possible score.
- *
- * A subarray is a contiguous sequence of elements within an array. arr[left...right] denotes the
- * subarray that contains the elements of nums between indices left and right (inclusive).
- */
-
-/**
- * @param {number[]} nums1
- * @param {number[]} nums2
- * @return {number}
- */
-var maximumsSplicedArray = function(nums1, nums2) {
- const length = nums1.length;
- let sum1 = 0;
- let sum2 = 0;
-
- for (let i = 0; i < length; i++) {
- sum1 += nums1[i];
- sum2 += nums2[i];
- }
-
- let maxGain1 = 0;
- let maxGain2 = 0;
- let currGain1 = 0;
- let currGain2 = 0;
-
- for (let i = 0; i < length; i++) {
- currGain1 = Math.max(0, currGain1 + nums2[i] - nums1[i]);
- currGain2 = Math.max(0, currGain2 + nums1[i] - nums2[i]);
- maxGain1 = Math.max(maxGain1, currGain1);
- maxGain2 = Math.max(maxGain2, currGain2);
- }
-
- return Math.max(sum1 + maxGain1, sum2 + maxGain2);
-};
diff --git a/solutions/2322-minimum-score-after-removals-on-a-tree.js b/solutions/2322-minimum-score-after-removals-on-a-tree.js
deleted file mode 100644
index 4b0b6cd0..00000000
--- a/solutions/2322-minimum-score-after-removals-on-a-tree.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * 2322. Minimum Score After Removals on a Tree
- * https://leetcode.com/problems/minimum-score-after-removals-on-a-tree/
- * Difficulty: Hard
- *
- * There is an undirected connected tree with n nodes labeled from 0 to n - 1 and n - 1 edges.
- *
- * You are given a 0-indexed integer array nums of length n where nums[i] represents the value
- * of the ith node. You are also given a 2D integer array edges of length n - 1 where
- * edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi in the tree.
- *
- * Remove two distinct edges of the tree to form three connected components. For a pair of
- * removed edges, the following steps are defined:
- * 1. Get the XOR of all the values of the nodes for each of the three components respectively.
- * 2. The difference between the largest XOR value and the smallest XOR value is the score of
- * the pair.
- * 3. For example, say the three components have the node values: [4,5,7], [1,9], and [3,3,3].
- * The three XOR values are 4 ^ 5 ^ 7 = 6, 1 ^ 9 = 8, and 3 ^ 3 ^ 3 = 3. The largest XOR
- * value is 8 and the smallest XOR value is 3. The score is then 8 - 3 = 5.
- *
- * Return the minimum score of any possible pair of edge removals on the given tree.
- */
-
-/**
-* @param {number[]} nums
-* @param {number[][]} edges
-* @return {number}
-*/
-var minimumScore = function(nums, edges) {
- const n = nums.length;
- const graph = Array.from({ length: n }, () => []);
-
- for (const [a, b] of edges) {
- graph[a].push(b);
- graph[b].push(a);
- }
-
- const totalXor = nums.reduce((acc, num) => acc ^ num, 0);
-
- const subtreeXor = new Array(n).fill(0);
-
- const tin = new Array(n);
- const tout = new Array(n);
- let timer = 0;
-
- function dfs(node, parent) {
- tin[node] = timer++;
- subtreeXor[node] = nums[node];
-
- for (const neighbor of graph[node]) {
- if (neighbor !== parent) {
- dfs(neighbor, node);
- subtreeXor[node] ^= subtreeXor[neighbor];
- }
- }
-
- tout[node] = timer++;
- }
-
- dfs(0, -1);
-
- function isAncestor(a, b) {
- return tin[a] <= tin[b] && tout[a] >= tout[b];
- }
-
- let result = Infinity;
- for (let i = 0; i < n - 1; i++) {
- for (let j = i + 1; j < n - 1; j++) {
- const edge1 = edges[i];
- const edge2 = edges[j];
-
- let node1;
- if (isAncestor(edge1[0], edge1[1])) {
- node1 = edge1[1];
- } else {
- node1 = edge1[0];
- }
- const subtree1 = subtreeXor[node1];
-
- let node2;
- if (isAncestor(edge2[0], edge2[1])) {
- node2 = edge2[1];
- } else {
- node2 = edge2[0];
- }
- const subtree2 = subtreeXor[node2];
-
- let component1;
- let component2;
- let component3;
- if (isAncestor(node1, node2)) {
- component1 = subtree2;
- component2 = subtree1 ^ component1;
- component3 = totalXor ^ subtree1;
- } else if (isAncestor(node2, node1)) {
- component1 = subtree1;
- component2 = subtree2 ^ component1;
- component3 = totalXor ^ subtree2;
- } else {
- component1 = subtree1;
- component2 = subtree2;
- component3 = totalXor ^ component1 ^ component2;
- }
-
- const maxXor = Math.max(component1, component2, component3);
- const minXor = Math.min(component1, component2, component3);
- result = Math.min(result, maxXor - minXor);
- }
- }
-
- return result;
-};
diff --git a/solutions/2325-decode-the-message.js b/solutions/2325-decode-the-message.js
deleted file mode 100644
index bde90e23..00000000
--- a/solutions/2325-decode-the-message.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2325. Decode the Message
- * https://leetcode.com/problems/decode-the-message/
- * Difficulty: Easy
- *
- * You are given the strings key and message, which represent a cipher key and a secret message,
- * respectively. The steps to decode message are as follows:
- * 1. Use the first appearance of all 26 lowercase English letters in key as the order of the
- * substitution table.
- * 2. Align the substitution table with the regular English alphabet.
- * 3. Each letter in message is then substituted using the table.
- * 4. Spaces ' ' are transformed to themselves.
- * 5. For example, given key = "happy boy" (actual key would have at least one instance of each
- * letter in the alphabet), we have the partial substitution table of ('h' -> 'a', 'a' -> 'b',
- * 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f').
- *
- * Return the decoded message.
- */
-
-/**
- * @param {string} key
- * @param {string} message
- * @return {string}
- */
-var decodeMessage = function(key, message) {
- const substitution = new Map();
- let alphabetIndex = 0;
-
- for (const char of key) {
- if (char !== ' ' && !substitution.has(char)) {
- substitution.set(char, String.fromCharCode(97 + alphabetIndex++));
- }
- }
-
- let result = '';
- for (const char of message) {
- result += char === ' ' ? ' ' : substitution.get(char);
- }
-
- return result;
-};
diff --git a/solutions/2326-spiral-matrix-iv.js b/solutions/2326-spiral-matrix-iv.js
deleted file mode 100644
index 1fa98050..00000000
--- a/solutions/2326-spiral-matrix-iv.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 2326. Spiral Matrix IV
- * https://leetcode.com/problems/spiral-matrix-iv/
- * Difficulty: Medium
- *
- * You are given two integers m and n, which represent the dimensions of a matrix.
- *
- * You are also given the head of a linked list of integers.
- *
- * Generate an m x n matrix that contains the integers in the linked list presented in spiral
- * order (clockwise), starting from the top-left of the matrix. If there are remaining empty
- * spaces, fill them with -1.
- *
- * Return the generated matrix.
- */
-
-/**
- * Definition for singly-linked list.
- * function ListNode(val, next) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- */
-/**
- * @param {number} m
- * @param {number} n
- * @param {ListNode} head
- * @return {number[][]}
- */
-var spiralMatrix = function(m, n, head) {
- const matrix = new Array(m).fill().map(() => new Array(n).fill(-1));
- let top = 0;
- let bottom = m - 1;
- let left = 0;
- let right = n - 1;
- let current = head;
-
- while (top <= bottom && left <= right && current) {
- for (let col = left; col <= right && current; col++) {
- matrix[top][col] = current.val;
- current = current.next;
- }
- top++;
-
- for (let row = top; row <= bottom && current; row++) {
- matrix[row][right] = current.val;
- current = current.next;
- }
- right--;
-
- for (let col = right; col >= left && current; col--) {
- matrix[bottom][col] = current.val;
- current = current.next;
- }
- bottom--;
-
- for (let row = bottom; row >= top && current; row--) {
- matrix[row][left] = current.val;
- current = current.next;
- }
- left++;
- }
-
- return matrix;
-};
diff --git a/solutions/2328-number-of-increasing-paths-in-a-grid.js b/solutions/2328-number-of-increasing-paths-in-a-grid.js
deleted file mode 100644
index f239c80c..00000000
--- a/solutions/2328-number-of-increasing-paths-in-a-grid.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 2328. Number of Increasing Paths in a Grid
- * https://leetcode.com/problems/number-of-increasing-paths-in-a-grid/
- * Difficulty: Hard
- *
- * You are given an m x n integer matrix grid, where you can move from a cell to any adjacent
- * cell in all 4 directions.
- *
- * Return the number of strictly increasing paths in the grid such that you can start from any
- * cell and end at any cell. Since the answer may be very large, return it modulo 109 + 7.
- *
- * Two paths are considered different if they do not have exactly the same sequence of visited
- * cells.
- */
-
-/**
- * @param {number[][]} grid
- * @return {number}
- */
-var countPaths = function(grid) {
- const MOD = 1e9 + 7;
- const rows = grid.length;
- const cols = grid[0].length;
- const cache = new Array(rows).fill().map(() => new Array(cols).fill(0));
- const directions = [[0, 1], [1, 0], [0, -1], [-1, 0]];
-
- function explore(row, col) {
- if (cache[row][col]) return cache[row][col];
-
- let paths = 1;
- for (const [dr, dc] of directions) {
- const newRow = row + dr;
- const newCol = col + dc;
- if (
- newRow >= 0 && newRow < rows && newCol >= 0
- && newCol < cols && grid[newRow][newCol] > grid[row][col]
- ) {
- paths = (paths + explore(newRow, newCol)) % MOD;
- }
- }
-
- return cache[row][col] = paths;
- }
-
- let total = 0;
- for (let i = 0; i < rows; i++) {
- for (let j = 0; j < cols; j++) {
- total = (total + explore(i, j)) % MOD;
- }
- }
-
- return total;
-};
diff --git a/solutions/2331-evaluate-boolean-binary-tree.js b/solutions/2331-evaluate-boolean-binary-tree.js
deleted file mode 100644
index d6f4d851..00000000
--- a/solutions/2331-evaluate-boolean-binary-tree.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2331. Evaluate Boolean Binary Tree
- * https://leetcode.com/problems/evaluate-boolean-binary-tree/
- * Difficulty: Easy
- *
- * You are given the root of a full binary tree with the following properties:
- * - Leaf nodes have either the value 0 or 1, where 0 represents False and 1 represents True.
- * - Non-leaf nodes have either the value 2 or 3, where 2 represents the boolean OR and 3 represents
- * the boolean AND.
- *
- * The evaluation of a node is as follows:
- * - If the node is a leaf node, the evaluation is the value of the node, i.e. True or False.
- * - Otherwise, evaluate the node's two children and apply the boolean operation of its value with
- * the children's evaluations.
- *
- * Return the boolean result of evaluating the root node.
- *
- * A full binary tree is a binary tree where each node has either 0 or 2 children.
- *
- * A leaf node is a node that has zero children.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode} root
- * @return {boolean}
- */
-var evaluateTree = function(root) {
- if (!root.left && !root.right) return root.val === 1;
-
- const leftResult = evaluateTree(root.left);
- const rightResult = evaluateTree(root.right);
-
- return root.val === 2 ? leftResult || rightResult : leftResult && rightResult;
-};
diff --git a/solutions/2334-subarray-with-elements-greater-than-varying-threshold.js b/solutions/2334-subarray-with-elements-greater-than-varying-threshold.js
deleted file mode 100644
index 789a5ff3..00000000
--- a/solutions/2334-subarray-with-elements-greater-than-varying-threshold.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2334. Subarray With Elements Greater Than Varying Threshold
- * https://leetcode.com/problems/subarray-with-elements-greater-than-varying-threshold/
- * Difficulty: Hard
- *
- * You are given an integer array nums and an integer threshold.
- *
- * Find any subarray of nums of length k such that every element in the subarray is greater
- * than threshold / k.
- *
- * Return the size of any such subarray. If there is no such subarray, return -1.
- *
- * A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} threshold
- * @return {number}
- */
-var validSubarraySize = function(nums, threshold) {
- const n = nums.length;
- const stack = [];
- const nextSmaller = new Array(n).fill(n);
- const prevSmaller = new Array(n).fill(-1);
-
- for (let i = 0; i < n; i++) {
- while (stack.length && nums[stack[stack.length - 1]] >= nums[i]) {
- nextSmaller[stack.pop()] = i;
- }
- if (stack.length) prevSmaller[i] = stack[stack.length - 1];
- stack.push(i);
- }
-
- for (let i = 0; i < n; i++) {
- const k = nextSmaller[i] - prevSmaller[i] - 1;
- if (k > 0 && nums[i] > threshold / k) {
- return k;
- }
- }
-
- return -1;
-};
diff --git a/solutions/2337-move-pieces-to-obtain-a-string.js b/solutions/2337-move-pieces-to-obtain-a-string.js
deleted file mode 100644
index 64f29a9a..00000000
--- a/solutions/2337-move-pieces-to-obtain-a-string.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2337. Move Pieces to Obtain a String
- * https://leetcode.com/problems/move-pieces-to-obtain-a-string/
- * Difficulty: Medium
- *
- * You are given two strings start and target, both of length n. Each string consists only of
- * the characters 'L', 'R', and '_' where:
- * - The characters 'L' and 'R' represent pieces, where a piece 'L' can move to the left only if
- * there is a blank space directly to its left, and a piece 'R' can move to the right only if
- * there is a blank space directly to its right.
- * - The character '_' represents a blank space that can be occupied by any of the 'L' or 'R'
- * pieces.
- *
- * Return true if it is possible to obtain the string target by moving the pieces of the string
- * start any number of times. Otherwise, return false.
- */
-
-/**
- * @param {string} start
- * @param {string} target
- * @return {boolean}
- */
-var canChange = function(start, target) {
- const pieces = [];
- const targetPieces = [];
-
- for (let i = 0; i < start.length; i++) {
- if (start[i] !== '_') pieces.push([start[i], i]);
- if (target[i] !== '_') targetPieces.push([target[i], i]);
- }
-
- if (pieces.length !== targetPieces.length) return false;
-
- for (let i = 0; i < pieces.length; i++) {
- if (pieces[i][0] !== targetPieces[i][0]) return false;
- if (pieces[i][0] === 'L' && pieces[i][1] < targetPieces[i][1]) return false;
- if (pieces[i][0] === 'R' && pieces[i][1] > targetPieces[i][1]) return false;
- }
-
- return true;
-};
diff --git a/solutions/2338-count-the-number-of-ideal-arrays.js b/solutions/2338-count-the-number-of-ideal-arrays.js
deleted file mode 100644
index dab7d4bc..00000000
--- a/solutions/2338-count-the-number-of-ideal-arrays.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 2338. Count the Number of Ideal Arrays
- * https://leetcode.com/problems/count-the-number-of-ideal-arrays/
- * Difficulty: Hard
- *
- * You are given two integers n and maxValue, which are used to describe an ideal array.
- *
- * A 0-indexed integer array arr of length n is considered ideal if the following conditions hold:
- * - Every arr[i] is a value from 1 to maxValue, for 0 <= i < n.
- * - Every arr[i] is divisible by arr[i - 1], for 0 < i < n.
- *
- * Return the number of distinct ideal arrays of length n. Since the answer may be very large,
- * return it modulo 109 + 7.
- */
-
-/**
- * @param {number} n
- * @param {number} maxValue
- * @return {number}
- */
-var idealArrays = function(n, maxValue) {
- const MOD = 1e9 + 7;
- const MAX_N = 10010;
- const MAX_P = 15;
-
- const c = Array.from({ length: MAX_N + MAX_P }, () =>
- new Array(MAX_P + 1).fill(0)
- );
- const sieve = new Array(MAX_N).fill(0);
- const ps = Array.from({ length: MAX_N }, () => []);
-
- for (let i = 2; i < MAX_N; i++) {
- if (sieve[i] === 0) {
- for (let j = i; j < MAX_N; j += i) {
- if (sieve[j] === 0) {
- sieve[j] = i;
- }
- }
- }
- }
-
- for (let i = 2; i < MAX_N; i++) {
- let x = i;
- while (x > 1) {
- const p = sieve[x];
- let cnt = 0;
- while (x % p === 0) {
- x = Math.floor(x / p);
- cnt++;
- }
- ps[i].push(cnt);
- }
- }
-
- c[0][0] = 1;
- for (let i = 1; i < MAX_N + MAX_P; i++) {
- c[i][0] = 1;
- for (let j = 1; j <= Math.min(i, MAX_P); j++) {
- c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MOD;
- }
- }
-
- let ans = 0n;
- for (let x = 1; x <= maxValue; x++) {
- let mul = 1n;
- for (const p of ps[x]) {
- mul = (mul * BigInt(c[n + p - 1][p])) % BigInt(MOD);
- }
- ans = (ans + mul) % BigInt(MOD);
- }
-
- return Number(ans);
-};
diff --git a/solutions/2341-maximum-number-of-pairs-in-array.js b/solutions/2341-maximum-number-of-pairs-in-array.js
deleted file mode 100644
index 2cdcce2c..00000000
--- a/solutions/2341-maximum-number-of-pairs-in-array.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 2341. Maximum Number of Pairs in Array
- * https://leetcode.com/problems/maximum-number-of-pairs-in-array/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums. In one operation, you may do the following:
- * - Choose two integers in nums that are equal.
- * - Remove both integers from nums, forming a pair.
- *
- * The operation is done on nums as many times as possible.
- *
- * Return a 0-indexed integer array answer of size 2 where answer[0] is the number of pairs that
- * are formed and answer[1] is the number of leftover integers in nums after doing the operation
- * as many times as possible.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var numberOfPairs = function(nums) {
- const frequency = new Map();
- let pairs = 0;
-
- for (const num of nums) {
- frequency.set(num, (frequency.get(num) || 0) + 1);
- if (frequency.get(num) === 2) {
- pairs++;
- frequency.set(num, 0);
- }
- }
-
- const leftovers = nums.length - pairs * 2;
- return [pairs, leftovers];
-};
diff --git a/solutions/2347-best-poker-hand.js b/solutions/2347-best-poker-hand.js
deleted file mode 100644
index 586dcda2..00000000
--- a/solutions/2347-best-poker-hand.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2347. Best Poker Hand
- * https://leetcode.com/problems/best-poker-hand/
- * Difficulty: Easy
- *
- * You are given an integer array ranks and a character array suits. You have 5 cards where the
- * ith card has a rank of ranks[i] and a suit of suits[i].
- *
- * The following are the types of poker hands you can make from best to worst:
- * 1. "Flush": Five cards of the same suit.
- * 2. "Three of a Kind": Three cards of the same rank.
- * 3. "Pair": Two cards of the same rank.
- * 4. "High Card": Any single card.
- *
- * Return a string representing the best type of poker hand you can make with the given cards.
- *
- * Note that the return values are case-sensitive.
- */
-
-/**
- * @param {number[]} ranks
- * @param {character[]} suits
- * @return {string}
- */
-var bestHand = function(ranks, suits) {
- const suitCount = new Map();
- const rankCount = new Map();
-
- for (let i = 0; i < 5; i++) {
- suitCount.set(suits[i], (suitCount.get(suits[i]) || 0) + 1);
- rankCount.set(ranks[i], (rankCount.get(ranks[i]) || 0) + 1);
- }
-
- if (suitCount.size === 1) return 'Flush';
-
- const maxRankCount = Math.max(...rankCount.values());
- if (maxRankCount >= 3) return 'Three of a Kind';
- if (maxRankCount === 2) return 'Pair';
-
- return 'High Card';
-};
diff --git a/solutions/2348-number-of-zero-filled-subarrays.js b/solutions/2348-number-of-zero-filled-subarrays.js
deleted file mode 100644
index fa93ec19..00000000
--- a/solutions/2348-number-of-zero-filled-subarrays.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 2348. Number of Zero-Filled Subarrays
- * https://leetcode.com/problems/number-of-zero-filled-subarrays/
- * Difficulty: Medium
- *
- * Given an integer array nums, return the number of subarrays filled with 0.
- *
- * A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var zeroFilledSubarray = function(nums) {
- let result = 0;
- let zeroCount = 0;
-
- for (const num of nums) {
- if (num === 0) {
- zeroCount++;
- result += zeroCount;
- } else {
- zeroCount = 0;
- }
- }
-
- return result;
-};
diff --git a/solutions/2350-shortest-impossible-sequence-of-rolls.js b/solutions/2350-shortest-impossible-sequence-of-rolls.js
deleted file mode 100644
index ea27a604..00000000
--- a/solutions/2350-shortest-impossible-sequence-of-rolls.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2350. Shortest Impossible Sequence of Rolls
- * https://leetcode.com/problems/shortest-impossible-sequence-of-rolls/
- * Difficulty: Hard
- *
- * You are given an integer array rolls of length n and an integer k. You roll a k sided dice
- * numbered from 1 to k, n times, where the result of the ith roll is rolls[i].
- *
- * Return the length of the shortest sequence of rolls so that there's no such subsequence in rolls.
- *
- * A sequence of rolls of length len is the result of rolling a k sided dice len times.
- */
-
-/**
- * @param {number[]} rolls
- * @param {number} k
- * @return {number}
- */
-var shortestSequence = function(rolls, k) {
- const set = new Set();
- let sequences = 0;
-
- for (const roll of rolls) {
- set.add(roll);
- if (set.size === k) {
- sequences++;
- set.clear();
- }
- }
-
- return sequences + 1;
-};
diff --git a/solutions/2351-first-letter-to-appear-twice.js b/solutions/2351-first-letter-to-appear-twice.js
deleted file mode 100644
index b5fff8f5..00000000
--- a/solutions/2351-first-letter-to-appear-twice.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * 2351. First Letter to Appear Twice
- * https://leetcode.com/problems/first-letter-to-appear-twice/
- * Difficulty: Easy
- *
- * Given a string s consisting of lowercase English letters, return the first letter
- * to appear twice.
- *
- * Note:
- * - A letter a appears twice before another letter b if the second occurrence of a is before
- * the second occurrence of b.
- * - s will contain at least one letter that appears twice.
- */
-
-/**
- * @param {string} s
- * @return {character}
- */
-var repeatedCharacter = function(s) {
- const set = new Set();
-
- for (const char of s) {
- if (set.has(char)) return char;
- set.add(char);
- }
-};
diff --git a/solutions/2354-number-of-excellent-pairs.js b/solutions/2354-number-of-excellent-pairs.js
deleted file mode 100644
index bf60424a..00000000
--- a/solutions/2354-number-of-excellent-pairs.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2354. Number of Excellent Pairs
- * https://leetcode.com/problems/number-of-excellent-pairs/
- * Difficulty: Hard
- *
- * You are given a 0-indexed positive integer array nums and a positive integer k.
- *
- * A pair of numbers (num1, num2) is called excellent if the following conditions are satisfied:
- * - Both the numbers num1 and num2 exist in the array nums.
- * - The sum of the number of set bits in num1 OR num2 and num1 AND num2 is greater than or equal
- * to k, where OR is the bitwise OR operation and AND is the bitwise AND operation.
- *
- * Return the number of distinct excellent pairs.
- *
- * Two pairs (a, b) and (c, d) are considered distinct if either a != c or b != d. For example,
- * (1, 2) and (2, 1) are distinct.
- *
- * Note that a pair (num1, num2) such that num1 == num2 can also be excellent if you have at least
- * one occurrence of num1 in the array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countExcellentPairs = function(nums, k) {
- const map = new Map();
- const set = new Set(nums);
-
- for (const num of set) {
- const bits = num.toString(2).split('0').join('').length;
- map.set(bits, (map.get(bits) || 0) + 1);
- }
-
- let result = 0;
- for (const [i, countI] of map) {
- for (const [j, countJ] of map) {
- if (i + j >= k) {
- result += countI * countJ;
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2358-maximum-number-of-groups-entering-a-competition.js b/solutions/2358-maximum-number-of-groups-entering-a-competition.js
deleted file mode 100644
index 2637927b..00000000
--- a/solutions/2358-maximum-number-of-groups-entering-a-competition.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2358. Maximum Number of Groups Entering a Competition
- * https://leetcode.com/problems/maximum-number-of-groups-entering-a-competition/
- * Difficulty: Medium
- *
- * You are given a positive integer array grades which represents the grades of students in
- * a university. You would like to enter all these students into a competition in ordered
- * non-empty groups, such that the ordering meets the following conditions:
- * - The sum of the grades of students in the ith group is less than the sum of the grades of
- * students in the (i + 1)th group, for all groups (except the last).
- * - The total number of students in the ith group is less than the total number of students
- * in the (i + 1)th group, for all groups (except the last).
- *
- * Return the maximum number of groups that can be formed.
- */
-
-/**
- * @param {number[]} grades
- * @return {number}
- */
-var maximumGroups = function(grades) {
- let result = 0;
- let studentsUsed = 0;
-
- while (studentsUsed + result + 1 <= grades.length) {
- result++;
- studentsUsed += result;
- }
-
- return result;
-};
diff --git a/solutions/2359-find-closest-node-to-given-two-nodes.js b/solutions/2359-find-closest-node-to-given-two-nodes.js
deleted file mode 100644
index c048153f..00000000
--- a/solutions/2359-find-closest-node-to-given-two-nodes.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 2359. Find Closest Node to Given Two Nodes
- * https://leetcode.com/problems/find-closest-node-to-given-two-nodes/
- * Difficulty: Medium
- *
- * You are given a directed graph of n nodes numbered from 0 to n - 1, where each node has at
- * most one outgoing edge.
- *
- * The graph is represented with a given 0-indexed array edges of size n, indicating that there
- * is a directed edge from node i to node edges[i]. If there is no outgoing edge from i, then
- * edges[i] == -1.
- *
- * You are also given two integers node1 and node2.
- *
- * Return the index of the node that can be reached from both node1 and node2, such that the maximum
- * between the distance from node1 to that node, and from node2 to that node is minimized. If there
- * are multiple answers, return the node with the smallest index, and if no possible answer exists,
- * return -1.
- *
- * Note that edges may contain cycles.
- */
-
-/**
- * @param {number[]} edges
- * @param {number} node1
- * @param {number} node2
- * @return {number}
- */
-var closestMeetingNode = function(edges, node1, node2) {
- const n = edges.length;
- const dist1 = new Array(n).fill(Infinity);
- const dist2 = new Array(n).fill(Infinity);
-
- computeDistances(node1, dist1);
- computeDistances(node2, dist2);
-
- let minDist = Infinity;
- let result = -1;
-
- for (let i = 0; i < n; i++) {
- if (dist1[i] !== Infinity && dist2[i] !== Infinity) {
- const maxDist = Math.max(dist1[i], dist2[i]);
- if (maxDist < minDist) {
- minDist = maxDist;
- result = i;
- }
- }
- }
-
- return result;
-
- function computeDistances(start, distances) {
- let current = start;
- let steps = 0;
- const visited = new Set();
-
- while (current !== -1 && !visited.has(current)) {
- distances[current] = steps++;
- visited.add(current);
- current = edges[current];
- }
- }
-};
diff --git a/solutions/2360-longest-cycle-in-a-graph.js b/solutions/2360-longest-cycle-in-a-graph.js
deleted file mode 100644
index 6da96750..00000000
--- a/solutions/2360-longest-cycle-in-a-graph.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 2360. Longest Cycle in a Graph
- * https://leetcode.com/problems/longest-cycle-in-a-graph/
- * Difficulty: Hard
- *
- * You are given a directed graph of n nodes numbered from 0 to n - 1, where each node has at
- * most one outgoing edge.
- *
- * The graph is represented with a given 0-indexed array edges of size n, indicating that
- * there is a directed edge from node i to node edges[i]. If there is no outgoing edge from
- * node i, then edges[i] == -1.
- *
- * Return the length of the longest cycle in the graph. If no cycle exists, return -1.
- *
- * A cycle is a path that starts and ends at the same node.
- */
-
-/**
- * @param {number[]} edges
- * @return {number}
- */
-var longestCycle = function(edges) {
- const n = edges.length;
- const visited = new Array(n).fill(false);
- let result = -1;
-
- for (let i = 0; i < n; i++) {
- if (!visited[i]) {
- findCycle(i, 0, []);
- }
- }
-
- return result;
-
- function findCycle(node, steps, path) {
- if (visited[node]) {
- const cycleStart = path.indexOf(node);
- if (cycleStart !== -1) {
- result = Math.max(result, steps - cycleStart);
- }
- return;
- }
-
- visited[node] = true;
- path.push(node);
-
- if (edges[node] !== -1) {
- findCycle(edges[node], steps + 1, path);
- }
-
- path.pop();
- }
-};
diff --git a/solutions/2363-merge-similar-items.js b/solutions/2363-merge-similar-items.js
deleted file mode 100644
index da16c478..00000000
--- a/solutions/2363-merge-similar-items.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2363. Merge Similar Items
- * https://leetcode.com/problems/merge-similar-items/
- * Difficulty: Easy
- *
- * You are given two 2D integer arrays, items1 and items2, representing two sets of items.
- * Each array items has the following properties:
- * - items[i] = [valuei, weighti] where valuei represents the value and weighti represents
- * the weight of the ith item.
- * - The value of each item in items is unique.
- *
- * Return a 2D integer array ret where ret[i] = [valuei, weighti], with weighti being the sum of
- * weights of all items with value valuei.
- *
- * Note: ret should be returned in ascending order by value.
- */
-
-/**
- * @param {number[][]} items1
- * @param {number[][]} items2
- * @return {number[][]}
- */
-var mergeSimilarItems = function(items1, items2) {
- const map = new Map();
-
- for (const [value, weight] of items1) {
- map.set(value, (map.get(value) || 0) + weight);
- }
-
- for (const [value, weight] of items2) {
- map.set(value, (map.get(value) || 0) + weight);
- }
-
- const merged = [];
- for (const [value, weight] of map) {
- merged.push([value, weight]);
- }
-
- return merged.sort((a, b) => a[0] - b[0]);
-};
diff --git a/solutions/2365-task-scheduler-ii.js b/solutions/2365-task-scheduler-ii.js
deleted file mode 100644
index 166fdfdf..00000000
--- a/solutions/2365-task-scheduler-ii.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2365. Task Scheduler II
- * https://leetcode.com/problems/task-scheduler-ii/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array of positive integers tasks, representing tasks that need
- * to be completed in order, where tasks[i] represents the type of the ith task.
- *
- * You are also given a positive integer space, which represents the minimum number of days
- * that must pass after the completion of a task before another task of the same type can be
- * performed.
- *
- * Each day, until all tasks have been completed, you must either:
- * - Complete the next task from tasks, or
- * - Take a break.
- *
- * Return the minimum number of days needed to complete all tasks.
- */
-
-/**
- * @param {number[]} tasks
- * @param {number} space
- * @return {number}
- */
-var taskSchedulerII = function(tasks, space) {
- const map = new Map();
- let result = 0;
-
- for (const task of tasks) {
- result++;
- if (map.has(task)) {
- const lastDay = map.get(task);
- if (result - lastDay <= space) {
- result = lastDay + space + 1;
- }
- }
- map.set(task, result);
- }
-
- return result;
-};
diff --git a/solutions/2366-minimum-replacements-to-sort-the-array.js b/solutions/2366-minimum-replacements-to-sort-the-array.js
deleted file mode 100644
index 422d21f6..00000000
--- a/solutions/2366-minimum-replacements-to-sort-the-array.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2366. Minimum Replacements to Sort the Array
- * https://leetcode.com/problems/minimum-replacements-to-sort-the-array/
- * Difficulty: Hard
- *
- * You are given a 0-indexed integer array nums. In one operation you can replace any element
- * of the array with any two elements that sum to it.
- * - For example, consider nums = [5,6,7]. In one operation, we can replace nums[1] with 2 and 4
- * and convert nums to [5,2,4,7].
- *
- * Return the minimum number of operations to make an array that is sorted in non-decreasing order.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minimumReplacement = function(nums) {
- let result = 0;
- let prev = nums[nums.length - 1];
-
- for (let i = nums.length - 2; i >= 0; i--) {
- if (nums[i] > prev) {
- const splits = Math.ceil(nums[i] / prev);
- result += splits - 1;
- prev = Math.floor(nums[i] / splits);
- } else {
- prev = nums[i];
- }
- }
-
- return result;
-};
diff --git a/solutions/2367-number-of-arithmetic-triplets.js b/solutions/2367-number-of-arithmetic-triplets.js
deleted file mode 100644
index 21c02a86..00000000
--- a/solutions/2367-number-of-arithmetic-triplets.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 2367. Number of Arithmetic Triplets
- * https://leetcode.com/problems/number-of-arithmetic-triplets/
- * Difficulty: Easy
- *
- * You are given a 0-indexed, strictly increasing integer array nums and a positive integer diff.
- * A triplet (i, j, k) is an arithmetic triplet if the following conditions are met:
- * - i < j < k,
- * - nums[j] - nums[i] == diff, and
- * - nums[k] - nums[j] == diff.
- *
- * Return the number of unique arithmetic triplets.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} diff
- * @return {number}
- */
-var arithmeticTriplets = function(nums, diff) {
- let result = 0;
-
- for (let j = 1; j < nums.length - 1; j++) {
- let i = j - 1;
- let k = j + 1;
-
- while (i >= 0 && nums[j] - nums[i] <= diff) {
- if (nums[j] - nums[i] === diff) {
- while (k < nums.length && nums[k] - nums[j] <= diff) {
- if (nums[k] - nums[j] === diff) {
- result++;
- }
- k++;
- }
- }
- i--;
- }
- }
-
- return result;
-};
diff --git a/solutions/2368-reachable-nodes-with-restrictions.js b/solutions/2368-reachable-nodes-with-restrictions.js
deleted file mode 100644
index 1ecd0821..00000000
--- a/solutions/2368-reachable-nodes-with-restrictions.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2368. Reachable Nodes With Restrictions
- * https://leetcode.com/problems/reachable-nodes-with-restrictions/
- * Difficulty: Medium
- *
- * There is an undirected tree with n nodes labeled from 0 to n - 1 and n - 1 edges.
- *
- * You are given a 2D integer array edges of length n - 1 where edges[i] = [ai, bi] indicates
- * that there is an edge between nodes ai and bi in the tree. You are also given an integer
- * array restricted which represents restricted nodes.
- *
- * Return the maximum number of nodes you can reach from node 0 without visiting a restricted node.
- *
- * Note that node 0 will not be a restricted node.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @param {number[]} restricted
- * @return {number}
- */
-var reachableNodes = function(n, edges, restricted) {
- const graph = Array(n).fill().map(() => []);
- const restrictedSet = new Set(restricted);
- const visited = new Set();
-
- for (const [u, v] of edges) {
- graph[u].push(v);
- graph[v].push(u);
- }
-
- explore(0);
- return visited.size;
-
- function explore(node) {
- if (visited.has(node) || restrictedSet.has(node)) return;
- visited.add(node);
- for (const neighbor of graph[node]) {
- explore(neighbor);
- }
- }
-};
diff --git a/solutions/2369-check-if-there-is-a-valid-partition-for-the-array.js b/solutions/2369-check-if-there-is-a-valid-partition-for-the-array.js
deleted file mode 100644
index be0e9844..00000000
--- a/solutions/2369-check-if-there-is-a-valid-partition-for-the-array.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2369. Check if There is a Valid Partition For The Array
- * https://leetcode.com/problems/check-if-there-is-a-valid-partition-for-the-array/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums. You have to partition the array into one or
- * more contiguous subarrays.
- *
- * We call a partition of the array valid if each of the obtained subarrays satisfies one of
- * the following conditions:
- * 1. The subarray consists of exactly 2, equal elements. For example, the subarray [2,2] is good.
- * 2. The subarray consists of exactly 3, equal elements. For example, the subarray [4,4,4] is good.
- * 3. The subarray consists of exactly 3 consecutive increasing elements, that is, the difference
- * between adjacent elements is 1. For example, the subarray [3,4,5] is good, but the subarray
- * [1,3,5] is not.
- *
- * Return true if the array has at least one valid partition. Otherwise, return false.
- */
-
-/**
- * @param {number[]} nums
- * @return {boolean}
- */
-var validPartition = function(nums) {
- const n = nums.length;
- const dp = new Array(n + 1).fill(false);
- dp[0] = true;
-
- for (let i = 2; i <= n; i++) {
- if (nums[i - 1] === nums[i - 2]) {
- dp[i] = dp[i] || dp[i - 2];
- }
- if (i >= 3) {
- if (nums[i - 1] === nums[i - 2] && nums[i - 2] === nums[i - 3]) {
- dp[i] = dp[i] || dp[i - 3];
- }
- if (nums[i - 1] === nums[i - 2] + 1 && nums[i - 2] === nums[i - 3] + 1) {
- dp[i] = dp[i] || dp[i - 3];
- }
- }
- }
-
- return dp[n];
-};
diff --git a/solutions/2370-longest-ideal-subsequence.js b/solutions/2370-longest-ideal-subsequence.js
deleted file mode 100644
index c07e27f9..00000000
--- a/solutions/2370-longest-ideal-subsequence.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2370. Longest Ideal Subsequence
- * https://leetcode.com/problems/longest-ideal-subsequence/
- * Difficulty: Medium
- *
- * You are given a string s consisting of lowercase letters and an integer k. We call a string
- * t ideal if the following conditions are satisfied:
- * - t is a subsequence of the string s.
- * - The absolute difference in the alphabet order of every two adjacent letters in t is less
- * than or equal to k.
- *
- * Return the length of the longest ideal string.
- *
- * A subsequence is a string that can be derived from another string by deleting some or no
- * characters without changing the order of the remaining characters.
- *
- * Note that the alphabet order is not cyclic. For example, the absolute difference in the
- * alphabet order of 'a' and 'z' is 25, not 1.
- */
-
-/**
- * @param {string} s
- * @param {number} k
- * @return {number}
- */
-var longestIdealString = function(s, k) {
- const dp = new Array(26).fill(0);
- let result = 0;
-
- for (const char of s) {
- const idx = char.charCodeAt(0) - 97;
- let currentMax = 0;
-
- for (let i = Math.max(0, idx - k); i <= Math.min(25, idx + k); i++) {
- currentMax = Math.max(currentMax, dp[i]);
- }
-
- dp[idx] = currentMax + 1;
- result = Math.max(result, dp[idx]);
- }
-
- return result;
-};
diff --git a/solutions/2373-largest-local-values-in-a-matrix.js b/solutions/2373-largest-local-values-in-a-matrix.js
deleted file mode 100644
index 46a65c45..00000000
--- a/solutions/2373-largest-local-values-in-a-matrix.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2373. Largest Local Values in a Matrix
- * https://leetcode.com/problems/largest-local-values-in-a-matrix/
- * Difficulty: Easy
- *
- * You are given an n x n integer matrix grid.
- *
- * Generate an integer matrix maxLocal of size (n - 2) x (n - 2) such that:
- * - maxLocal[i][j] is equal to the largest value of the 3 x 3 matrix in grid centered around
- * row i + 1 and column j + 1.
- *
- * In other words, we want to find the largest value in every contiguous 3 x 3 matrix in grid.
- *
- * Return the generated matrix.
- */
-
-/**
- * @param {number[][]} grid
- * @return {number[][]}
- */
-var largestLocal = function(grid) {
- const n = grid.length;
- const result = new Array(n - 2).fill().map(() => new Array(n - 2).fill(0));
-
- for (let i = 0; i < n - 2; i++) {
- for (let j = 0; j < n - 2; j++) {
- let maxVal = 0;
- for (let r = i; r < i + 3; r++) {
- for (let c = j; c < j + 3; c++) {
- maxVal = Math.max(maxVal, grid[r][c]);
- }
- }
- result[i][j] = maxVal;
- }
- }
-
- return result;
-};
diff --git a/solutions/2374-node-with-highest-edge-score.js b/solutions/2374-node-with-highest-edge-score.js
deleted file mode 100644
index b8597422..00000000
--- a/solutions/2374-node-with-highest-edge-score.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2374. Node With Highest Edge Score
- * https://leetcode.com/problems/node-with-highest-edge-score/
- * Difficulty: Medium
- *
- * You are given a directed graph with n nodes labeled from 0 to n - 1, where each node has
- * exactly one outgoing edge.
- *
- * The graph is represented by a given 0-indexed integer array edges of length n, where edges[i]
- * indicates that there is a directed edge from node i to node edges[i].
- *
- * The edge score of a node i is defined as the sum of the labels of all the nodes that have an
- * edge pointing to i.
- *
- * Return the node with the highest edge score. If multiple nodes have the same edge score, return
- * the node with the smallest index.
- */
-
-/**
- * @param {number[]} edges
- * @return {number}
- */
-var edgeScore = function(edges) {
- const scores = new Array(edges.length).fill(0);
-
- for (let i = 0; i < edges.length; i++) {
- scores[edges[i]] += i;
- }
- let maxScore = 0;
- let result = 0;
- for (let i = 0; i < scores.length; i++) {
- if (scores[i] > maxScore) {
- maxScore = scores[i];
- result = i;
- }
- }
-
- return result;
-};
diff --git a/solutions/2379-minimum-recolors-to-get-k-consecutive-black-blocks.js b/solutions/2379-minimum-recolors-to-get-k-consecutive-black-blocks.js
deleted file mode 100644
index 76994936..00000000
--- a/solutions/2379-minimum-recolors-to-get-k-consecutive-black-blocks.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2379. Minimum Recolors to Get K Consecutive Black Blocks
- * https://leetcode.com/problems/minimum-recolors-to-get-k-consecutive-black-blocks/
- * Difficulty: Easy
- *
- * You are given a 0-indexed string blocks of length n, where blocks[i] is either 'W' or 'B',
- * representing the color of the ith block. The characters 'W' and 'B' denote the colors white
- * and black, respectively.
- *
- * You are also given an integer k, which is the desired number of consecutive black blocks.
- *
- * In one operation, you can recolor a white block such that it becomes a black block.
- *
- * Return the minimum number of operations needed such that there is at least one occurrence
- * of k consecutive black blocks.
- */
-
-/**
- * @param {string} blocks
- * @param {number} k
- * @return {number}
- */
-var minimumRecolors = function(blocks, k) {
- let count = 0;
-
- for (let i = 0; i < k; i++) {
- if (blocks[i] === 'W') count++;
- }
-
- let result = count;
-
- for (let i = k; i < blocks.length; i++) {
- if (blocks[i] === 'W') count++;
- if (blocks[i - k] === 'W') count--;
- result = Math.min(result, count);
- }
-
- return result;
-};
diff --git a/solutions/2380-time-needed-to-rearrange-a-binary-string.js b/solutions/2380-time-needed-to-rearrange-a-binary-string.js
deleted file mode 100644
index d85d2234..00000000
--- a/solutions/2380-time-needed-to-rearrange-a-binary-string.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2380. Time Needed to Rearrange a Binary String
- * https://leetcode.com/problems/time-needed-to-rearrange-a-binary-string/
- * Difficulty: Medium
- *
- * You are given a binary string s. In one second, all occurrences of "01" are simultaneously
- * replaced with "10". This process repeats until no occurrences of "01" exist.
- *
- * Return the number of seconds needed to complete this process.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var secondsToRemoveOccurrences = function(s) {
- const binary = s.split('');
- let result = 0;
-
- while (binary.join('').includes('01')) {
- for (let i = 0; i < binary.length - 1; i++) {
- if (binary[i] === '0' && binary[i + 1] === '1') {
- binary[i] = '1';
- binary[i + 1] = '0';
- i++;
- }
- }
- result++;
- }
-
- return result;
-};
diff --git a/solutions/2382-maximum-segment-sum-after-removals.js b/solutions/2382-maximum-segment-sum-after-removals.js
deleted file mode 100644
index 78065c5e..00000000
--- a/solutions/2382-maximum-segment-sum-after-removals.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 2382. Maximum Segment Sum After Removals
- * https://leetcode.com/problems/maximum-segment-sum-after-removals/
- * Difficulty: Hard
- *
- * You are given two 0-indexed integer arrays nums and removeQueries, both of length n. For
- * the ith query, the element in nums at the index removeQueries[i] is removed, splitting
- * nums into different segments.
- *
- * A segment is a contiguous sequence of positive integers in nums. A segment sum is the sum
- * of every element in a segment.
- *
- * Return an integer array answer, of length n, where answer[i] is the maximum segment sum after
- * applying the ith removal.
- *
- * Note: The same index will not be removed more than once.
- */
-
-/**
- * @param {number[]} nums
- * @param {number[]} removeQueries
- * @return {number[]}
- */
-var maximumSegmentSum = function(nums, removeQueries) {
- const n = nums.length;
- const result = new Array(n);
- const prefixSum = new Array(n + 1).fill(0);
- const parents = new Array(n).fill(-1);
- const sizes = new Array(n).fill(0);
- const sums = new Array(n).fill(0);
- let maxSum = 0;
-
- for (let i = 0; i < n; i++) {
- prefixSum[i + 1] = prefixSum[i] + nums[i];
- }
-
- for (let i = n - 1; i >= 0; i--) {
- result[i] = maxSum;
- const index = removeQueries[i];
-
- parents[index] = index;
- sizes[index] = 1;
- sums[index] = nums[index];
-
- if (index > 0 && parents[index - 1] !== -1) {
- const leftRoot = findRoot(parents, index - 1);
- const segmentSum = sums[leftRoot] + sums[index];
-
- parents[index] = leftRoot;
- sizes[leftRoot] += sizes[index];
- sums[leftRoot] = segmentSum;
- }
-
- if (index < n - 1 && parents[index + 1] !== -1) {
- const root = findRoot(parents, index);
- const rightRoot = findRoot(parents, index + 1);
-
- if (root !== rightRoot) {
- const segmentSum = sums[root] + sums[rightRoot];
-
- if (sizes[root] < sizes[rightRoot]) {
- parents[root] = rightRoot;
- sizes[rightRoot] += sizes[root];
- sums[rightRoot] = segmentSum;
- } else {
- parents[rightRoot] = root;
- sizes[root] += sizes[rightRoot];
- sums[root] = segmentSum;
- }
- }
- }
-
- maxSum = Math.max(maxSum, sums[findRoot(parents, index)]);
- }
-
- return result;
-};
-
-function findRoot(parents, x) {
- if (parents[x] !== x) {
- parents[x] = findRoot(parents, parents[x]);
- }
- return parents[x];
-}
diff --git a/solutions/2383-minimum-hours-of-training-to-win-a-competition.js b/solutions/2383-minimum-hours-of-training-to-win-a-competition.js
deleted file mode 100644
index 0699fdcc..00000000
--- a/solutions/2383-minimum-hours-of-training-to-win-a-competition.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 2383. Minimum Hours of Training to Win a Competition
- * https://leetcode.com/problems/minimum-hours-of-training-to-win-a-competition/
- * Difficulty: Easy
- *
- * You are entering a competition, and are given two positive integers initialEnergy and
- * initialExperience denoting your initial energy and initial experience respectively.
- *
- * You are also given two 0-indexed integer arrays energy and experience, both of length n.
- *
- * You will face n opponents in order. The energy and experience of the ith opponent is
- * denoted by energy[i] and experience[i] respectively. When you face an opponent, you need
- * to have both strictly greater experience and energy to defeat them and move to the next
- * opponent if available.
- *
- * Defeating the ith opponent increases your experience by experience[i], but decreases your
- * energy by energy[i].
- *
- * Before starting the competition, you can train for some number of hours. After each hour
- * of training, you can either choose to increase your initial experience by one, or increase
- * your initial energy by one.
- *
- * Return the minimum number of training hours required to defeat all n opponents.
- */
-
-/**
- * @param {number} initialEnergy
- * @param {number} initialExperience
- * @param {number[]} energy
- * @param {number[]} experience
- * @return {number}
- */
-var minNumberOfHours = function(initialEnergy, initialExperience, energy, experience) {
- let energyNeeded = 0;
- let experienceNeeded = 0;
- let currentEnergy = initialEnergy;
- let currentExperience = initialExperience;
-
- for (let i = 0; i < energy.length; i++) {
- if (currentEnergy <= energy[i]) {
- const deficit = energy[i] - currentEnergy + 1;
- energyNeeded += deficit;
- currentEnergy += deficit;
- }
- if (currentExperience <= experience[i]) {
- const deficit = experience[i] - currentExperience + 1;
- experienceNeeded += deficit;
- currentExperience += deficit;
- }
- currentEnergy -= energy[i];
- currentExperience += experience[i];
- }
-
- return energyNeeded + experienceNeeded;
-};
diff --git a/solutions/2385-amount-of-time-for-binary-tree-to-be-infected.js b/solutions/2385-amount-of-time-for-binary-tree-to-be-infected.js
deleted file mode 100644
index 00bd2ddd..00000000
--- a/solutions/2385-amount-of-time-for-binary-tree-to-be-infected.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 2385. Amount of Time for Binary Tree to Be Infected
- * https://leetcode.com/problems/amount-of-time-for-binary-tree-to-be-infected/
- * Difficulty: Medium
- *
- * You are given the root of a binary tree with unique values, and an integer start.
- * At minute 0, an infection starts from the node with value start.
- *
- * Each minute, a node becomes infected if:
- * - The node is currently uninfected.
- * - The node is adjacent to an infected node.
- *
- * Return the number of minutes needed for the entire tree to be infected.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode} root
- * @param {number} start
- * @return {number}
- */
-var amountOfTime = function(root, start) {
- const graph = new Map();
- const queue = [start];
- const visited = new Set([start]);
- let result = -1;
-
- buildGraph(root, null);
-
- while (queue.length) {
- result++;
- const levelSize = queue.length;
- for (let i = 0; i < levelSize; i++) {
- const current = queue.shift();
- for (const neighbor of graph.get(current) || []) {
- if (!visited.has(neighbor)) {
- visited.add(neighbor);
- queue.push(neighbor);
- }
- }
- }
- }
-
- return result;
-
- function buildGraph(node, parent) {
- if (!node) return;
- if (!graph.has(node.val)) graph.set(node.val, []);
- if (parent) graph.get(node.val).push(parent.val);
- if (node.left) {
- graph.get(node.val).push(node.left.val);
- graph.set(node.left.val, graph.get(node.left.val) || []);
- graph.get(node.left.val).push(node.val);
- }
- if (node.right) {
- graph.get(node.val).push(node.right.val);
- graph.set(node.right.val, graph.get(node.right.val) || []);
- graph.get(node.right.val).push(node.val);
- }
- buildGraph(node.left, node);
- buildGraph(node.right, node);
- }
-};
diff --git a/solutions/2389-longest-subsequence-with-limited-sum.js b/solutions/2389-longest-subsequence-with-limited-sum.js
deleted file mode 100644
index a498b7c8..00000000
--- a/solutions/2389-longest-subsequence-with-limited-sum.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 2389. Longest Subsequence With Limited Sum
- * https://leetcode.com/problems/longest-subsequence-with-limited-sum/
- * Difficulty: Easy
- *
- * You are given an integer array nums of length n, and an integer array queries of length m.
- *
- * Return an array answer of length m where answer[i] is the maximum size of a subsequence that
- * you can take from nums such that the sum of its elements is less than or equal to queries[i].
- *
- * A subsequence is an array that can be derived from another array by deleting some or no elements
- * without changing the order of the remaining elements.
- */
-
-/**
- * @param {number[]} nums
- * @param {number[]} queries
- * @return {number[]}
- */
-var answerQueries = function(nums, queries) {
- nums.sort((a, b) => a - b);
- const prefixSums = [0];
- for (const num of nums) {
- prefixSums.push(prefixSums.at(-1) + num);
- }
-
- const result = new Array(queries.length);
- for (let i = 0; i < queries.length; i++) {
- let left = 0;
- let right = nums.length;
- while (left < right) {
- const mid = Math.floor((left + right + 1) / 2);
- if (prefixSums[mid] <= queries[i]) {
- left = mid;
- } else {
- right = mid - 1;
- }
- }
- result[i] = left;
- }
-
- return result;
-};
diff --git a/solutions/2391-minimum-amount-of-time-to-collect-garbage.js b/solutions/2391-minimum-amount-of-time-to-collect-garbage.js
deleted file mode 100644
index bbddfc01..00000000
--- a/solutions/2391-minimum-amount-of-time-to-collect-garbage.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 2391. Minimum Amount of Time to Collect Garbage
- * https://leetcode.com/problems/minimum-amount-of-time-to-collect-garbage/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array of strings garbage where garbage[i] represents the assortment
- * of garbage at the ith house. garbage[i] consists only of the characters 'M', 'P' and 'G'
- * representing one unit of metal, paper and glass garbage respectively. Picking up one unit of
- * any type of garbage takes 1 minute.
- *
- * You are also given a 0-indexed integer array travel where travel[i] is the number of minutes
- * needed to go from house i to house i + 1.
- *
- * There are three garbage trucks in the city, each responsible for picking up one type of garbage.
- * Each garbage truck starts at house 0 and must visit each house in order; however, they do not
- * need to visit every house.
- *
- * Only one garbage truck may be used at any given moment. While one truck is driving or picking up
- * garbage, the other two trucks cannot do anything.
- *
- * Return the minimum number of minutes needed to pick up all the garbage.
- */
-
-/**
- * @param {string[]} garbage
- * @param {number[]} travel
- * @return {number}
- */
-var garbageCollection = function(garbage, travel) {
- let result = 0;
- const lastHouse = {'M': 0, 'P': 0, 'G': 0};
-
- for (let i = 0; i < garbage.length; i++) {
- result += garbage[i].length;
- for (const type of garbage[i]) {
- lastHouse[type] = i;
- }
- }
-
- const prefixTravel = [0];
- for (const time of travel) {
- prefixTravel.push(prefixTravel.at(-1) + time);
- }
-
- Object.keys(lastHouse).forEach(type => {
- result += prefixTravel[lastHouse[type]];
- });
-
- return result;
-};
diff --git a/solutions/2392-build-a-matrix-with-conditions.js b/solutions/2392-build-a-matrix-with-conditions.js
deleted file mode 100644
index b55cdd0f..00000000
--- a/solutions/2392-build-a-matrix-with-conditions.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 2392. Build a Matrix With Conditions
- * https://leetcode.com/problems/build-a-matrix-with-conditions/
- * Difficulty: Hard
- *
- * You are given a positive integer k. You are also given:
- * - a 2D integer array rowConditions of size n where rowConditions[i] = [abovei, belowi], and
- * - a 2D integer array colConditions of size m where colConditions[i] = [lefti, righti].
- *
- * The two arrays contain integers from 1 to k.
- *
- * You have to build a k x k matrix that contains each of the numbers from 1 to k exactly once.
- * The remaining cells should have the value 0.
- *
- * The matrix should also satisfy the following conditions:
- * - The number abovei should appear in a row that is strictly above the row at which the number
- * belowi appears for all i from 0 to n - 1.
- * - The number lefti should appear in a column that is strictly left of the column at which the
- * number righti appears for all i from 0 to m - 1.
- *
- * Return any matrix that satisfies the conditions. If no answer exists, return an empty matrix.
- */
-
-/**
- * @param {number} k
- * @param {number[][]} rowConditions
- * @param {number[][]} colConditions
- * @return {number[][]}
- */
-var buildMatrix = function(k, rowConditions, colConditions) {
- const rowOrder = helper(rowConditions, k);
- if (!rowOrder.length) return [];
-
- const colOrder = helper(colConditions, k);
- if (!colOrder.length) return [];
-
- const matrix = Array.from({ length: k }, () => new Array(k).fill(0));
- const rowIndex = new Array(k + 1).fill(0);
- const colIndex = new Array(k + 1).fill(0);
-
- for (let i = 0; i < k; i++) {
- rowIndex[rowOrder[i]] = i;
- colIndex[colOrder[i]] = i;
- }
-
- for (let num = 1; num <= k; num++) {
- matrix[rowIndex[num]][colIndex[num]] = num;
- }
-
- return matrix;
-
- function helper(edges, size) {
- const graph = Array.from({ length: size + 1 }, () => []);
- const inDegree = new Array(size + 1).fill(0);
- for (const [u, v] of edges) {
- graph[u].push(v);
- inDegree[v]++;
- }
-
- const queue = [];
- for (let i = 1; i <= size; i++) {
- if (inDegree[i] === 0) queue.push(i);
- }
-
- const order = [];
- while (queue.length) {
- const node = queue.shift();
- order.push(node);
- for (const next of graph[node]) {
- if (--inDegree[next] === 0) queue.push(next);
- }
- }
-
- return order.length === size ? order : [];
- }
-};
diff --git a/solutions/2395-find-subarrays-with-equal-sum.js b/solutions/2395-find-subarrays-with-equal-sum.js
deleted file mode 100644
index 9b4ec520..00000000
--- a/solutions/2395-find-subarrays-with-equal-sum.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 2395. Find Subarrays With Equal Sum
- * https://leetcode.com/problems/find-subarrays-with-equal-sum/
- * Difficulty: Easy
- *
- * Given a 0-indexed integer array nums, determine whether there exist two subarrays of length
- * 2 with equal sum. Note that the two subarrays must begin at different indices.
- *
- * Return true if these subarrays exist, and false otherwise.
- *
- * A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @return {boolean}
- */
-var findSubarrays = function(nums) {
- const set = new Set();
-
- for (let i = 0; i < nums.length - 1; i++) {
- const sum = nums[i] + nums[i + 1];
- if (set.has(sum)) return true;
- set.add(sum);
- }
-
- return false;
-};
diff --git a/solutions/2397-maximum-rows-covered-by-columns.js b/solutions/2397-maximum-rows-covered-by-columns.js
deleted file mode 100644
index 0fa68a2b..00000000
--- a/solutions/2397-maximum-rows-covered-by-columns.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 2397. Maximum Rows Covered by Columns
- * https://leetcode.com/problems/maximum-rows-covered-by-columns/
- * Difficulty: Medium
- *
- * You are given an m x n binary matrix matrix and an integer numSelect.
- *
- * Your goal is to select exactly numSelect distinct columns from matrix such that you cover
- * as many rows as possible.
- *
- * A row is considered covered if all the 1's in that row are also part of a column that you
- * have selected. If a row does not have any 1s, it is also considered covered.
- *
- * More formally, let us consider selected = {c1, c2, ...., cnumSelect} as the set of columns
- * selected by you. A row i is covered by selected if:
- * - For each cell where matrix[i][j] == 1, the column j is in selected.
- * - Or, no cell in row i has a value of 1.
- *
- * Return the maximum number of rows that can be covered by a set of numSelect columns.
- */
-
-/**
- * @param {number[][]} matrix
- * @param {number} numSelect
- * @return {number}
- */
-var maximumRows = function(matrix, numSelect) {
- const rows = matrix.length;
- const cols = matrix[0].length;
- let result = 0;
-
- backtrack(0, 0, 0);
-
- return result;
-
- function countCovered(selected) {
- let covered = 0;
- for (let i = 0; i < rows; i++) {
- let isCovered = true;
- for (let j = 0; j < cols; j++) {
- if (matrix[i][j] === 1 && !(selected & (1 << j))) {
- isCovered = false;
- break;
- }
- }
- if (isCovered) covered++;
- }
- return covered;
- }
-
- function backtrack(index, selected, count) {
- if (count === numSelect) {
- result = Math.max(result, countCovered(selected));
- return;
- }
- if (index >= cols || cols - index + count < numSelect) return;
-
- backtrack(index + 1, selected | (1 << index), count + 1);
- backtrack(index + 1, selected, count);
- }
-};
diff --git a/solutions/2399-check-distances-between-same-letters.js b/solutions/2399-check-distances-between-same-letters.js
deleted file mode 100644
index 7f977d1e..00000000
--- a/solutions/2399-check-distances-between-same-letters.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2399. Check Distances Between Same Letters
- * https://leetcode.com/problems/check-distances-between-same-letters/
- * Difficulty: Easy
- *
- * You are given a 0-indexed string s consisting of only lowercase English letters, where each
- * letter in s appears exactly twice. You are also given a 0-indexed integer array distance of
- * length 26.
- *
- * Each letter in the alphabet is numbered from 0 to 25 (i.e. 'a' -> 0, 'b' -> 1,
- * 'c' -> 2, ... , 'z' -> 25).
- *
- * In a well-spaced string, the number of letters between the two occurrences of the ith letter
- * is distance[i]. If the ith letter does not appear in s, then distance[i] can be ignored.
- *
- * Return true if s is a well-spaced string, otherwise return false.
- */
-
-/**
- * @param {string} s
- * @param {number[]} distance
- * @return {boolean}
- */
-var checkDistances = function(s, distance) {
- const map = new Map();
-
- for (let i = 0; i < s.length; i++) {
- const char = s[i];
- if (map.has(char)) {
- map.get(char).push(i);
- } else {
- map.set(char, [i]);
- }
- }
-
- for (const [char, positions] of map) {
- const letterIndex = char.charCodeAt(0) - 'a'.charCodeAt(0);
- if (positions[1] - positions[0] - 1 !== distance[letterIndex]) {
- return false;
- }
- }
-
- return true;
-};
diff --git a/solutions/2401-longest-nice-subarray.js b/solutions/2401-longest-nice-subarray.js
deleted file mode 100644
index 6f423321..00000000
--- a/solutions/2401-longest-nice-subarray.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2401. Longest Nice Subarray
- * https://leetcode.com/problems/longest-nice-subarray/
- * Difficulty: Medium
- *
- * You are given an array nums consisting of positive integers.
- *
- * We call a subarray of nums nice if the bitwise AND of every pair of elements that are in
- * different positions in the subarray is equal to 0.
- *
- * Return the length of the longest nice subarray.
- *
- * A subarray is a contiguous part of an array.
- *
- * Note that subarrays of length 1 are always considered nice.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var longestNiceSubarray = function(nums) {
- let result = 1;
- let left = 0;
- let usedBits = 0;
-
- for (let right = 0; right < nums.length; right++) {
- while ((usedBits & nums[right]) !== 0) {
- usedBits ^= nums[left];
- left++;
- }
- usedBits |= nums[right];
- result = Math.max(result, right - left + 1);
- }
-
- return result;
-};
diff --git a/solutions/2404-most-frequent-even-element.js b/solutions/2404-most-frequent-even-element.js
deleted file mode 100644
index e5fcd0c6..00000000
--- a/solutions/2404-most-frequent-even-element.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2404. Most Frequent Even Element
- * https://leetcode.com/problems/most-frequent-even-element/
- * Difficulty: Easy
- *
- * Given an integer array nums, return the most frequent even element.
- *
- * If there is a tie, return the smallest one. If there is no such element, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var mostFrequentEven = function(nums) {
- const map = new Map();
- let maxCount = 0;
- let result = -1;
-
- for (const num of nums) {
- if (num % 2 === 0) {
- const count = (map.get(num) || 0) + 1;
- map.set(num, count);
- if (count > maxCount || (count === maxCount && num < result)) {
- maxCount = count;
- result = num;
- }
- }
- }
-
- return result;
-};
-
diff --git a/solutions/2405-optimal-partition-of-string.js b/solutions/2405-optimal-partition-of-string.js
deleted file mode 100644
index eb2849bc..00000000
--- a/solutions/2405-optimal-partition-of-string.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 2405. Optimal Partition of String
- * https://leetcode.com/problems/optimal-partition-of-string/
- * Difficulty: Medium
- *
- * Given a string s, partition the string into one or more substrings such that the characters
- * in each substring are unique. That is, no letter appears in a single substring more than once.
- *
- * Return the minimum number of substrings in such a partition.
- *
- * Note that each character should belong to exactly one substring in a partition.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var partitionString = function(s) {
- const set = new Set();
- let result = 1;
-
- for (const char of s) {
- if (set.has(char)) {
- set.clear();
- result++;
- }
- set.add(char);
- }
-
- return result;
-};
diff --git a/solutions/2409-count-days-spent-together.js b/solutions/2409-count-days-spent-together.js
deleted file mode 100644
index 1047ab0b..00000000
--- a/solutions/2409-count-days-spent-together.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 2409. Count Days Spent Together
- * https://leetcode.com/problems/count-days-spent-together/
- * Difficulty: Easy
- *
- * Alice and Bob are traveling to Rome for separate business meetings.
- *
- * You are given 4 strings arriveAlice, leaveAlice, arriveBob, and leaveBob. Alice will be in
- * the city from the dates arriveAlice to leaveAlice (inclusive), while Bob will be in the city
- * from the dates arriveBob to leaveBob (inclusive). Each will be a 5-character string in the
- * format "MM-DD", corresponding to the month and day of the date.
- *
- * Return the total number of days that Alice and Bob are in Rome together.
- *
- * You can assume that all dates occur in the same calendar year, which is not a leap year. Note
- * that the number of days per month can be represented as: [31, 28, 31, 30, 31, 30, 31, 31, 30,
- * 31, 30, 31].
- */
-
-/**
- * @param {string} arriveAlice
- * @param {string} leaveAlice
- * @param {string} arriveBob
- * @param {string} leaveBob
- * @return {number}
- */
-var countDaysTogether = function(arriveAlice, leaveAlice, arriveBob, leaveBob) {
- const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-
- function toDays(date) {
- const [month, day] = date.split('-').map(Number);
- let totalDays = 0;
- for (let i = 0; i < month - 1; i++) {
- totalDays += daysInMonth[i];
- }
- return totalDays + day;
- }
-
- const aliceStart = toDays(arriveAlice);
- const aliceEnd = toDays(leaveAlice);
- const bobStart = toDays(arriveBob);
- const bobEnd = toDays(leaveBob);
-
- const overlapStart = Math.max(aliceStart, bobStart);
- const overlapEnd = Math.min(aliceEnd, bobEnd);
-
- return Math.max(0, overlapEnd - overlapStart + 1);
-};
diff --git a/solutions/2410-maximum-matching-of-players-with-trainers.js b/solutions/2410-maximum-matching-of-players-with-trainers.js
deleted file mode 100644
index 885db445..00000000
--- a/solutions/2410-maximum-matching-of-players-with-trainers.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 2410. Maximum Matching of Players With Trainers
- * https://leetcode.com/problems/maximum-matching-of-players-with-trainers/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array players, where players[i] represents the ability of
- * the ith player. You are also given a 0-indexed integer array trainers, where trainers[j]
- * represents the training capacity of the jth trainer.
- *
- * The ith player can match with the jth trainer if the player's ability is less than or equal
- * to the trainer's training capacity. Additionally, the ith player can be matched with at most
- * one trainer, and the jth trainer can be matched with at most one player.
- *
- * Return the maximum number of matchings between players and trainers that satisfy these
- * conditions.
- */
-
-/**
- * @param {number[]} players
- * @param {number[]} trainers
- * @return {number}
- */
-var matchPlayersAndTrainers = function(players, trainers) {
- players.sort((a, b) => a - b);
- trainers.sort((a, b) => a - b);
-
- let result = 0;
- for (let j = 0; result < players.length && j < trainers.length; j++) {
- if (trainers[j] >= players[result]) {
- result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2411-smallest-subarrays-with-maximum-bitwise-or.js b/solutions/2411-smallest-subarrays-with-maximum-bitwise-or.js
deleted file mode 100644
index 784cf5d2..00000000
--- a/solutions/2411-smallest-subarrays-with-maximum-bitwise-or.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2411. Smallest Subarrays With Maximum Bitwise OR
- * https://leetcode.com/problems/smallest-subarrays-with-maximum-bitwise-or/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array nums of length n, consisting of non-negative integers. For
- * each index i from 0 to n - 1, you must determine the size of the minimum sized non-empty
- * subarray of nums starting at i (inclusive) that has the maximum possible bitwise OR.
- * - In other words, let Bij be the bitwise OR of the subarray nums[i...j]. You need to find
- * the smallest subarray starting at i, such that bitwise OR of this subarray is equal to
- * max(Bik) where i <= k <= n - 1.
- *
- * The bitwise OR of an array is the bitwise OR of all the numbers in it.
- *
- * Return an integer array answer of size n where answer[i] is the length of the minimum sized
- * subarray starting at i with maximum bitwise OR.
- *
- * A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var smallestSubarrays = function(nums) {
- const n = nums.length;
- const result = new Array(n).fill(1);
- const bitPositions = new Array(32).fill(0);
-
- for (let i = n - 1; i >= 0; i--) {
- for (let bit = 0; bit < 32; bit++) {
- if (nums[i] & (1 << bit)) {
- bitPositions[bit] = i;
- }
- }
-
- let maxIndex = i;
- for (let bit = 0; bit < 32; bit++) {
- maxIndex = Math.max(maxIndex, bitPositions[bit]);
- }
-
- result[i] = maxIndex - i + 1;
- }
-
- return result;
-};
diff --git a/solutions/2412-minimum-money-required-before-transactions.js b/solutions/2412-minimum-money-required-before-transactions.js
deleted file mode 100644
index 240ca6ca..00000000
--- a/solutions/2412-minimum-money-required-before-transactions.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 2412. Minimum Money Required Before Transactions
- * https://leetcode.com/problems/minimum-money-required-before-transactions/
- * Difficulty: Hard
- *
- * You are given a 0-indexed 2D integer array transactions, where
- * transactions[i] = [costi, cashbacki].
- *
- * The array describes transactions, where each transaction must be completed exactly once
- * in some order. At any given moment, you have a certain amount of money. In order to
- * complete transaction i, money >= costi must hold true. After performing a transaction,
- * money becomes money - costi + cashbacki.
- *
- * Return the minimum amount of money required before any transaction so that all of the
- * transactions can be completed regardless of the order of the transactions.
- */
-
-/**
- * @param {number[][]} transactions
- * @return {number}
- */
-var minimumMoney = function(transactions) {
- let totalLoss = 0;
- let maxCost = 0;
-
- for (const [cost, cashback] of transactions) {
- if (cost > cashback) {
- totalLoss += cost - cashback;
- maxCost = Math.max(maxCost, cashback);
- } else {
- maxCost = Math.max(maxCost, cost);
- }
- }
-
- return totalLoss + maxCost;
-};
diff --git a/solutions/2414-length-of-the-longest-alphabetical-continuous-substring.js b/solutions/2414-length-of-the-longest-alphabetical-continuous-substring.js
deleted file mode 100644
index afb44c82..00000000
--- a/solutions/2414-length-of-the-longest-alphabetical-continuous-substring.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2414. Length of the Longest Alphabetical Continuous Substring
- * https://leetcode.com/problems/length-of-the-longest-alphabetical-continuous-substring/
- * Difficulty: Medium
- *
- * An alphabetical continuous string is a string consisting of consecutive letters in the alphabet.
- * In other words, it is any substring of the string "abcdefghijklmnopqrstuvwxyz".
- * - For example, "abc" is an alphabetical continuous string, while "acb" and "za" are not.
- *
- * Given a string s consisting of lowercase letters only, return the length of the longest
- * alphabetical continuous substring.
- */
-
-/**
- * @param {string} s
- * @return {number}
- */
-var longestContinuousSubstring = function(s) {
- let result = 1;
- let currentLength = 1;
-
- for (let i = 1; i < s.length; i++) {
- if (s.charCodeAt(i) - s.charCodeAt(i - 1) === 1) {
- currentLength++;
- result = Math.max(result, currentLength);
- } else {
- currentLength = 1;
- }
- }
-
- return result;
-};
diff --git a/solutions/2415-reverse-odd-levels-of-binary-tree.js b/solutions/2415-reverse-odd-levels-of-binary-tree.js
deleted file mode 100644
index 9c70383b..00000000
--- a/solutions/2415-reverse-odd-levels-of-binary-tree.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 2415. Reverse Odd Levels of Binary Tree
- * https://leetcode.com/problems/reverse-odd-levels-of-binary-tree/
- * Difficulty: Medium
- *
- * Given the root of a perfect binary tree, reverse the node values at each odd level of the tree.
- * - For example, suppose the node values at level 3 are [2,1,3,4,7,11,29,18], then it should
- * become [18,29,11,7,4,3,1,2].
- *
- * Return the root of the reversed tree.
- *
- * A binary tree is perfect if all parent nodes have two children and all leaves are on the same
- * level.
- *
- * The level of a node is the number of edges along the path between it and the root node.
- */
-
-/**
- * Definition for a binary tree node.
- * function TreeNode(val, left, right) {
- * this.val = (val===undefined ? 0 : val)
- * this.left = (left===undefined ? null : left)
- * this.right = (right===undefined ? null : right)
- * }
- */
-/**
- * @param {TreeNode} root
- * @return {TreeNode}
- */
-var reverseOddLevels = function(root) {
- reverseLevel([root], 0);
- return root;
-
- function reverseLevel(nodes, level) {
- if (!nodes.length) return;
-
- if (level % 2 === 1) {
- for (let i = 0, j = nodes.length - 1; i < j; i++, j--) {
- [nodes[i].val, nodes[j].val] = [nodes[j].val, nodes[i].val];
- }
- }
-
- const nextLevel = [];
- for (const node of nodes) {
- if (node.left) nextLevel.push(node.left);
- if (node.right) nextLevel.push(node.right);
- }
-
- reverseLevel(nextLevel, level + 1);
- }
-};
diff --git a/solutions/2416-sum-of-prefix-scores-of-strings.js b/solutions/2416-sum-of-prefix-scores-of-strings.js
deleted file mode 100644
index 45d3a184..00000000
--- a/solutions/2416-sum-of-prefix-scores-of-strings.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 2416. Sum of Prefix Scores of Strings
- * https://leetcode.com/problems/sum-of-prefix-scores-of-strings/
- * Difficulty: Hard
- *
- * You are given an array words of size n consisting of non-empty strings.
- *
- * We define the score of a string term as the number of strings words[i] such that term is
- * a prefix of words[i].
- * - For example, if words = ["a", "ab", "abc", "cab"], then the score of "ab" is 2, since
- * "ab" is a prefix of both "ab" and "abc".
- *
- * Return an array answer of size n where answer[i] is the sum of scores of every non-empty
- * prefix of words[i].
- *
- * Note that a string is considered as a prefix of itself.
- */
-
-/**
- * @param {string[]} words
- * @return {number[]}
- */
-var sumPrefixScores = function(words) {
- class TrieNode {
- constructor() {
- this.children = new Map();
- this.count = 0;
- }
- }
-
- const root = new TrieNode();
-
- for (const word of words) {
- let node = root;
- for (const char of word) {
- if (!node.children.has(char)) {
- node.children.set(char, new TrieNode());
- }
- node = node.children.get(char);
- node.count++;
- }
- }
-
- const result = [];
- for (const word of words) {
- let node = root;
- let score = 0;
- for (const char of word) {
- node = node.children.get(char);
- score += node.count;
- }
- result.push(score);
- }
-
- return result;
-};
diff --git a/solutions/2418-sort-the-people.js b/solutions/2418-sort-the-people.js
deleted file mode 100644
index c0477a6a..00000000
--- a/solutions/2418-sort-the-people.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 2418. Sort the People
- * https://leetcode.com/problems/sort-the-people/
- * Difficulty: Easy
- *
- * You are given an array of strings names, and an array heights that consists of distinct
- * positive integers. Both arrays are of length n.
- *
- * For each index i, names[i] and heights[i] denote the name and height of the ith person.
- *
- * Return names sorted in descending order by the people's heights.
- */
-
-/**
- * @param {string[]} names
- * @param {number[]} heights
- * @return {string[]}
- */
-var sortPeople = function(names, heights) {
- const people = names.map((name, index) => ({name, height: heights[index]}));
- people.sort((a, b) => b.height - a.height);
- return people.map(person => person.name);
-};
diff --git a/solutions/2419-longest-subarray-with-maximum-bitwise-and.js b/solutions/2419-longest-subarray-with-maximum-bitwise-and.js
deleted file mode 100644
index c6a26711..00000000
--- a/solutions/2419-longest-subarray-with-maximum-bitwise-and.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 2419. Longest Subarray With Maximum Bitwise AND
- * https://leetcode.com/problems/longest-subarray-with-maximum-bitwise-and/
- * Difficulty: Medium
- *
- * You are given an integer array nums of size n.
- *
- * Consider a non-empty subarray from nums that has the maximum possible bitwise AND.
- * - In other words, let k be the maximum value of the bitwise AND of any subarray of nums.
- * Then, only subarrays with a bitwise AND equal to k should be considered.
- *
- * Return the length of the longest such subarray.
- *
- * The bitwise AND of an array is the bitwise AND of all the numbers in it.
- *
- * A subarray is a contiguous sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var longestSubarray = function(nums) {
- const maxValue = Math.max(...nums);
- let result = 0;
- let currentLength = 0;
-
- for (const num of nums) {
- if (num === maxValue) {
- currentLength++;
- result = Math.max(result, currentLength);
- } else {
- currentLength = 0;
- }
- }
-
- return result;
-};
diff --git a/solutions/2421-number-of-good-paths.js b/solutions/2421-number-of-good-paths.js
deleted file mode 100644
index c0f7d606..00000000
--- a/solutions/2421-number-of-good-paths.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 2421. Number of Good Paths
- * https://leetcode.com/problems/number-of-good-paths/
- * Difficulty: Hard
- *
- * There is a tree (i.e. a connected, undirected graph with no cycles) consisting of n nodes
- * numbered from 0 to n - 1 and exactly n - 1 edges.
- *
- * You are given a 0-indexed integer array vals of length n where vals[i] denotes the value
- * of the ith node. You are also given a 2D integer array edges where edges[i] = [ai, bi]
- * denotes that there exists an undirected edge connecting nodes ai and bi.
- *
- * A good path is a simple path that satisfies the following conditions:
- * 1. The starting node and the ending node have the same value.
- * 2. All nodes between the starting node and the ending node have values less than or equal
- * to the starting node (i.e. the starting node's value should be the maximum value along
- * the path).
- *
- * Return the number of distinct good paths.
- *
- * Note that a path and its reverse are counted as the same path. For example, 0 -> 1 is
- * considered to be the same as 1 -> 0. A single node is also considered as a valid path.
- */
-
-/**
- * @param {number[]} vals
- * @param {number[][]} edges
- * @return {number}
- */
-var numberOfGoodPaths = function(vals, edges) {
- const n = vals.length;
- const graph = Array.from({length: n}, () => []);
- for (const [u, v] of edges) {
- graph[u].push(v);
- graph[v].push(u);
- }
-
- const parent = new Array(n).fill(-1);
- const rank = new Array(n).fill(0);
- function find(x) {
- if (parent[x] === -1) return x;
- return parent[x] = find(parent[x]);
- }
-
- function union(x, y) {
- let px = find(x);
- let py = find(y);
- if (px === py) return;
- if (rank[px] < rank[py]) [px, py] = [py, px];
- parent[py] = px;
- if (rank[px] === rank[py]) rank[px]++;
- }
-
- const valueGroups = new Map();
- for (let i = 0; i < n; i++) {
- if (!valueGroups.has(vals[i])) {
- valueGroups.set(vals[i], []);
- }
- valueGroups.get(vals[i]).push(i);
- }
-
- let result = 0;
- for (const value of [...valueGroups.keys()].sort((a, b) => a - b)) {
- const nodes = valueGroups.get(value);
-
- for (const node of nodes) {
- for (const neighbor of graph[node]) {
- if (vals[neighbor] <= value) {
- union(node, neighbor);
- }
- }
- }
-
- const groupCount = new Map();
- for (const node of nodes) {
- const root = find(node);
- groupCount.set(root, (groupCount.get(root) || 0) + 1);
- }
-
- for (const count of groupCount.values()) {
- result += (count * (count + 1)) / 2;
- }
- }
-
- return result;
-};
diff --git a/solutions/2426-number-of-pairs-satisfying-inequality.js b/solutions/2426-number-of-pairs-satisfying-inequality.js
deleted file mode 100644
index e24957fd..00000000
--- a/solutions/2426-number-of-pairs-satisfying-inequality.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 2426. Number of Pairs Satisfying Inequality
- * https://leetcode.com/problems/number-of-pairs-satisfying-inequality/
- * Difficulty: Hard
- *
- * You are given two 0-indexed integer arrays nums1 and nums2, each of size n, and an
- * integer diff. Find the number of pairs (i, j) such that:
- * - 0 <= i < j <= n - 1 and
- * - nums1[i] - nums1[j] <= nums2[i] - nums2[j] + diff.
- *
- * Return the number of pairs that satisfy the conditions.
- */
-
-/**
- * @param {number[]} nums1
- * @param {number[]} nums2
- * @param {number} diff
- * @return {number}
- */
-var numberOfPairs = function(nums1, nums2, diff) {
- const n = nums1.length;
- const differences = new Array(n);
- for (let i = 0; i < n; i++) {
- differences[i] = nums1[i] - nums2[i];
- }
- let result = 0;
- mergeSort(0, n);
- return result;
-
- function mergeSort(left, right) {
- if (right - left <= 1) return;
-
- const mid = Math.floor((left + right) / 2);
- mergeSort(left, mid);
- mergeSort(mid, right);
-
- let i = left;
- let j = mid;
- while (i < mid && j < right) {
- if (differences[i] <= differences[j] + diff) {
- result += right - j;
- i++;
- } else {
- j++;
- }
- }
-
- const sorted = new Array(right - left);
- let k = 0;
- i = left;
- j = mid;
- while (i < mid && j < right) {
- if (differences[i] <= differences[j]) {
- sorted[k++] = differences[i++];
- } else {
- sorted[k++] = differences[j++];
- }
- }
- while (i < mid) sorted[k++] = differences[i++];
- while (j < right) sorted[k++] = differences[j++];
-
- for (let p = 0; p < sorted.length; p++) {
- differences[left + p] = sorted[p];
- }
- }
-};
diff --git a/solutions/2428-maximum-sum-of-an-hourglass.js b/solutions/2428-maximum-sum-of-an-hourglass.js
deleted file mode 100644
index f6cb5a39..00000000
--- a/solutions/2428-maximum-sum-of-an-hourglass.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 2428. Maximum Sum of an Hourglass
- * https://leetcode.com/problems/maximum-sum-of-an-hourglass/
- * Difficulty: Medium
- *
- * You are given an m x n integer matrix grid.
- *
- * We define an hourglass as a part of the matrix with the following form.
- *
- * Return the maximum sum of the elements of an hourglass.
- *
- * Note that an hourglass cannot be rotated and must be entirely contained within the matrix.
- */
-
-/**
- * @param {number[][]} grid
- * @return {number}
- */
-var maxSum = function(grid) {
- let result = 0;
- const rows = grid.length;
- const cols = grid[0].length;
-
- for (let i = 0; i <= rows - 3; i++) {
- for (let j = 0; j <= cols - 3; j++) {
- const hourglassSum = grid[i][j] + grid[i][j+1] + grid[i][j+2] + grid[i+1][j+1]
- + grid[i+2][j] + grid[i+2][j+1] + grid[i+2][j+2];
- result = Math.max(result, hourglassSum);
- }
- }
-
- return result;
-};
diff --git a/solutions/2432-the-employee-that-worked-on-the-longest-task.js b/solutions/2432-the-employee-that-worked-on-the-longest-task.js
deleted file mode 100644
index acab1a87..00000000
--- a/solutions/2432-the-employee-that-worked-on-the-longest-task.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2432. The Employee That Worked on the Longest Task
- * https://leetcode.com/problems/the-employee-that-worked-on-the-longest-task/
- * Difficulty: Easy
- *
- * There are n employees, each with a unique id from 0 to n - 1.
- *
- * You are given a 2D integer array logs where logs[i] = [idi, leaveTimei] where:
- * - idi is the id of the employee that worked on the ith task, and
- * - leaveTimei is the time at which the employee finished the ith task. All the values
- * leaveTimei are unique.
- *
- * Note that the ith task starts the moment right after the (i - 1)th task ends, and the 0th
- * task starts at time 0.
- *
- * Return the id of the employee that worked the task with the longest time. If there is a tie
- * between two or more employees, return the smallest id among them.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} logs
- * @return {number}
- */
-var hardestWorker = function(n, logs) {
- let maxDuration = 0;
- let result = n;
- let startTime = 0;
-
- for (const [employeeId, endTime] of logs) {
- const duration = endTime - startTime;
- if (duration > maxDuration || (duration === maxDuration && employeeId < result)) {
- maxDuration = duration;
- result = employeeId;
- }
- startTime = endTime;
- }
-
- return result;
-};
diff --git a/solutions/2433-find-the-original-array-of-prefix-xor.js b/solutions/2433-find-the-original-array-of-prefix-xor.js
deleted file mode 100644
index 0f41ebeb..00000000
--- a/solutions/2433-find-the-original-array-of-prefix-xor.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 2433. Find The Original Array of Prefix Xor
- * https://leetcode.com/problems/find-the-original-array-of-prefix-xor/
- * Difficulty: Medium
- *
- * You are given an integer array pref of size n. Find and return the array arr of size
- * n that satisfies:
- * - pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i].
- *
- * Note that ^ denotes the bitwise-xor operation.
- *
- * It can be proven that the answer is unique.
- */
-
-/**
- * @param {number[]} pref
- * @return {number[]}
- */
-var findArray = function(pref) {
- const result = new Array(pref.length);
- result[0] = pref[0];
-
- for (let i = 1; i < pref.length; i++) {
- result[i] = pref[i] ^ pref[i - 1];
- }
-
- return result;
-};
diff --git a/solutions/2434-using-a-robot-to-print-the-lexicographically-smallest-string.js b/solutions/2434-using-a-robot-to-print-the-lexicographically-smallest-string.js
deleted file mode 100644
index 430e0fa6..00000000
--- a/solutions/2434-using-a-robot-to-print-the-lexicographically-smallest-string.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 2434. Using a Robot to Print the Lexicographically Smallest String
- * https://leetcode.com/problems/using-a-robot-to-print-the-lexicographically-smallest-string/
- * Difficulty: Medium
- *
- * You are given a string s and a robot that currently holds an empty string t. Apply one of the
- * following operations until s and t are both empty:
- * - Remove the first character of a string s and give it to the robot. The robot will append
- * this character to the string t.
- * - Remove the last character of a string t and give it to the robot. The robot will write
- * this character on paper.
- *
- * Return the lexicographically smallest string that can be written on the paper.
- */
-
-/**
- * @param {string} s
- * @return {string}
- */
-var robotWithString = function(s) {
- const charCount = Array(26).fill(0);
- for (const char of s) {
- charCount[char.charCodeAt(0) - 97]++;
- }
-
- const stack = [];
- let minCharIndex = 0;
- let result = '';
-
- for (const char of s) {
- stack.push(char);
- charCount[char.charCodeAt(0) - 97]--;
-
- while (minCharIndex < 26 && charCount[minCharIndex] === 0) {
- minCharIndex++;
- }
-
- while (stack.length
- && (minCharIndex === 26 || stack[stack.length - 1].charCodeAt(0) - 97 <= minCharIndex)) {
- result += stack.pop();
- }
- }
-
- while (stack.length) {
- result += stack.pop();
- }
-
- return result;
-};
diff --git a/solutions/2444-count-subarrays-with-fixed-bounds.js b/solutions/2444-count-subarrays-with-fixed-bounds.js
deleted file mode 100644
index e672554c..00000000
--- a/solutions/2444-count-subarrays-with-fixed-bounds.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2444. Count Subarrays With Fixed Bounds
- * https://leetcode.com/problems/count-subarrays-with-fixed-bounds/
- * Difficulty: Hard
- *
- * You are given an integer array nums and two integers minK and maxK.
- *
- * A fixed-bound subarray of nums is a subarray that satisfies the following conditions:
- * - The minimum value in the subarray is equal to minK.
- * - The maximum value in the subarray is equal to maxK.
- * - Return the number of fixed-bound subarrays.
- *
- * A subarray is a contiguous part of an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} minK
- * @param {number} maxK
- * @return {number}
- */
-var countSubarrays = function(nums, minK, maxK) {
- let result = 0;
-
- for (let i = 0, minIndex = -1, maxIndex = -1, invalidIndex = -1; i < nums.length; i++) {
- if (nums[i] < minK || nums[i] > maxK) {
- invalidIndex = i;
- }
- if (nums[i] === minK) {
- minIndex = i;
- }
- if (nums[i] === maxK) {
- maxIndex = i;
- }
- result += Math.max(0, Math.min(minIndex, maxIndex) - invalidIndex);
- }
-
- return result;
-};
diff --git a/solutions/2503-maximum-number-of-points-from-grid-queries.js b/solutions/2503-maximum-number-of-points-from-grid-queries.js
deleted file mode 100644
index 5503adc7..00000000
--- a/solutions/2503-maximum-number-of-points-from-grid-queries.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * 2503. Maximum Number of Points From Grid Queries
- * https://leetcode.com/problems/maximum-number-of-points-from-grid-queries/
- * Difficulty: Hard
- *
- * You are given an m x n integer matrix grid and an array queries of size k.
- *
- * Find an array answer of size k such that for each integer queries[i] you start in the top left
- * cell of the matrix and repeat the following process:
- * - If queries[i] is strictly greater than the value of the current cell that you are in, then
- * you get one point if it is your first time visiting this cell, and you can move to any adjacent
- * cell in all 4 directions: up, down, left, and right.
- * - Otherwise, you do not get any points, and you end this process.
- *
- * After the process, answer[i] is the maximum number of points you can get. Note that for each
- * query you are allowed to visit the same cell multiple times.
- *
- * Return the resulting array answer.
- */
-
-/**
- * @param {number[][]} grid
- * @param {number[]} queries
- * @return {number[]}
- */
-var maxPoints = function(grid, queries) {
- const rows = grid.length;
- const cols = grid[0].length;
- const result = new Array(queries.length);
- const sortedQueries = queries
- .map((value, index) => ({ value, index }))
- .sort((a, b) => a.value - b.value);
- const directions = [[1, 0], [0, 1], [-1, 0], [0, -1]];
- const queue = new MinPriorityQueue(([row, col]) => grid[row][col]);
- const visited = new Set();
-
- queue.enqueue([0, 0]);
- visited.add('0,0');
-
- let queryIndex = 0;
- let points = 0;
- while (queue.size()) {
- const [row, col] = queue.dequeue();
- const currentValue = grid[row][col];
- while (queryIndex < sortedQueries.length && currentValue >= sortedQueries[queryIndex].value) {
- result[sortedQueries[queryIndex].index] = points;
- queryIndex++;
- }
- if (queryIndex === sortedQueries.length) break;
- points++;
- for (const [rowOffset, colOffset] of directions) {
- const nextRow = row + rowOffset;
- const nextCol = col + colOffset;
- const positionKey = `${nextRow},${nextCol}`;
- if (nextRow >= 0 && nextRow < rows && nextCol >= 0 && nextCol < cols
- && !visited.has(positionKey)) {
- visited.add(positionKey);
- queue.enqueue([nextRow, nextCol]);
- }
- }
- }
- while (queryIndex < sortedQueries.length) {
- result[sortedQueries[queryIndex].index] = points;
- queryIndex++;
- }
-
- return result;
-};
diff --git a/solutions/2523-closest-prime-numbers-in-range.js b/solutions/2523-closest-prime-numbers-in-range.js
deleted file mode 100644
index 9deec025..00000000
--- a/solutions/2523-closest-prime-numbers-in-range.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2523. Closest Prime Numbers in Range
- * https://leetcode.com/problems/closest-prime-numbers-in-range/
- * Difficulty: Medium
- *
- * Given two positive integers left and right, find the two integers num1 and num2 such that:
- * - left <= num1 < num2 <= right
- * - Both num1 and num2 are prime numbers.
- * - num2 - num1 is the minimum amongst all other pairs satisfying the above conditions.
- *
- * Return the positive integer array ans = [num1, num2]. If there are multiple pairs satisfying
- * these conditions, return the one with the smallest num1 value. If no such numbers exist,
- * return [-1, -1].
- */
-
-/**
- * @param {number} left
- * @param {number} right
- * @return {number[]}
- */
-var closestPrimes = function(left, right) {
- const group = new Uint8Array(right + 1).fill(1);
- let result = [-1, -1];
-
- group[0] = group[1] = 0;
- for (let i = 2; i * i <= right; i++) {
- if (group[i]) {
- for (let j = i * i; j <= right; j += i) {
- group[j] = 0;
- }
- }
- }
- for (let i = Math.max(2, left), prev = -1, min = Infinity; i <= right; i++) {
- if (group[i]) {
- if (prev !== -1 && i - prev < min) {
- min = i - prev;
- result = [prev, i];
- }
- prev = i;
- }
- }
-
- return result;
-};
diff --git a/solutions/2537-count-the-number-of-good-subarrays.js b/solutions/2537-count-the-number-of-good-subarrays.js
deleted file mode 100644
index 40d4799b..00000000
--- a/solutions/2537-count-the-number-of-good-subarrays.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2537. Count the Number of Good Subarrays
- * https://leetcode.com/problems/count-the-number-of-good-subarrays/
- * Difficulty: Medium
- *
- * Given an integer array nums and an integer k, return the number of good subarrays of nums.
- *
- * A subarray arr is good if there are at least k pairs of indices (i, j) such that i < j
- * and arr[i] == arr[j].
- *
- * A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countGood = function(nums, k) {
- const frequency = new Map();
- let result = 0;
- let currentPairs = 0;
- let left = 0;
-
- for (let right = 0; right < nums.length; right++) {
- const num = nums[right];
- const prevCount = frequency.get(num) || 0;
- currentPairs += prevCount;
- frequency.set(num, prevCount + 1);
-
- while (currentPairs >= k) {
- result += nums.length - right;
- const leftNum = nums[left];
- const leftCount = frequency.get(leftNum);
- currentPairs -= leftCount - 1;
- frequency.set(leftNum, leftCount - 1);
- left++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2551-put-marbles-in-bags.js b/solutions/2551-put-marbles-in-bags.js
deleted file mode 100644
index c2bfa6d4..00000000
--- a/solutions/2551-put-marbles-in-bags.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2551. Put Marbles in Bags
- * https://leetcode.com/problems/put-marbles-in-bags/
- * Difficulty: Hard
- *
- * You have k bags. You are given a 0-indexed integer array weights where weights[i] is the weight
- * of the ith marble. You are also given the integer k.
- *
- * Divide the marbles into the k bags according to the following rules:
- * - No bag is empty.
- * - If the ith marble and jth marble are in a bag, then all marbles with an index between the ith
- * and jth indices should also be in that same bag.
- * - If a bag consists of all the marbles with an index from i to j inclusively, then the cost of
- * the bag is weights[i] + weights[j].
- *
- * The score after distributing the marbles is the sum of the costs of all the k bags.
- *
- * Return the difference between the maximum and minimum scores among marble distributions.
- */
-
-/**
- * @param {number[]} weights
- * @param {number} k
- * @return {number}
- */
-var putMarbles = function(weights, k) {
- const n = weights.length;
- if (k === n) return 0;
-
- const pairSums = [];
- for (let i = 0; i < n - 1; i++) {
- pairSums.push(weights[i] + weights[i + 1]);
- }
-
- pairSums.sort((a, b) => a - b);
-
- let minScore = 0;
- let maxScore = 0;
-
- for (let i = 0; i < k - 1; i++) {
- minScore += pairSums[i];
- maxScore += pairSums[n - 2 - i];
- }
-
- return maxScore - minScore;
-};
diff --git a/solutions/2559-count-vowel-strings-in-ranges.js b/solutions/2559-count-vowel-strings-in-ranges.js
deleted file mode 100644
index 80d61e6a..00000000
--- a/solutions/2559-count-vowel-strings-in-ranges.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 2559. Count Vowel Strings in Ranges
- * https://leetcode.com/problems/count-vowel-strings-in-ranges/
- * Difficulty: Medium
- *
- * You are given a 0-indexed array of strings words and a 2D array of integers queries.
- *
- * Each query queries[i] = [li, ri] asks us to find the number of strings present at the
- * indices ranging from li to ri (both inclusive) of words that start and end with a vowel.
- *
- * Return an array ans of size queries.length, where ans[i] is the answer to the ith query.
- *
- * Note that the vowel letters are 'a', 'e', 'i', 'o', and 'u'.
- */
-
-/**
- * @param {string[]} words
- * @param {number[][]} queries
- * @return {number[]}
- */
-var vowelStrings = function(words, queries) {
- const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
- const prefix = [0];
- for (let i = 0; i < words.length; i++) {
- prefix[i + 1] = prefix[i] + (vowels.has(words[i][0]) && vowels.has(words[i].at(-1)));
- }
- return queries.map(([l, r]) => prefix[r + 1] - prefix[l]);
-};
diff --git a/solutions/2560-house-robber-iv.js b/solutions/2560-house-robber-iv.js
deleted file mode 100644
index 07c9a9a3..00000000
--- a/solutions/2560-house-robber-iv.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 2560. House Robber IV
- * https://leetcode.com/problems/house-robber-iv/
- * Difficulty: Medium
- *
- * There are several consecutive houses along a street, each of which has some money inside.
- * There is also a robber, who wants to steal money from the homes, but he refuses to steal
- * from adjacent homes.
- *
- * The capability of the robber is the maximum amount of money he steals from one house of
- * all the houses he robbed.
- *
- * You are given an integer array nums representing how much money is stashed in each house.
- * More formally, the ith house from the left has nums[i] dollars.
- *
- * You are also given an integer k, representing the minimum number of houses the robber will
- * steal from. It is always possible to steal at least k houses.
- *
- * Return the minimum capability of the robber out of all the possible ways to steal at least
- * k houses.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var minCapability = function(nums, k) {
- let left = Math.min(...nums);
- let right = Math.max(...nums);
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
-
- if (canRob(nums, mid, k)) {
- right = mid;
- } else {
- left = mid + 1;
- }
- }
-
- return left;
-};
-
-function canRob(nums, capability, k) {
- let count = 0;
- let i = 0;
-
- while (i < nums.length) {
- if (nums[i] <= capability) {
- count++;
- i += 2;
- } else {
- i++;
- }
- }
-
- return count >= k;
-}
diff --git a/solutions/2563-count-the-number-of-fair-pairs.js b/solutions/2563-count-the-number-of-fair-pairs.js
deleted file mode 100644
index bcacc7b3..00000000
--- a/solutions/2563-count-the-number-of-fair-pairs.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 2563. Count the Number of Fair Pairs
- * https://leetcode.com/problems/count-the-number-of-fair-pairs/
- * Difficulty: Medium
- *
- * Given a 0-indexed integer array nums of size n and two integers lower and upper, return the
- * number of fair pairs.
- *
- * A pair (i, j) is fair if:
- * - 0 <= i < j < n, and
- * - lower <= nums[i] + nums[j] <= upper
- */
-
-/**
- * @param {number[]} nums
- * @param {number} lower
- * @param {number} upper
- * @return {number}
- */
-var countFairPairs = function(nums, lower, upper) {
- let result = 0;
-
- nums.sort((a, b) => a - b);
-
- for (let i = 0; i < nums.length - 1; i++) {
- const minTarget = lower - nums[i];
- const maxTarget = upper - nums[i];
-
- const first = findFirstValidIndex(i + 1, minTarget);
- const last = findFirstValidIndex(i + 1, maxTarget + 1) - 1;
-
- if (first <= last) {
- result += last - first + 1;
- }
- }
-
- return result;
-
- function findFirstValidIndex(start, target) {
- let left = start;
- let right = nums.length - 1;
- let index = nums.length;
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
- if (nums[mid] >= target) {
- index = mid;
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- return index;
- }
-};
diff --git a/solutions/2579-count-total-number-of-colored-cells.js b/solutions/2579-count-total-number-of-colored-cells.js
deleted file mode 100644
index 6727bfb3..00000000
--- a/solutions/2579-count-total-number-of-colored-cells.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * 2579. Count Total Number of Colored Cells
- * https://leetcode.com/problems/count-total-number-of-colored-cells/
- * Difficulty: Medium
- *
- * There exists an infinitely large two-dimensional grid of uncolored unit cells.
- * You are given a positive integer n, indicating that you must do the following
- * routine for n minutes:
- * - At the first minute, color any arbitrary unit cell blue.
- * - Every minute thereafter, color blue every uncolored cell that touches a blue cell.
- *
- * Below is a pictorial representation of the state of the grid after minutes 1, 2, and 3.
- */
-
-/**
- * @param {number} n
- * @return {number}
- */
-var coloredCells = function(n) {
- return 1 + 2 * n * (n - 1);
-};
diff --git a/solutions/2594-minimum-time-to-repair-cars.js b/solutions/2594-minimum-time-to-repair-cars.js
deleted file mode 100644
index 478ac4f2..00000000
--- a/solutions/2594-minimum-time-to-repair-cars.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 2594. Minimum Time to Repair Cars
- * https://leetcode.com/problems/minimum-time-to-repair-cars/
- * Difficulty: Medium
- *
- * You are given an integer array ranks representing the ranks of some mechanics. ranksi is the rank
- * of the ith mechanic. A mechanic with a rank r can repair n cars in r * n2 minutes.
- *
- * You are also given an integer cars representing the total number of cars waiting in the garage
- * to be repaired.
- *
- * Return the minimum time taken to repair all the cars.
- *
- * Note: All the mechanics can repair the cars simultaneously.
- */
-
-/**
- * @param {number[]} ranks
- * @param {number} cars
- * @return {number}
- */
-var repairCars = function(ranks, cars) {
- let left = 1;
- let right = Math.min(...ranks) * cars * cars;
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- if (verify(mid)) {
- right = mid;
- } else {
- left = mid + 1;
- }
- }
-
- return left;
-
- function verify(time) {
- let totalCars = 0;
- for (const rank of ranks) {
- totalCars += Math.floor(Math.sqrt(time / rank));
- if (totalCars >= cars) return true;
- }
- return false;
- }
-};
diff --git a/solutions/2615-sum-of-distances.js b/solutions/2615-sum-of-distances.js
deleted file mode 100644
index 470c10cf..00000000
--- a/solutions/2615-sum-of-distances.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 2615. Sum of Distances
- * https://leetcode.com/problems/sum-of-distances/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums. There exists an array arr of length nums.length,
- * where arr[i] is the sum of |i - j| over all j such that nums[j] == nums[i] and j != i. If there
- * is no such j, set arr[i] to be 0.
- *
- * Return the array arr.
- */
-
-/**
- * @param {number[]} nums
- * @return {number[]}
- */
-var distance = function(nums) {
- const valueIndices = new Map();
- const result = new Array(nums.length).fill(0);
-
- for (let i = 0; i < nums.length; i++) {
- if (!valueIndices.has(nums[i])) {
- valueIndices.set(nums[i], []);
- }
- valueIndices.get(nums[i]).push(i);
- }
-
- for (const indices of valueIndices.values()) {
- let prefixSum = 0;
- for (let i = 1; i < indices.length; i++) {
- prefixSum += indices[i] - indices[0];
- }
-
- result[indices[0]] = prefixSum;
-
- for (let i = 1; i < indices.length; i++) {
- const diff = indices[i] - indices[i - 1];
- prefixSum += diff * (i - (indices.length - i));
- result[indices[i]] = prefixSum;
- }
- }
-
- return result;
-};
diff --git a/solutions/2624-snail-traversal.js b/solutions/2624-snail-traversal.js
deleted file mode 100644
index 2ff26d6d..00000000
--- a/solutions/2624-snail-traversal.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 2624. Snail Traversal
- * https://leetcode.com/problems/snail-traversal/
- * Difficulty: Medium
- *
- * Write code that enhances all arrays such that you can call the snail(rowsCount,
- * colsCount) method that transforms the 1D array into a 2D array organised in the
- * pattern known as snail traversal order. Invalid input values should output an
- * empty array. If rowsCount * colsCount !== nums.length, the input is considered invalid.
- *
- * Snail traversal order starts at the top left cell with the first value of the
- * current array. It then moves through the entire first column from top to bottom,
- * followed by moving to the next column on the right and traversing it from bottom
- * to top. This pattern continues, alternating the direction of traversal with each
- * column, until the entire current array is covered. For example, when given the
- * input array [19, 10, 3, 7, 9, 8, 5, 2, 1, 17, 16, 14, 12, 18, 6, 13, 11, 20, 4, 15]
- * with rowsCount = 5 and colsCount = 4, the desired output matrix is shown below.
- * Note that iterating the matrix following the arrows corresponds to the order
- * of numbers in the original array.
- */
-
-/**
- * @param {number} rowsCount
- * @param {number} colsCount
- * @return {Array>}
- */
-Array.prototype.snail = function(rowsCount, colsCount) {
- if (rowsCount * colsCount !== this.length) return [];
-
- const result = Array.from({ length: rowsCount }, () => []);
- let index = 0;
-
- for (let col = 0; col < colsCount; col++) {
- if (col % 2 === 0) {
- for (let row = 0; row < rowsCount; row++) {
- result[row][col] = this[index++];
- }
- } else {
- for (let row = rowsCount - 1; row >= 0; row--) {
- result[row][col] = this[index++];
- }
- }
- }
-
- return result;
-}
diff --git a/solutions/2666-allow-one-function-call.js b/solutions/2666-allow-one-function-call.js
deleted file mode 100644
index 93bb604d..00000000
--- a/solutions/2666-allow-one-function-call.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 2666. Allow One Function Call
- * https://leetcode.com/problems/allow-one-function-call/
- * Difficulty: Easy
- *
- * Given a function fn, return a new function that is identical to the original function except
- * that it ensures fn is called at most once.
- *
- * - The first time the returned function is called, it should return the same result as fn.
- * - Every subsequent time it is called, it should return undefined.
- */
-
-/**
- * @param {Function} fn
- * @return {Function}
- */
-var once = function(fn) {
- return (...args) => fn && [fn(...args), fn = undefined][0];
-};
diff --git a/solutions/2685-count-the-number-of-complete-components.js b/solutions/2685-count-the-number-of-complete-components.js
deleted file mode 100644
index eccc890e..00000000
--- a/solutions/2685-count-the-number-of-complete-components.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 2685. Count the Number of Complete Components
- * https://leetcode.com/problems/count-the-number-of-complete-components/
- * Difficulty: Medium
- *
- * You are given an integer n. There is an undirected graph with n vertices, numbered from 0
- * to n - 1. You are given a 2D integer array edges where edges[i] = [ai, bi] denotes that
- * there exists an undirected edge connecting vertices ai and bi.
- *
- * Return the number of complete connected components of the graph.
- *
- * A connected component is a subgraph of a graph in which there exists a path between any
- * two vertices, and no vertex of the subgraph shares an edge with a vertex outside of the
- * subgraph.
- *
- * A connected component is said to be complete if there exists an edge between every pair of
- * its vertices.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @return {number}
- */
-var countCompleteComponents = function(n, edges) {
- const adjacencyList = Array.from({ length: n }, () => new Set());
- edges.forEach(([a, b]) => {
- adjacencyList[a].add(b);
- adjacencyList[b].add(a);
- });
-
- const visited = new Set();
- let result = 0;
-
- function exploreComponent(vertex) {
- const component = new Set([vertex]);
- const queue = [vertex];
- visited.add(vertex);
-
- while (queue.length) {
- const current = queue.shift();
- adjacencyList[current].forEach(neighbor => {
- if (!visited.has(neighbor)) {
- component.add(neighbor);
- queue.push(neighbor);
- visited.add(neighbor);
- }
- });
- }
- return component;
- }
-
- function isComplete(component) {
- const size = component.size;
- return [...component].every(vertex =>
- adjacencyList[vertex].size === size - 1
- && [...adjacencyList[vertex]].every(neighbor => component.has(neighbor))
- );
- }
-
- for (let vertex = 0; vertex < n; vertex++) {
- if (!visited.has(vertex)) {
- const component = exploreComponent(vertex);
- if (isComplete(component)) result++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2722-join-two-arrays-by-id.js b/solutions/2722-join-two-arrays-by-id.js
deleted file mode 100644
index 5e81dde1..00000000
--- a/solutions/2722-join-two-arrays-by-id.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2722. Join Two Arrays by ID
- * https://leetcode.com/problems/join-two-arrays-by-id/
- * Difficulty: Medium
- *
- * Given two arrays arr1 and arr2, return a new array joinedArray. All the objects in each
- * of the two inputs arrays will contain an id field that has an integer value.
- *
- * joinedArray is an array formed by merging arr1 and arr2 based on their id key. The length
- * of joinedArray should be the length of unique values of id. The returned array should be
- * sorted in ascending order based on the id key.
- *
- * If a given id exists in one array but not the other, the single object with that id should
- * be included in the result array without modification.
- *
- * If two objects share an id, their properties should be merged into a single object:
- * - If a key only exists in one object, that single key-value pair should be included in
- * the object.
- * - If a key is included in both objects, the value in the object from arr2 should override
- * the value from arr1.
- */
-
-/**
- * @param {Array} arr1
- * @param {Array} arr2
- * @return {Array}
- */
-var join = function(arr1, arr2) {
- const map = new Map();
- [...arr1, ...arr2].forEach(obj => map.set(obj.id, { ...map.get(obj.id), ...obj }));
- return Array.from(map.values()).sort((a, b) => a.id - b.id);
-};
diff --git a/solutions/2780-minimum-index-of-a-valid-split.js b/solutions/2780-minimum-index-of-a-valid-split.js
deleted file mode 100644
index 8ad20e0d..00000000
--- a/solutions/2780-minimum-index-of-a-valid-split.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 2780. Minimum Index of a Valid Split
- * https://leetcode.com/problems/minimum-index-of-a-valid-split/
- * Difficulty: Medium
- *
- * An element x of an integer array arr of length m is dominant if more than half the elements
- * of arr have a value of x.
- *
- * You are given a 0-indexed integer array nums of length n with one dominant element.
- *
- * You can split nums at an index i into two arrays nums[0, ..., i] and nums[i + 1, ..., n - 1],
- * but the split is only valid if:
- * - 0 <= i < n - 1
- * - nums[0, ..., i], and nums[i + 1, ..., n - 1] have the same dominant element.
- *
- * Here, nums[i, ..., j] denotes the subarray of nums starting at index i and ending at index j,
- * both ends being inclusive. Particularly, if j < i then nums[i, ..., j] denotes an empty subarray.
- *
- * Return the minimum index of a valid split. If no valid split exists, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minimumIndex = function(nums) {
- const map = new Map();
-
- for (const num of nums) {
- map.set(num, (map.get(num) || 0) + 1);
- }
-
- let dominantElement;
- for (const [num, count] of map) {
- if (count * 2 > nums.length) {
- dominantElement = num;
- break;
- }
- }
-
- let leftCount = 0;
- for (let i = 0; i < nums.length - 1; i++) {
- leftCount += nums[i] === dominantElement ? 1 : 0;
- const rightCount = map.get(dominantElement) - leftCount;
-
- if (leftCount * 2 > i + 1 && rightCount * 2 > nums.length - i - 1) {
- return i;
- }
- }
-
- return -1;
-};
diff --git a/solutions/2799-count-complete-subarrays-in-an-array.js b/solutions/2799-count-complete-subarrays-in-an-array.js
deleted file mode 100644
index 1ba19bb5..00000000
--- a/solutions/2799-count-complete-subarrays-in-an-array.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 2799. Count Complete Subarrays in an Array
- * https://leetcode.com/problems/count-complete-subarrays-in-an-array/
- * Difficulty: Medium
- *
- * You are given an array nums consisting of positive integers.
- *
- * We call a subarray of an array complete if the following condition is satisfied:
- * - The number of distinct elements in the subarray is equal to the number of distinct
- * elements in the whole array.
- *
- * Return the number of complete subarrays.
- *
- * A subarray is a contiguous non-empty part of an array.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var countCompleteSubarrays = function(nums) {
- const totalDistinct = new Set(nums).size;
- const frequency = new Map();
- let completeCount = 0;
- let left = 0;
-
- for (let right = 0; right < nums.length; right++) {
- frequency.set(nums[right], (frequency.get(nums[right]) || 0) + 1);
-
- while (frequency.size === totalDistinct) {
- completeCount += nums.length - right;
- const leftNum = nums[left];
- frequency.set(leftNum, frequency.get(leftNum) - 1);
- if (frequency.get(leftNum) === 0) {
- frequency.delete(leftNum);
- }
- left++;
- }
- }
-
- return completeCount;
-};
diff --git a/solutions/2818-apply-operations-to-maximize-score.js b/solutions/2818-apply-operations-to-maximize-score.js
deleted file mode 100644
index a239cff0..00000000
--- a/solutions/2818-apply-operations-to-maximize-score.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * 2818. Apply Operations to Maximize Score
- * https://leetcode.com/problems/apply-operations-to-maximize-score/
- * Difficulty: Hard
- *
- * You are given an array nums of n positive integers and an integer k.
- *
- * Initially, you start with a score of 1. You have to maximize your score by applying the following
- * operation at most k times:
- * - Choose any non-empty subarray nums[l, ..., r] that you haven't chosen previously.
- * - Choose an element x of nums[l, ..., r] with the highest prime score. If multiple such elements
- * exist, choose the one with the smallest index.
- * - Multiply your score by x.
- *
- * Here, nums[l, ..., r] denotes the subarray of nums starting at index l and ending at the index
- * r, both ends being inclusive.
- *
- * The prime score of an integer x is equal to the number of distinct prime factors of x. For
- * example, the prime score of 300 is 3 since 300 = 2 * 2 * 3 * 5 * 5.
- *
- * Return the maximum possible score after applying at most k operations.
- *
- * Since the answer may be large, return it modulo 109 + 7.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var maximumScore = function(nums, k) {
- const MOD = 1000000007n;
- const MAX = 100000;
- const powerCache = {};
-
- const primeScores = new Array(MAX + 1).fill(0);
- for (let prime = 2; prime <= MAX; prime++) {
- if (primeScores[prime] > 0) continue;
- for (let multiple = prime; multiple <= MAX; multiple += prime) {
- primeScores[multiple]++;
- }
- }
-
- const elements = nums.map(num => [num, primeScores[num], 1]);
-
- const stack = [-1];
- const n = elements.length;
-
- for (let i = 0; i <= n; i++) {
- while (
- stack.length > 1 && (i === n || elements[stack[stack.length - 1]][1] < elements[i][1])
- ) {
- const current = stack.pop();
- elements[current][2] = (i - current) * (current - stack[stack.length - 1]);
- }
-
- stack.push(i);
- }
-
- elements.sort((a, b) => b[0] - a[0]);
-
- let result = 1n;
- let remainingOps = k;
-
- for (let i = 0; remainingOps > 0; i++) {
- const usedOps = Math.min(remainingOps, elements[i][2]);
- remainingOps -= usedOps;
-
- const cacheKey = `${elements[i][0]},${usedOps}`;
- let power;
-
- if (cacheKey in powerCache) {
- power = powerCache[cacheKey];
- } else {
- let base = BigInt(elements[i][0]);
- let exp = usedOps;
- power = 1n;
-
- while (exp > 0) {
- if (exp & 1) {
- power = (power * base) % MOD;
- }
- exp >>= 1;
- base = (base * base) % MOD;
- }
-
- powerCache[cacheKey] = power;
- }
-
- result = (result * power) % MOD;
- }
-
- return Number(result);
-};
diff --git a/solutions/2843-count-symmetric-integers.js b/solutions/2843-count-symmetric-integers.js
deleted file mode 100644
index d9f472ac..00000000
--- a/solutions/2843-count-symmetric-integers.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 2843. Count Symmetric Integers
- * https://leetcode.com/problems/count-symmetric-integers/
- * Difficulty: Easy
- *
- * You are given two positive integers low and high.
- *
- * An integer x consisting of 2 * n digits is symmetric if the sum of the first n digits of x is
- * equal to the sum of the last n digits of x. Numbers with an odd number of digits are never
- * symmetric.
- *
- * Return the number of symmetric integers in the range [low, high].
- */
-
-/**
- * @param {number} low
- * @param {number} high
- * @return {number}
- */
-var countSymmetricIntegers = function(low, high) {
- let result = 0;
-
- for (let number = low; number <= high; number++) {
- if (isSymmetric(number)) result++;
- }
-
- return result;
-
- function isSymmetric(number) {
- const digits = number.toString().split('');
- const length = digits.length;
- if (length % 2 !== 0) return false;
- const mid = length / 2;
- const firstHalfSum = digits.slice(0, mid).reduce((sum, digit) => sum + Number(digit), 0);
- const secondHalfSum = digits.slice(mid).reduce((sum, digit) => sum + Number(digit), 0);
-
- return firstHalfSum === secondHalfSum;
- }
-};
diff --git a/solutions/2845-count-of-interesting-subarrays.js b/solutions/2845-count-of-interesting-subarrays.js
deleted file mode 100644
index 841f4b24..00000000
--- a/solutions/2845-count-of-interesting-subarrays.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 2845. Count of Interesting Subarrays
- * https://leetcode.com/problems/count-of-interesting-subarrays/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums, an integer modulo, and an integer k.
- *
- * Your task is to find the count of subarrays that are interesting.
- *
- * A subarray nums[l..r] is interesting if the following condition holds:
- * - Let cnt be the number of indices i in the range [l, r] such that nums[i] % modulo == k.
- * Then, cnt % modulo == k.
- *
- * Return an integer denoting the count of interesting subarrays.
- *
- * Note: A subarray is a contiguous non-empty sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} modulo
- * @param {number} k
- * @return {number}
- */
-var countInterestingSubarrays = function(nums, modulo, k) {
- const prefixCounts = new Map([[0, 1]]);
- let currentSum = 0;
- let result = 0;
-
- for (const num of nums) {
- currentSum = (currentSum + (num % modulo === k ? 1 : 0)) % modulo;
- result += prefixCounts.get((currentSum - k + modulo) % modulo) || 0;
- prefixCounts.set(currentSum, (prefixCounts.get(currentSum) || 0) + 1);
- }
-
- return result;
-};
diff --git a/solutions/2873-maximum-value-of-an-ordered-triplet-i.js b/solutions/2873-maximum-value-of-an-ordered-triplet-i.js
deleted file mode 100644
index f9aa3686..00000000
--- a/solutions/2873-maximum-value-of-an-ordered-triplet-i.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 2873. Maximum Value of an Ordered Triplet I
- * https://leetcode.com/problems/maximum-value-of-an-ordered-triplet-i/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums.
- *
- * Return the maximum value over all triplets of indices (i, j, k) such that i < j < k.
- * If all such triplets have a negative value, return 0.
- *
- * The value of a triplet of indices (i, j, k) is equal to (nums[i] - nums[j]) * nums[k].
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var maximumTripletValue = function(nums) {
- let result = 0;
-
- for (let i = 0; i < nums.length - 2; i++) {
- for (let j = i + 1; j < nums.length - 1; j++) {
- const diff = nums[i] - nums[j];
- if (diff <= 0) continue;
- for (let k = j + 1; k < nums.length; k++) {
- result = Math.max(result, diff * nums[k]);
- }
- }
- }
-
- return result;
-};
diff --git a/solutions/2874-maximum-value-of-an-ordered-triplet-ii.js b/solutions/2874-maximum-value-of-an-ordered-triplet-ii.js
deleted file mode 100644
index 8894a753..00000000
--- a/solutions/2874-maximum-value-of-an-ordered-triplet-ii.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * 2874. Maximum Value of an Ordered Triplet II
- * https://leetcode.com/problems/maximum-value-of-an-ordered-triplet-ii/
- * Difficulty: Medium
- *
- * You are given a 0-indexed integer array nums.
- *
- * Return the maximum value over all triplets of indices (i, j, k) such that i < j < k. If all
- * such triplets have a negative value, return 0.
- *
- * The value of a triplet of indices (i, j, k) is equal to (nums[i] - nums[j]) * nums[k].
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var maximumTripletValue = function(nums) {
- let result = 0;
- let maxNum = nums[0];
- let maxDiff = 0;
-
- for (let i = 1; i < nums.length; i++) {
- result = Math.max(result, maxDiff * nums[i]);
- maxDiff = Math.max(maxDiff, maxNum - nums[i]);
- maxNum = Math.max(maxNum, nums[i]);
- }
-
- return result;
-};
diff --git a/solutions/2900-longest-unequal-adjacent-groups-subsequence-i.js b/solutions/2900-longest-unequal-adjacent-groups-subsequence-i.js
deleted file mode 100644
index b4df7c52..00000000
--- a/solutions/2900-longest-unequal-adjacent-groups-subsequence-i.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2900. Longest Unequal Adjacent Groups Subsequence I
- * https://leetcode.com/problems/longest-unequal-adjacent-groups-subsequence-i/
- * Difficulty: Easy
- *
- * You are given a string array words and a binary array groups both of length n, where words[i]
- * is associated with groups[i].
- *
- * Your task is to select the longest alternating subsequence from words. A subsequence of words
- * is alternating if for any two consecutive strings in the sequence, their corresponding elements
- * in the binary array groups differ. Essentially, you are to choose strings such that adjacent
- * elements have non-matching corresponding bits in the groups array.
- *
- * Formally, you need to find the longest subsequence of an array of indices [0, 1, ..., n - 1]
- * denoted as [i0, i1, ..., ik-1], such that groups[ij] != groups[ij+1] for each 0 <= j < k - 1
- * and then find the words corresponding to these indices.
- *
- * Return the selected subsequence. If there are multiple answers, return any of them.
- *
- * Note: The elements in words are distinct.
- */
-
-/**
- * @param {string[]} words
- * @param {number[]} groups
- * @return {string[]}
- */
-var getLongestSubsequence = function(words, groups) {
- const result = [words[0]];
- let lastGroup = groups[0];
-
- for (let i = 1; i < words.length; i++) {
- if (groups[i] !== lastGroup) {
- result.push(words[i]);
- lastGroup = groups[i];
- }
- }
-
- return result;
-};
diff --git a/solutions/2901-longest-unequal-adjacent-groups-subsequence-ii.js b/solutions/2901-longest-unequal-adjacent-groups-subsequence-ii.js
deleted file mode 100644
index 1a290423..00000000
--- a/solutions/2901-longest-unequal-adjacent-groups-subsequence-ii.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * 2901. Longest Unequal Adjacent Groups Subsequence II
- * https://leetcode.com/problems/longest-unequal-adjacent-groups-subsequence-ii/
- * Difficulty: Medium
- *
- * You are given a string array words, and an array groups, both arrays having length n.
- *
- * The hamming distance between two strings of equal length is the number of positions at which the
- * corresponding characters are different.
- *
- * You need to select the longest subsequence from an array of indices [0, 1, ..., n - 1], such
- * that for the subsequence denoted as [i0, i1, ..., ik-1] having length k, the following holds:
- * - For adjacent indices in the subsequence, their corresponding groups are unequal, i.e.,
- * groups[ij] != groups[ij+1], for each j where 0 < j + 1 < k.
- * - words[ij] and words[ij+1] are equal in length, and the hamming distance between them is 1,
- * where 0 < j + 1 < k, for all indices in the subsequence.
- *
- * Return a string array containing the words corresponding to the indices (in order) in the
- * selected subsequence. If there are multiple answers, return any of them.
- *
- * Note: strings in words may be unequal in length.
- */
-
-/**
- * @param {string[]} words
- * @param {number[]} groups
- * @return {string[]}
- */
-var getWordsInLongestSubsequence = function(words, groups) {
- const n = words.length;
- const dp = new Array(n).fill(1);
- const prev = new Array(n).fill(-1);
- let maxLen = 1;
- let lastIndex = 0;
-
- for (let i = 1; i < n; i++) {
- for (let j = 0; j < i; j++) {
- if (groups[i] !== groups[j] && helper(words[i], words[j])) {
- if (dp[j] + 1 > dp[i]) {
- dp[i] = dp[j] + 1;
- prev[i] = j;
- }
- }
- }
- if (dp[i] > maxLen) {
- maxLen = dp[i];
- lastIndex = i;
- }
- }
-
- const result = [];
- while (lastIndex !== -1) {
- result.push(words[lastIndex]);
- lastIndex = prev[lastIndex];
- }
-
- return result.reverse();
-
- function helper(s1, s2) {
- if (s1.length !== s2.length) return false;
- let diff = 0;
- for (let i = 0; i < s1.length; i++) {
- if (s1[i] !== s2[i]) diff++;
- if (diff > 1) return false;
- }
- return diff === 1;
- }
-};
diff --git a/solutions/2918-minimum-equal-sum-of-two-arrays-after-replacing-zeros.js b/solutions/2918-minimum-equal-sum-of-two-arrays-after-replacing-zeros.js
deleted file mode 100644
index 15ea4af7..00000000
--- a/solutions/2918-minimum-equal-sum-of-two-arrays-after-replacing-zeros.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 2918. Minimum Equal Sum of Two Arrays After Replacing Zeros
- * https://leetcode.com/problems/minimum-equal-sum-of-two-arrays-after-replacing-zeros/
- * Difficulty: Medium
- *
- * You are given two arrays nums1 and nums2 consisting of positive integers.
- *
- * You have to replace all the 0's in both arrays with strictly positive integers such that the
- * sum of elements of both arrays becomes equal.
- *
- * Return the minimum equal sum you can obtain, or -1 if it is impossible.
- */
-
-/**
- * @param {number[]} nums1
- * @param {number[]} nums2
- * @return {number}
- */
-var minSum = function(nums1, nums2) {
- let sum1 = 0;
- let zeros1 = 0;
- for (const num of nums1) {
- sum1 += num;
- if (num === 0) zeros1++;
- }
-
- let sum2 = 0;
- let zeros2 = 0;
- for (const num of nums2) {
- sum2 += num;
- if (num === 0) zeros2++;
- }
-
- const minSum1 = sum1 + zeros1;
- const minSum2 = sum2 + zeros2;
-
- if (minSum1 > sum2 && zeros2 === 0 || minSum2 > sum1 && zeros1 === 0) return -1;
-
- return Math.max(minSum1, minSum2);
-};
diff --git a/solutions/2962-count-subarrays-where-max-element-appears-at-least-k-times.js b/solutions/2962-count-subarrays-where-max-element-appears-at-least-k-times.js
deleted file mode 100644
index 1a67fad9..00000000
--- a/solutions/2962-count-subarrays-where-max-element-appears-at-least-k-times.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 2962. Count Subarrays Where Max Element Appears at Least K Times
- * https://leetcode.com/problems/count-subarrays-where-max-element-appears-at-least-k-times/
- * Difficulty: Medium
- *
- * You are given an integer array nums and a positive integer k.
- *
- * Return the number of subarrays where the maximum element of nums appears at least k times in
- * that subarray.
- *
- * A subarray is a contiguous sequence of elements within an array.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var countSubarrays = function(nums, k) {
- const maxNum = Math.max(...nums);
- let maxCount = 0;
- let left = 0;
- let result = 0;
-
- for (let right = 0; right < nums.length; right++) {
- if (nums[right] === maxNum) maxCount++;
- while (maxCount >= k) {
- result += nums.length - right;
- if (nums[left] === maxNum) maxCount--;
- left++;
- }
- }
-
- return result;
-};
diff --git a/solutions/2965-find-missing-and-repeated-values.js b/solutions/2965-find-missing-and-repeated-values.js
deleted file mode 100644
index c45f7c09..00000000
--- a/solutions/2965-find-missing-and-repeated-values.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 2965. Find Missing and Repeated Values
- * https://leetcode.com/problems/find-missing-and-repeated-values/
- * Difficulty: Easy
- *
- * You are given a 0-indexed 2D integer matrix grid of size n * n with values in the range [1, n2].
- * Each integer appears exactly once except a which appears twice and b which is missing. The task
- * is to find the repeating and missing numbers a and b.
- *
- * Return a 0-indexed integer array ans of size 2 where ans[0] equals to a and ans[1] equals to b.
- */
-
-/**
- * @param {number[][]} grid
- * @return {number[]}
- */
-var findMissingAndRepeatedValues = function(grid) {
- const sum = grid.flat().reduce((a, b) => a + b, 0);
- const expectedSum = (grid.length * grid.length * (grid.length * grid.length + 1)) / 2;
- const repeated = sum - [...new Set(grid.flat())].reduce((a, b) => a + b, 0);
- return [repeated, expectedSum - sum + repeated];
-};
diff --git a/solutions/2999-count-the-number-of-powerful-integers.js b/solutions/2999-count-the-number-of-powerful-integers.js
deleted file mode 100644
index 88b524b6..00000000
--- a/solutions/2999-count-the-number-of-powerful-integers.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 2999. Count the Number of Powerful Integers
- * https://leetcode.com/problems/count-the-number-of-powerful-integers/
- * Difficulty: Hard
- *
- * You are given three integers start, finish, and limit. You are also given a 0-indexed string
- * s representing a positive integer.
- *
- * A positive integer x is called powerful if it ends with s (in other words, s is a suffix of x)
- * and each digit in x is at most limit.
- *
- * Return the total number of powerful integers in the range [start..finish].
- *
- * A string x is a suffix of a string y if and only if x is a substring of y that starts from
- * some index (including 0) in y and extends to the index y.length - 1. For example, 25 is a
- * suffix of 5125 whereas 512 is not.
- */
-
-/**
- * @param {number} start
- * @param {number} finish
- * @param {number} limit
- * @param {string} suffix
- * @return {number}
- */
-var numberOfPowerfulInt = function(start, finish, limit, suffix) {
- start--;
- const startCount = countValidNums(start, limit, suffix);
- const finishCount = countValidNums(finish, limit, suffix);
- return finishCount - startCount;
-
- function countValidNums(number, maxDigit, suffix) {
- const suffixNum = parseInt(suffix);
- const suffixMod = 10 ** suffix.length;
- const suffixPart = number % suffixMod;
- let baseNum = Math.floor(number / suffixMod);
- if (suffixPart < suffixNum) baseNum--;
-
- if (baseNum <= 0) return baseNum + 1;
-
- const digitStr = baseNum.toString();
- let count = digitStr.charCodeAt(0) - 48;
- let isExact = 1;
-
- if (count > maxDigit) {
- return (maxDigit + 1) ** digitStr.length;
- }
-
- for (let i = 1; i < digitStr.length; i++) {
- count *= (maxDigit + 1);
- if (isExact) {
- const currentDigit = digitStr.charCodeAt(i) - 48;
- if (currentDigit > maxDigit) {
- isExact = 0;
- count += maxDigit + 1;
- } else {
- count += currentDigit;
- }
- }
- }
-
- return count + isExact;
- }
-};
diff --git a/solutions/3024-type-of-triangle.js b/solutions/3024-type-of-triangle.js
deleted file mode 100644
index 0a62411d..00000000
--- a/solutions/3024-type-of-triangle.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 3024. Type of Triangle
- * https://leetcode.com/problems/type-of-triangle/
- * Difficulty: Easy
- *
- * You are given a 0-indexed integer array nums of size 3 which can form the sides of a triangle.
- * - A triangle is called equilateral if it has all sides of equal length.
- * - A triangle is called isosceles if it has exactly two sides of equal length.
- * - A triangle is called scalene if all its sides are of different lengths.
- *
- * Return a string representing the type of triangle that can be formed or "none" if it cannot
- * form a triangle.
- */
-
-/**
- * @param {number[]} nums
- * @return {string}
- */
-var triangleType = function(nums) {
- const [sideA, sideB, sideC] = nums.sort((a, b) => a - b);
-
- if (sideA + sideB <= sideC) return 'none';
- if (sideA === sideB && sideB === sideC) return 'equilateral';
- if (sideA === sideB || sideB === sideC) return 'isosceles';
-
- return 'scalene';
-};
diff --git a/solutions/3068-find-the-maximum-sum-of-node-values.js b/solutions/3068-find-the-maximum-sum-of-node-values.js
deleted file mode 100644
index 27666217..00000000
--- a/solutions/3068-find-the-maximum-sum-of-node-values.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 3068. Find the Maximum Sum of Node Values
- * https://leetcode.com/problems/find-the-maximum-sum-of-node-values/
- * Difficulty: Hard
- *
- * There exists an undirected tree with n nodes numbered 0 to n - 1. You are given a 0-indexed
- * 2D integer array edges of length n - 1, where edges[i] = [ui, vi] indicates that there is an
- * edge between nodes ui and vi in the tree. You are also given a positive integer k, and a
- * 0-indexed array of non-negative integers nums of length n, where nums[i] represents the
- * value of the node numbered i.
- *
- * Alice wants the sum of values of tree nodes to be maximum, for which Alice can perform the
- * following operation any number of times (including zero) on the tree:
- * - Choose any edge [u, v] connecting the nodes u and v, and update their values as follows:
- * - nums[u] = nums[u] XOR k
- * - nums[v] = nums[v] XOR k
- *
- * Return the maximum possible sum of the values Alice can achieve by performing the operation
- * any number of times.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @param {number[][]} edges
- * @return {number}
- */
-var maximumValueSum = function(nums, k, edges) {
- let totalSum = 0;
- let minChange = Infinity;
- let changeCount = 0;
-
- for (const num of nums) {
- const xored = num ^ k;
- const change = xored - num;
-
- if (change > 0) {
- totalSum += xored;
- changeCount++;
- } else {
- totalSum += num;
- }
-
- minChange = Math.min(minChange, Math.abs(change));
- }
-
- if (changeCount % 2 === 0) {
- return totalSum;
- }
-
- return totalSum - minChange;
-};
diff --git a/solutions/3108-minimum-cost-walk-in-weighted-graph.js b/solutions/3108-minimum-cost-walk-in-weighted-graph.js
deleted file mode 100644
index daa3b8a5..00000000
--- a/solutions/3108-minimum-cost-walk-in-weighted-graph.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 3108. Minimum Cost Walk in Weighted Graph
- * https://leetcode.com/problems/minimum-cost-walk-in-weighted-graph/
- * Difficulty: Hard
- *
- * There is an undirected weighted graph with n vertices labeled from 0 to n - 1.
- *
- * You are given the integer n and an array edges, where edges[i] = [ui, vi, wi] indicates that
- * there is an edge between vertices ui and vi with a weight of wi.
- *
- * A walk on a graph is a sequence of vertices and edges. The walk starts and ends with a vertex,
- * and each edge connects the vertex that comes before it and the vertex that comes after it.
- * It's important to note that a walk may visit the same edge or vertex more than once.
- *
- * The cost of a walk starting at node u and ending at node v is defined as the bitwise AND of the
- * weights of the edges traversed during the walk. In other words, if the sequence of edge weights
- * encountered during the walk is w0, w1, w2, ..., wk, then the cost is calculated as w0 & w1 & w2
- * & ... & wk, where & denotes the bitwise AND operator.
- *
- * You are also given a 2D array query, where query[i] = [si, ti]. For each query, you need to find
- * the minimum cost of the walk starting at vertex si and ending at vertex ti. If there exists no
- * such walk, the answer is -1.
- *
- * Return the array answer, where answer[i] denotes the minimum cost of a walk for query i.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} edges
- * @param {number[][]} query
- * @return {number[]}
- */
-var minimumCost = function(n, edges, query) {
- const parent = new Array(n).fill().map((_, i) => i);
- const costs = new Array(n).fill(2 ** 17 - 1);
-
- for (const [u, v, w] of edges) {
- const [p1, p2] = [find(u), find(v)];
- parent[p1] = p2;
- costs[p1] = costs[p2] = costs[p1] & costs[p2] & w;
- }
-
- for (let i = 0; i < n; i++) {
- parent[i] = find(i);
- }
-
- return query.map(([s, t]) => {
- if (s === t) return 0;
- return parent[s] === parent[t] ? costs[parent[s]] : -1;
- });
-
- function find(key) {
- if (parent[key] !== key) {
- parent[key] = find(parent[key]);
- }
- return parent[key];
- }
-};
diff --git a/solutions/3169-count-days-without-meetings.js b/solutions/3169-count-days-without-meetings.js
deleted file mode 100644
index cd97771c..00000000
--- a/solutions/3169-count-days-without-meetings.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 3169. Count Days Without Meetings
- * https://leetcode.com/problems/count-days-without-meetings/
- * Difficulty: Medium
- *
- * You are given a positive integer days representing the total number of days an employee is
- * available for work (starting from day 1). You are also given a 2D array meetings of size n
- * where, meetings[i] = [start_i, end_i] represents the starting and ending days of meeting
- * i (inclusive).
- *
- * Return the count of days when the employee is available for work but no meetings are scheduled.
- *
- * Note: The meetings may overlap.
- */
-
-/**
- * @param {number} days
- * @param {number[][]} meetings
- * @return {number}
- */
-var countDays = function(days, meetings) {
- meetings.sort((a, b) => a[0] - b[0]);
-
- let result = 0;
- let currentEnd = 0;
-
- for (const [start, end] of meetings) {
- if (start > currentEnd + 1) {
- result += start - currentEnd - 1;
- }
- currentEnd = Math.max(currentEnd, end);
- }
-
- if (currentEnd < days) {
- result += days - currentEnd;
- }
-
- return result;
-};
diff --git a/solutions/3191-minimum-operations-to-make-binary-array-elements-equal-to-one-i.js b/solutions/3191-minimum-operations-to-make-binary-array-elements-equal-to-one-i.js
deleted file mode 100644
index 7ee13752..00000000
--- a/solutions/3191-minimum-operations-to-make-binary-array-elements-equal-to-one-i.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 3191. Minimum Operations to Make Binary Array Elements Equal to One I
- * https://leetcode.com/problems/minimum-operations-to-make-binary-array-elements-equal-to-one-i/
- * Difficulty: Medium
- *
- * You are given a binary array nums.
- *
- * You can do the following operation on the array any number of times (possibly zero):
- * - Choose any 3 consecutive elements from the array and flip all of them.
- *
- * Flipping an element means changing its value from 0 to 1, and from 1 to 0.
- *
- * Return the minimum number of operations required to make all elements in nums equal to 1.
- * If it is impossible, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @return {number}
- */
-var minOperations = function(nums) {
- const result = [...nums];
- let operations = 0;
-
- for (let i = 0; i < nums.length - 2; i++) {
- if (result[i] === 0) {
- result[i] ^= 1;
- result[i + 1] ^= 1;
- result[i + 2] ^= 1;
- operations++;
- }
- }
-
- return result.every(num => num === 1) ? operations : -1;
-};
diff --git a/solutions/3208-alternating-groups-ii.js b/solutions/3208-alternating-groups-ii.js
deleted file mode 100644
index 6d4be0de..00000000
--- a/solutions/3208-alternating-groups-ii.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 3208. Alternating Groups II
- * https://leetcode.com/problems/alternating-groups-ii/
- * Difficulty: Medium
- *
- * There is a circle of red and blue tiles. You are given an array of integers colors and
- * an integer k. The color of tile i is represented by colors[i]:
- * - colors[i] == 0 means that tile i is red.
- * -colors[i] == 1 means that tile i is blue.
- *
- * An alternating group is every k contiguous tiles in the circle with alternating colors
- * (each tile in the group except the first and last one has a different color from its
- * left and right tiles).
- *
- * Return the number of alternating groups.
- *
- * Note that since colors represents a circle, the first and the last tiles are considered
- * to be next to each other.
- */
-
-/**
- * @param {number[]} colors
- * @param {number} k
- * @return {number}
- */
-var numberOfAlternatingGroups = function(colors, k) {
- const extended = colors.concat(colors.slice(0, k - 1));
- let result = 0;
- let invalid = 0;
-
- for (let i = 1; i < k; i++) {
- if (extended[i] === extended[i - 1]) {
- invalid++;
- }
- }
- if (invalid === 0) {
- result++;
- }
- for (let i = 1; i < colors.length; i++) {
- if (extended[i] === extended[i - 1]) invalid--;
- if (extended[i + k - 1] === extended[i + k - 2]) invalid++;
- if (invalid === 0) result++;
- }
-
- return result;
-};
diff --git a/solutions/3272-find-the-count-of-good-integers.js b/solutions/3272-find-the-count-of-good-integers.js
deleted file mode 100644
index fd636f11..00000000
--- a/solutions/3272-find-the-count-of-good-integers.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 3272. Find the Count of Good Integers
- * https://leetcode.com/problems/find-the-count-of-good-integers/
- * Difficulty: Hard
- *
- * You are given two positive integers n and k.
- *
- * An integer x is called k-palindromic if:
- * - x is a palindrome.
- * - x is divisible by k.
- *
- * An integer is called good if its digits can be rearranged to form a k-palindromic integer.
- * For example, for k = 2, 2020 can be rearranged to form the k-palindromic integer 2002,
- * whereas 1010 cannot be rearranged to form a k-palindromic integer.
- *
- * Return the count of good integers containing n digits.
- *
- * Note that any integer must not have leading zeros, neither before nor after rearrangement.
- * For example, 1010 cannot be rearranged to form 101.
- */
-
-/**
- * @param {number} n
- * @param {number} k
- * @return {number}
- */
-function countGoodIntegers(n, k) {
- if (n === 1) return Math.floor(9 / k);
-
- let result = 0;
- const halfLength = Math.ceil(n / 2);
- const start = Math.pow(10, halfLength - 1);
- const end = Math.pow(10, halfLength);
-
- const seen = new Set();
- for (let i = start; i < end; i++) {
- const palindromeStr = generatePalindrome(i);
- if (palindromeStr.length !== n) continue;
- const num = parseInt(palindromeStr);
- if (num % k !== 0) continue;
-
- const sortedDigits = palindromeStr.split('').sort().join('');
- if (seen.has(sortedDigits)) continue;
- seen.add(sortedDigits);
-
- result += calculateArrangements(palindromeStr);
- }
-
- return result;
-
- function generatePalindrome(firstHalf) {
- const str = firstHalf.toString();
- const isOdd = n % 2 === 1;
- return isOdd
- ? str + str.slice(0, -1).split('').reverse().join('')
- : str + str.split('').reverse().join('');
- }
-
- function calculateArrangements(numStr) {
- const freq = new Map();
- for (const digit of numStr) {
- freq.set(digit, (freq.get(digit) || 0) + 1);
- }
- const total = multinomial(n, freq);
- if (!freq.has('0')) return total;
-
- freq.set('0', freq.get('0') - 1);
- if (freq.get('0') === 0) freq.delete('0');
- return total - multinomial(n - 1, freq);
- }
-
- function multinomial(length, freq) {
- const numerator = factorial(length);
- let denominator = 1;
- for (const count of freq.values()) {
- denominator *= factorial(count);
- }
- return numerator / denominator;
- }
-
- function factorial(num) {
- let res = 1;
- for (let i = 2; i <= num; i++) res *= i;
- return res;
- }
-}
diff --git a/solutions/3306-count-of-substrings-containing-every-vowel-and-k-consonants-ii.js b/solutions/3306-count-of-substrings-containing-every-vowel-and-k-consonants-ii.js
deleted file mode 100644
index 7e8f635d..00000000
--- a/solutions/3306-count-of-substrings-containing-every-vowel-and-k-consonants-ii.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 3306. Count of Substrings Containing Every Vowel and K Consonants II
- * https://leetcode.com/problems/count-of-substrings-containing-every-vowel-and-k-consonants-ii/
- * Difficulty: Medium
- *
- * You are given a string word and a non-negative integer k.
- *
- * Return the total number of substrings of word that contain every vowel ('a', 'e', 'i', 'o', and
- * 'u') at least once and exactly k consonants.
- */
-
-/**
- * @param {string} word
- * @param {number} k
- * @return {number}
- */
-function countOfSubstrings(word, k) {
- return helper(word, k) - helper(word, k - 1);
-
- function helper(word, k) {
- const vowels = { a: 0, e: 0, i: 0, o: 0, u: 0 };
- let count = 0;
- let left = 0;
- let consonants = k;
-
- for (let right = 0; right < word.length; right++) {
- const character = word[right];
- if (character in vowels) {
- vowels[character]++;
- } else {
- consonants--;
- }
-
- while (vowels.a > 0 && vowels.e > 0 && vowels.i > 0 && vowels.o > 0
- && vowels.u > 0 && consonants < 0) {
- const leftCharacter = word[left];
- if (leftCharacter in vowels) {
- vowels[leftCharacter]--;
- } else {
- consonants++;
- }
- left++;
- }
- count += right - left + 1;
- }
- return count;
- }
-}
diff --git a/solutions/3335-total-characters-in-string-after-transformations-i.js b/solutions/3335-total-characters-in-string-after-transformations-i.js
deleted file mode 100644
index e62e76ea..00000000
--- a/solutions/3335-total-characters-in-string-after-transformations-i.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 3335. Total Characters in String After Transformations I
- * https://leetcode.com/problems/total-characters-in-string-after-transformations-i/
- * Difficulty: Medium
- *
- * You are given a string s and an integer t, representing the number of transformations to
- * perform. In one transformation, every character in s is replaced according to the following
- * rules:
- * - If the character is 'z', replace it with the string "ab".
- * - Otherwise, replace it with the next character in the alphabet. For example, 'a' is replaced
- * with 'b', 'b' is replaced with 'c', and so on.
- *
- * Return the length of the resulting string after exactly t transformations.
- *
- * Since the answer may be very large, return it modulo 109 + 7.
- */
-
-/**
- * @param {string} s
- * @param {number} t
- * @return {number}
- */
-var lengthAfterTransformations = function(s, t) {
- const MOD = 1e9 + 7;
- const freq = new Array(26).fill(0);
-
- for (const char of s) {
- freq[char.charCodeAt(0) - 97]++;
- }
-
- for (let i = 0; i < t; i++) {
- const newFreq = new Array(26).fill(0);
- for (let j = 0; j < 25; j++) {
- newFreq[j + 1] = freq[j];
- }
- newFreq[0] = (newFreq[0] + freq[25]) % MOD;
- newFreq[1] = (newFreq[1] + freq[25]) % MOD;
- freq.splice(0, 26, ...newFreq);
- }
-
- let result = 0;
- for (const count of freq) {
- result = (result + count) % MOD;
- }
-
- return result;
-};
diff --git a/solutions/3337-total-characters-in-string-after-transformations-ii.js b/solutions/3337-total-characters-in-string-after-transformations-ii.js
deleted file mode 100644
index 91d4d6aa..00000000
--- a/solutions/3337-total-characters-in-string-after-transformations-ii.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 3337. Total Characters in String After Transformations II
- * https://leetcode.com/problems/total-characters-in-string-after-transformations-ii/
- * Difficulty: Hard
- *
- * You are given a string s consisting of lowercase English letters, an integer t representing
- * the number of transformations to perform, and an array nums of size 26. In one transformation,
- * every character in s is replaced according to the following rules:
- * - Replace s[i] with the next nums[s[i] - 'a'] consecutive characters in the alphabet. For
- * example, if s[i] = 'a' and nums[0] = 3, the character 'a' transforms into the next 3
- * consecutive characters ahead of it, which results in "bcd".
- * - The transformation wraps around the alphabet if it exceeds 'z'. For example, if s[i] = 'y'
- * and nums[24] = 3, the character 'y' transforms into the next 3 consecutive characters ahead
- * of it, which results in "zab".
- *
- * Return the length of the resulting string after exactly t transformations.
- *
- * Since the answer may be very large, return it modulo 109 + 7.
- */
-
-/**
- * @param {string} s
- * @param {number} t
- * @param {number[]} nums
- * @return {number}
- */
-var lengthAfterTransformations = function(s, t, nums) {
- const MOD = 1000000007n;
- const freq = new Array(26).fill(0n);
-
- for (const char of s) {
- freq[char.charCodeAt(0) - 97]++;
- }
-
- const matrix = new Array(26).fill().map(() => new Array(26).fill(0n));
- for (let i = 0; i < 26; i++) {
- for (let j = 0; j < nums[i]; j++) {
- matrix[(i + j + 1) % 26][i] = 1n;
- }
- }
-
- const finalMatrix = matrixPower(matrix, t);
- let total = 0n;
-
- for (let i = 0; i < 26; i++) {
- let sum = 0n;
- for (let j = 0; j < 26; j++) {
- sum = (sum + finalMatrix[i][j] * freq[j]) % MOD;
- }
- total = (total + sum) % MOD;
- }
-
- return Number(total);
-
- function matrixMultiply(a, b) {
- const result = new Array(26).fill().map(() => new Array(26).fill(0n));
- for (let i = 0; i < 26; i++) {
- for (let j = 0; j < 26; j++) {
- for (let k = 0; k < 26; k++) {
- result[i][j] = (result[i][j] + a[i][k] * b[k][j]) % MOD;
- }
- }
- }
- return result;
- }
-
- function matrixPower(mat, power) {
- let result = new Array(26).fill().map(() => new Array(26).fill(0n));
- for (let i = 0; i < 26; i++) result[i][i] = 1n;
-
- while (power > 0) {
- if (power & 1) result = matrixMultiply(result, mat);
- mat = matrixMultiply(mat, mat);
- power >>= 1;
- }
- return result;
- }
-};
diff --git a/solutions/3341-find-minimum-time-to-reach-last-room-i.js b/solutions/3341-find-minimum-time-to-reach-last-room-i.js
deleted file mode 100644
index fae5957b..00000000
--- a/solutions/3341-find-minimum-time-to-reach-last-room-i.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 3341. Find Minimum Time to Reach Last Room I
- * https://leetcode.com/problems/find-minimum-time-to-reach-last-room-i/
- * Difficulty: Medium
- *
- * There is a dungeon with n x m rooms arranged as a grid.
- *
- * You are given a 2D array moveTime of size n x m, where moveTime[i][j] represents the minimum
- * time in seconds when you can start moving to that room. You start from the room (0, 0) at
- * time t = 0 and can move to an adjacent room. Moving between adjacent rooms takes exactly
- * one second.
- *
- * Return the minimum time to reach the room (n - 1, m - 1).
- *
- * Two rooms are adjacent if they share a common wall, either horizontally or vertically.
- */
-
-/**
- * @param {number[][]} moveTime
- * @return {number}
- */
-var minTimeToReach = function(moveTime) {
- const rows = moveTime.length;
- const cols = moveTime[0].length;
- const distances = Array.from({ length: rows }, () => new Array(cols).fill(Infinity));
- const pq = new PriorityQueue((a, b) => a[0] - b[0]);
- pq.enqueue([0, 0, 0]);
- const directions = [[0, 1], [1, 0], [0, -1], [-1, 0]];
-
- distances[0][0] = 0;
-
- while (!pq.isEmpty()) {
- const [time, row, col] = pq.dequeue();
-
- if (row === rows - 1 && col === cols - 1) return time;
-
- if (time > distances[row][col]) continue;
-
- for (const [dr, dc] of directions) {
- const newRow = row + dr;
- const newCol = col + dc;
-
- if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= cols) continue;
-
- const newTime = Math.max(time, moveTime[newRow][newCol]) + 1;
-
- if (newTime < distances[newRow][newCol]) {
- distances[newRow][newCol] = newTime;
- pq.enqueue([newTime, newRow, newCol]);
- }
- }
- }
-
- return distances[rows - 1][cols - 1];
-};
diff --git a/solutions/3342-find-minimum-time-to-reach-last-room-ii.js b/solutions/3342-find-minimum-time-to-reach-last-room-ii.js
deleted file mode 100644
index 24c9fc5a..00000000
--- a/solutions/3342-find-minimum-time-to-reach-last-room-ii.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 3342. Find Minimum Time to Reach Last Room II
- * https://leetcode.com/problems/find-minimum-time-to-reach-last-room-ii/
- * Difficulty: Medium
- *
- * There is a dungeon with n x m rooms arranged as a grid.
- *
- * You are given a 2D array moveTime of size n x m, where moveTime[i][j] represents the minimum
- * time in seconds when you can start moving to that room. You start from the room (0, 0) at
- * time t = 0 and can move to an adjacent room. Moving between adjacent rooms takes one
- * second for one move and two seconds for the next, alternating between the two.
- *
- * Return the minimum time to reach the room (n - 1, m - 1).
- *
- * Two rooms are adjacent if they share a common wall, either horizontally or vertically.
- */
-
-/**
- * @param {number[][]} moveTime
- * @return {number}
- */
-var minTimeToReach = function(moveTime) {
- const rows = moveTime.length;
- const cols = moveTime[0].length;
- const distances = Array.from({ length: rows }, () => new Array(cols).fill(Infinity));
- const pq = new PriorityQueue((a, b) => a[0] - b[0]);
- pq.enqueue([0, 0, 0, 0]);
- const directions = [[0, 1], [1, 0], [0, -1], [-1, 0]];
-
- distances[0][0] = 0;
-
- while (!pq.isEmpty()) {
- const [time, row, col, moveCount] = pq.dequeue();
-
- if (row === rows - 1 && col === cols - 1) return time;
-
- if (time > distances[row][col]) continue;
-
- for (const [dr, dc] of directions) {
- const newRow = row + dr;
- const newCol = col + dc;
-
- if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= cols) continue;
-
- const moveCost = moveCount % 2 === 0 ? 1 : 2;
- const startTime = Math.max(time, moveTime[newRow][newCol]);
- const newTime = startTime + moveCost;
-
- if (newTime < distances[newRow][newCol]) {
- distances[newRow][newCol] = newTime;
- pq.enqueue([newTime, newRow, newCol, moveCount + 1]);
- }
- }
- }
-
- return distances[rows - 1][cols - 1];
-};
diff --git a/solutions/3343-count-number-of-balanced-permutations.js b/solutions/3343-count-number-of-balanced-permutations.js
deleted file mode 100644
index 0e27eae1..00000000
--- a/solutions/3343-count-number-of-balanced-permutations.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 3343. Count Number of Balanced Permutations
- * https://leetcode.com/problems/count-number-of-balanced-permutations/
- * Difficulty: Hard
- *
- * You are given a string num. A string of digits is called balanced if the sum of the digits
- * at even indices is equal to the sum of the digits at odd indices.
- *
- * Return the number of distinct permutations of num that are balanced.
- *
- * Since the answer may be very large, return it modulo 109 + 7.
- *
- * A permutation is a rearrangement of all the characters of a string.
- */
-
-/**
- * @param {string} num
- * @return {number}
- */
-var countBalancedPermutations = function(num) {
- const MOD = 1e9 + 7;
- const n = num.length;
- const digitCounts = new Array(10).fill(0);
- let totalSum = 0;
-
- for (const char of num) {
- const digit = parseInt(char);
- digitCounts[digit]++;
- totalSum += digit;
- }
-
- if (totalSum % 2) return 0;
-
- const memo = new Map();
-
- function combination(n, r) {
- if (r > n) return 0;
- if (r === 0 || r === n) return 1;
- if (r > n - r) r = n - r;
-
- let result = 1n;
- for (let i = 0; i < r; i++) {
- result = result * BigInt(n - i) / BigInt(i + 1);
- }
- return Number(result % BigInt(MOD));
- }
-
- function exploreDigits(digit, oddSlots, evenSlots, targetBalance) {
- if (oddSlots === 0 && evenSlots === 0 && targetBalance === 0) return 1;
- if (digit < 0 || oddSlots < 0 || evenSlots < 0 || targetBalance < 0) return 0;
-
- const key = `${digit},${oddSlots},${evenSlots},${targetBalance}`;
- if (memo.has(key)) return memo.get(key);
-
- let result = 0;
- for (let oddCount = 0; oddCount <= digitCounts[digit]; oddCount++) {
- const evenCount = digitCounts[digit] - oddCount;
- const ways = (BigInt(combination(oddSlots, oddCount))
- * BigInt(combination(evenSlots, evenCount))) % BigInt(MOD);
- const next = BigInt(exploreDigits(digit - 1, oddSlots - oddCount,
- evenSlots - evenCount, targetBalance - digit * oddCount));
- result = (result + Number((ways * next) % BigInt(MOD))) % MOD;
- }
-
- memo.set(key, result);
- return result;
- }
-
- return exploreDigits(9, n - Math.floor(n / 2), Math.floor(n / 2), totalSum / 2);
-};
diff --git a/solutions/3355-zero-array-transformation-i.js b/solutions/3355-zero-array-transformation-i.js
deleted file mode 100644
index 21b9bc13..00000000
--- a/solutions/3355-zero-array-transformation-i.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 3355. Zero Array Transformation I
- * https://leetcode.com/problems/zero-array-transformation-i/
- * Difficulty: Medium
- *
- * You are given an integer array nums of length n and a 2D array queries, where
- * queries[i] = [li, ri].
- *
- * For each queries[i]:
- * - Select a subset of indices within the range [li, ri] in nums.
- * - Decrement the values at the selected indices by 1.
- *
- * A Zero Array is an array where all elements are equal to 0.
- *
- * Return true if it is possible to transform nums into a Zero Array after processing all the
- * queries sequentially, otherwise return false.
- */
-
-/**
- * @param {number[]} nums
- * @param {number[][]} queries
- * @return {boolean}
- */
-var isZeroArray = function(nums, queries) {
- const maxDecrements = new Array(nums.length).fill(0);
-
- for (const [left, right] of queries) {
- maxDecrements[left]++;
- if (right + 1 < nums.length) {
- maxDecrements[right + 1]--;
- }
- }
-
- let currentDecrements = 0;
- for (let i = 0; i < nums.length; i++) {
- currentDecrements += maxDecrements[i];
- if (nums[i] > currentDecrements) {
- return false;
- }
- }
-
- return true;
-};
diff --git a/solutions/3356-zero-array-transformation-ii.js b/solutions/3356-zero-array-transformation-ii.js
deleted file mode 100644
index 59c4b9e4..00000000
--- a/solutions/3356-zero-array-transformation-ii.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 3356. Zero Array Transformation II
- * https://leetcode.com/problems/zero-array-transformation-ii/
- * Difficulty: Medium
- *
- * You are given an integer array nums of length n and a 2D array queries where
- * queries[i] = [li, ri, vali].
- *
- * Each queries[i] represents the following action on nums:
- * - Decrement the value at each index in the range [li, ri] in nums by at most vali.
- * - The amount by which each value is decremented can be chosen independently for each index.
- *
- * A Zero Array is an array with all its elements equal to 0.
- *
- * Return the minimum possible non-negative value of k, such that after processing the first
- * k queries in sequence, nums becomes a Zero Array. If no such k exists, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @param {number[][]} queries
- * @return {number}
- */
-var minZeroArray = function(nums, queries) {
- const diff = new Array(nums.length + 1).fill(0);
- const total = nums.reduce((sum, num) => sum + num, 0);
- let left = 0;
- let right = queries.length - 1;
- let result = -1;
-
- if (total === 0) {
- return 0;
- }
-
- while (left <= right) {
- const mid = Math.floor((left + right) / 2);
- if (canZeroOut(mid)) {
- result = mid + 1;
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- return result;
-
- function canZeroOut(k) {
- const tempDiff = new Array(nums.length + 1).fill(0);
- for (let i = 0; i <= k; i++) {
- const [left, right, val] = queries[i];
- tempDiff[left] += val;
- if (right + 1 < nums.length) tempDiff[right + 1] -= val;
- }
-
- let current = 0;
- let reduction = 0;
- for (let i = 0; i < nums.length; i++) {
- current = Math.max(0, current + tempDiff[i]);
- reduction += Math.min(nums[i], current);
- if (reduction >= total) return true;
- }
- return reduction >= total;
- }
-};
diff --git a/solutions/3362-zero-array-transformation-iii.js b/solutions/3362-zero-array-transformation-iii.js
deleted file mode 100644
index f6d979bb..00000000
--- a/solutions/3362-zero-array-transformation-iii.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 3362. Zero Array Transformation III
- * https://leetcode.com/problems/zero-array-transformation-iii/
- * Difficulty: Medium
- *
- * You are given an integer array nums of length n and a 2D array queries where
- * queries[i] = [li, ri].
- *
- * Each queries[i] represents the following action on nums:
- * - Decrement the value at each index in the range [li, ri] in nums by at most 1.
- * - The amount by which the value is decremented can be chosen independently for each index.
- *
- * A Zero Array is an array with all its elements equal to 0.
- *
- * Return the maximum number of elements that can be removed from queries, such that nums can
- * still be converted to a zero array using the remaining queries. If it is not possible to
- * convert nums to a zero array, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @param {number[][]} queries
- * @return {number}
- */
-var maxRemoval = function(nums, queries) {
- queries.sort((a, b) => a[0] - b[0]);
- const endIndexHeap = new MaxPriorityQueue();
- const expiredQueries = new Array(nums.length + 1).fill(0);
- let operationCount = 0;
- let queryIndex = 0;
-
- for (let numIndex = 0; numIndex < nums.length; numIndex++) {
- operationCount -= expiredQueries[numIndex];
-
- while (queryIndex < queries.length && queries[queryIndex][0] === numIndex) {
- endIndexHeap.push(queries[queryIndex][1]);
- queryIndex++;
- }
-
- while (
- operationCount < nums[numIndex] && !endIndexHeap.isEmpty() && endIndexHeap.front() >= numIndex
- ) {
- operationCount++;
- expiredQueries[endIndexHeap.pop() + 1]++;
- }
-
- if (operationCount < nums[numIndex]) {
- return -1;
- }
- }
-
- return endIndexHeap.size();
-};
diff --git a/solutions/3375-minimum-operations-to-make-array-values-equal-to-k.js b/solutions/3375-minimum-operations-to-make-array-values-equal-to-k.js
deleted file mode 100644
index 4ea40bf6..00000000
--- a/solutions/3375-minimum-operations-to-make-array-values-equal-to-k.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 3375. Minimum Operations to Make Array Values Equal to K
- * https://leetcode.com/problems/minimum-operations-to-make-array-values-equal-to-k/
- * Difficulty: Easy
- *
- * You are given an integer array nums and an integer k.
- *
- * An integer h is called valid if all values in the array that are strictly greater than
- * h are identical.
- *
- * For example, if nums = [10, 8, 10, 8], a valid integer is h = 9 because all nums[i] > 9
- * are equal to 10, but 5 is not a valid integer.
- *
- * You are allowed to perform the following operation on nums:
- * - Select an integer h that is valid for the current values in nums.
- * - For each index i where nums[i] > h, set nums[i] to h.
- *
- * Return the minimum number of operations required to make every element in nums equal to k.
- * If it is impossible to make all elements equal to k, return -1.
- */
-
-/**
- * @param {number[]} nums
- * @param {number} k
- * @return {number}
- */
-var minOperations = function(nums, k) {
- if (nums.some(x => x < k)) return -1;
-
- const uniqueAbove = [...new Set(nums.filter(x => x > k))].sort((a, b) => b - a);
- if (uniqueAbove.length === 0) return 0;
-
- let result = 0;
- let current = uniqueAbove.slice();
-
- while (current.length > 0) {
- const threshold = current[0] - 1;
- current = current.filter(x => x <= threshold);
- result++;
- if (current.every(x => x === k)) break;
- }
-
- return result;
-};
diff --git a/solutions/3394-check-if-grid-can-be-cut-into-sections.js b/solutions/3394-check-if-grid-can-be-cut-into-sections.js
deleted file mode 100644
index 7175b79f..00000000
--- a/solutions/3394-check-if-grid-can-be-cut-into-sections.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 3394. Check if Grid can be Cut into Sections
- * https://leetcode.com/problems/check-if-grid-can-be-cut-into-sections/
- * Difficulty: Medium
- *
- * You are given an integer n representing the dimensions of an n x n grid, with the origin at the
- * bottom-left corner of the grid. You are also given a 2D array of coordinates rectangles, where
- * rectangles[i] is in the form [startx, starty, endx, endy], representing a rectangle on the grid.
- * Each rectangle is defined as follows:
- * - (startx, starty): The bottom-left corner of the rectangle.
- * - (endx, endy): The top-right corner of the rectangle.
- *
- * Note that the rectangles do not overlap. Your task is to determine if it is possible to make
- * either two horizontal or two vertical cuts on the grid such that:
- * - Each of the three resulting sections formed by the cuts contains at least one rectangle.
- * - Every rectangle belongs to exactly one section.
- *
- * Return true if such cuts can be made; otherwise, return false.
- */
-
-/**
- * @param {number} n
- * @param {number[][]} rectangles
- * @return {boolean}
- */
-var checkValidCuts = function(n, rectangles) {
- return canPartition(rectangles.map(r => [r[0], r[2]]))
- || canPartition(rectangles.map(r => [r[1], r[3]]));
-};
-
-function canPartition(intervals, cuts = 0) {
- intervals.sort(([start1, end1], [start2, end2]) => start1 - start2 || end2 - end1);
- let maxReach = intervals[0][1];
- for (let i = 1; i < intervals.length; i++) {
- if (intervals[i][0] >= maxReach && ++cuts === 2) return true;
- maxReach = Math.max(intervals[i][1], maxReach);
- }
- return false;
-}
diff --git a/solutions/3461-check-if-digits-are-equal-in-string-after-operations-i.js b/solutions/3461-check-if-digits-are-equal-in-string-after-operations-i.js
deleted file mode 100644
index bd801d33..00000000
--- a/solutions/3461-check-if-digits-are-equal-in-string-after-operations-i.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 3461. Check If Digits Are Equal in String After Operations I
- * https://leetcode.com/problems/check-if-digits-are-equal-in-string-after-operations-i/
- * Difficulty: Easy
- *
- * You are given a string s consisting of digits. Perform the following operation repeatedly
- * until the string has exactly two digits:
- * - For each pair of consecutive digits in s, starting from the first digit, calculate a new
- * digit as the sum of the two digits modulo 10.
- * - Replace s with the sequence of newly calculated digits, maintaining the order in which
- * they are computed.
- *
- * Return true if the final two digits in s are the same; otherwise, return false.
- */
-
-/**
- * @param {string} s
- * @return {boolean}
- */
-var hasSameDigits = function(s) {
- while (s.length > 2) {
- let next = '';
- for (let i = 0; i < s.length - 1; i++) {
- next += (parseInt(s[i]) + parseInt(s[i + 1])) % 10;
- }
- s = next;
- }
- return s[0] === s[1];
-};
diff --git a/solutions/3462-maximum-sum-with-at-most-k-elements.js b/solutions/3462-maximum-sum-with-at-most-k-elements.js
deleted file mode 100644
index aafcd08f..00000000
--- a/solutions/3462-maximum-sum-with-at-most-k-elements.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * 3462. Maximum Sum With at Most K Elements
- * https://leetcode.com/problems/maximum-sum-with-at-most-k-elements/
- * Difficulty: Medium
- *
- * You are given a 2D integer matrix grid of size n x m, an integer array limits of length n, and
- * an integer k. The task is to find the maximum sum of at most k elements from the matrix grid
- * such that:
- * - The number of elements taken from the ith row of grid does not exceed limits[i].
- *
- * Return the maximum sum.
- */
-
-/**
- * @param {number[][]} grid
- * @param {number[]} limits
- * @param {number} k
- * @return {number}
- */
-var maxSum = function(grid, limits, k) {
- const result = [];
- grid.forEach((row, i) => {
- result.push(...row.slice().sort((a, b) => b - a).slice(0, limits[i]));
- });
- return result.sort((a, b) => b - a).slice(0, k).reduce((sum, num) => sum + num, 0);
-};
diff --git a/solutions/3463-check-if-digits-are-equal-in-string-after-operations-ii.js b/solutions/3463-check-if-digits-are-equal-in-string-after-operations-ii.js
deleted file mode 100644
index 6315d00c..00000000
--- a/solutions/3463-check-if-digits-are-equal-in-string-after-operations-ii.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 3463. Check If Digits Are Equal in String After Operations II
- * https://leetcode.com/problems/check-if-digits-are-equal-in-string-after-operations-ii/
- * Difficulty: Hard
- *
- * You are given a string s consisting of digits. Perform the following operation repeatedly until
- * the string has exactly two digits:
- * - For each pair of consecutive digits in s, starting from the first digit, calculate a new digit
- * as the sum of the two digits modulo 10.
- * - Replace s with the sequence of newly calculated digits, maintaining the order in which they
- * are computed.
- *
- * Return true if the final two digits in s are the same; otherwise, return false.
- */
-
-/**
- * @param {string} s
- * @return {boolean}
- */
-var hasSameDigits = function(s) {
- const n = s.length;
- const binomialMod2 = (k, n) => (k & n) === k ? 1 : 0;
- const binomialMod5 = (k, n) => {
- if (k > n) return 0;
- let result = 1;
- const pascalMod5 = [
- [1, 0, 0, 0, 0],
- [1, 1, 0, 0, 0],
- [1, 2, 1, 0, 0],
- [1, 3, 3, 1, 0],
- [1, 4, 1, 4, 1]
- ];
-
- while (k > 0 || n > 0) {
- const ki = k % 5;
- const ni = n % 5;
- if (ki > ni) return 0;
- result = (result * pascalMod5[ni][ki]) % 5;
- k = Math.floor(k / 5);
- n = Math.floor(n / 5);
- }
- return result;
- };
-
- const binomialMod10 = (k, n) => {
- const mod2 = binomialMod2(k, n);
- const mod5 = binomialMod5(k, n);
- for (let i = 0; i < 10; i++) {
- if (i % 2 === mod2 && i % 5 === mod5) return i;
- }
- return 0;
- };
-
- let sum1 = 0;
- let sum2 = 0;
- for (let i = 0; i <= n - 2; i++) {
- const coeff = binomialMod10(i, n - 2);
- sum1 = (sum1 + coeff * +s[i]) % 10;
- sum2 = (sum2 + coeff * +s[i + 1]) % 10;
- }
-
- return sum1 === sum2;
-};
diff --git a/solutions/3464-maximize-the-distance-between-points-on-a-square.js b/solutions/3464-maximize-the-distance-between-points-on-a-square.js
deleted file mode 100644
index 47428649..00000000
--- a/solutions/3464-maximize-the-distance-between-points-on-a-square.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * 3464. Maximize the Distance Between Points on a Square
- * https://leetcode.com/problems/maximize-the-distance-between-points-on-a-square/
- * Difficulty: Hard
- *
- * You are given an integer side, representing the edge length of a square with corners
- * at (0, 0), (0, side), (side, 0), and (side, side) on a Cartesian plane.
- *
- * You are also given a positive integer k and a 2D integer array points, where
- * points[i] = [xi, yi] represents the coordinate of a point lying on the boundary of
- * the square.
- *
- * You need to select k elements among points such that the minimum Manhattan distance
- * between any two points is maximized.
- *
- * Return the maximum possible minimum Manhattan distance between the selected k points.
- *
- * The Manhattan Distance between two cells (xi, yi) and (xj, yj) is |xi - xj| + |yi - yj|.
- */
-
-/**
- * @param {number} squareSide
- * @param {number[][]} coordinates
- * @param {number} pointsToPlace
- * @return {number}
- */
-var maxDistance = function(squareSide, coordinates, pointsToPlace) {
- const pointCount = coordinates.length;
- const positions = new Array(pointCount);
-
- for (let i = 0; i < pointCount; i++) {
- const [x, y] = coordinates[i];
- positions[i] = y === 0 ? x : x === squareSide
- ? squareSide + y
- : y === squareSide
- ? 2 * squareSide + (squareSide - x)
- : 3 * squareSide + (squareSide - y);
- }
- positions.sort((a, b) => a - b);
-
- const perimeter = 4 * squareSide;
- const extendedPositions = new Array(pointCount * 2);
- for (let i = 0; i < pointCount; i++) {
- extendedPositions[i] = positions[i];
- extendedPositions[i + pointCount] = positions[i] + perimeter;
- }
-
- let result = 0;
- let maxDistance = 2 * squareSide;
- while (result < maxDistance) {
- const midDistance = Math.floor((result + maxDistance + 1) / 2);
- if (canPlaceAtDistance(midDistance)) result = midDistance;
- else maxDistance = midDistance - 1;
- }
- return result;
-
- function canPlaceAtDistance(distance) {
- for (let start = 0; start < pointCount; start++) {
- let current = start;
- let lastPos = extendedPositions[start];
- const limit = start + pointCount;
- let valid = true;
-
- for (let placed = 1; placed < pointsToPlace; placed++) {
- const nextTarget = lastPos + distance;
- let left = current + 1;
- let right = limit;
-
- while (left < right) {
- const mid = Math.floor((left + right) / 2);
- if (extendedPositions[mid] < nextTarget) left = mid + 1;
- else right = mid;
- }
-
- if (left === limit) {
- valid = false;
- break;
- }
- current = left;
- lastPos = extendedPositions[current];
- }
-
- if (valid && extendedPositions[start] + perimeter - lastPos >= distance) {
- return true;
- }
- }
- return false;
- }
-};