diff --git a/problemset.jsonl b/problemset.jsonl index 1125cd0..83f886f 100644 --- a/problemset.jsonl +++ b/problemset.jsonl @@ -3871,4 +3871,3 @@ {"id":4252,"frontendId":3866,"title":"First Unique Even Element","titleSlug":"first-unique-even-element","difficulty":"EASY","paidOnly":false,"tags":["array","hash-table","counting"]} {"id":4253,"frontendId":3868,"title":"Minimum Cost to Equalize Arrays Using Swaps","titleSlug":"minimum-cost-to-equalize-arrays-using-swaps","difficulty":"MEDIUM","paidOnly":false,"tags":["array","hash-table","greedy","counting"]} {"id":4261,"frontendId":3865,"title":"Reverse K Subarrays","titleSlug":"reverse-k-subarrays","difficulty":"MEDIUM","paidOnly":true,"tags":["array","two-pointers"]} -{"id":4269,"frontendId":3874,"title":"Valid Subarrays With Exactly One Peak","titleSlug":"valid-subarrays-with-exactly-one-peak","difficulty":"MEDIUM","paidOnly":true,"tags":[]} diff --git a/solutions/17/q1727/solution.go b/solutions/17/q1727/solution.go deleted file mode 100644 index b89a2fa..0000000 --- a/solutions/17/q1727/solution.go +++ /dev/null @@ -1,33 +0,0 @@ -// Package q1727 implements a solution for https://leetcode.com/problems/largest-submatrix-with-rearrangements/ -package q1727 - -import "slices" - -func largestSubmatrix(matrix [][]int) int { - maxArea := 0 - - // Count from the bottom the length of all contiguous segments of every column. - for col := range matrix[0] { - ones := 0 - for row := len(matrix) - 1; row >= 0; row-- { - if matrix[row][col] == 0 { - ones = 0 - } else { - ones += 1 - matrix[row][col] = ones - } - } - } - - for _, row := range matrix { - slices.SortFunc(row, func(a, b int) int { return b - a }) - minLen := row[0] - for col := range row { - minLen = min(minLen, row[col]) - maxArea = max(maxArea, minLen*(col+1)) - } - } - return maxArea -} - -var _ = largestSubmatrix diff --git a/solutions/18/q1878/solution.go b/solutions/18/q1878/solution.go deleted file mode 100644 index 3887854..0000000 --- a/solutions/18/q1878/solution.go +++ /dev/null @@ -1,75 +0,0 @@ -// Package q1878 implements a solution for https://leetcode.com/problems/get-biggest-three-rhombus-sums-in-a-grid/ -package q1878 - -import "slices" - -func getBiggestThree(grid [][]int) []int { - w, h := len(grid[0]), len(grid) - sums := make([][][2]int, h) - sums[0] = make([][2]int, w*h) - for s := h - 1; s >= 0; s-- { - sums[s] = sums[0][s*w : (s+1)*w] - } - - for r := range h { - for c := range w { - pR, pC := r-1, c-1 - if pR >= 0 && pC >= 0 { - sums[r][c][0] = sums[pR][pC][0] + grid[r][c] - } else { - sums[r][c][0] = grid[r][c] - } - - pR, pC = r-1, c+1 - if pR >= 0 && pC < w { - sums[r][c][1] = sums[pR][pC][1] + grid[r][c] - } else { - sums[r][c][1] = grid[r][c] - } - } - } - - biggest := []int{0, 0, 0, 0} - var addResult = func(val int) { - for i := 1; i <= 3; i++ { - if biggest[i] == val { - return - } - } - biggest[0] = val - slices.Sort(biggest) - } - - var isValid = func(coord [2]int) bool { - return coord[0] >= 0 && coord[1] >= 0 && coord[0] < h && coord[1] < w - } - - for r := range h { - for c := range w { - addResult(grid[r][c]) - - for edge := 2; ; edge++ { - left := [2]int{r + edge - 1, c - edge + 1} - right := [2]int{r + edge - 1, c + edge - 1} - bottom := [2]int{r + (edge-1)*2, c} - if !isValid(left) || !isValid(right) || !isValid(bottom) { - break - } - - e1 := sums[left[0]][left[1]][1] - sums[r][c][1] - e2 := sums[bottom[0]][bottom[1]][0] - sums[left[0]][left[1]][0] - e3 := sums[bottom[0]][bottom[1]][1] - sums[right[0]][right[1]][1] - e4 := sums[right[0]][right[1]][0] - sums[r][c][0] - addResult(e1 + e2 + e3 + e4 - grid[bottom[0]][bottom[1]] + grid[r][c]) - } - } - } - - for biggest = biggest[1:]; biggest[0] == 0; { - biggest = biggest[1:] - } - slices.Reverse(biggest) - return biggest -} - -var _ = getBiggestThree diff --git a/solutions/23/q2344/solution.go b/solutions/23/q2344/solution.go deleted file mode 100644 index d8a7d44..0000000 --- a/solutions/23/q2344/solution.go +++ /dev/null @@ -1,38 +0,0 @@ -// Package q2344 implements a solution for https://leetcode.com/problems/minimum-deletions-to-make-array-divisible/ -package q2344 - -import "slices" - -func gcd(a, b int) int { - if a < b { - a, b = b, a - } - - for a%b != 0 { - a, b = b, a%b - } - return b -} - -func minOperations(nums []int, numsDivide []int) int { - slices.Sort(nums) - - gcdAll := numsDivide[0] - for _, num := range numsDivide { - gcdAll = gcd(gcdAll, num) - if gcdAll == 1 { - break - } - } - for i := range nums { - if nums[i] > gcdAll { - break - } - if gcdAll%nums[i] == 0 { - return i - } - } - return -1 -} - -var _ = minOperations diff --git a/solutions/30/q3070/solution.go b/solutions/30/q3070/solution.go deleted file mode 100644 index 094b064..0000000 --- a/solutions/30/q3070/solution.go +++ /dev/null @@ -1,28 +0,0 @@ -// Package q3070 implements a solution for https://leetcode.com/problems/count-submatrices-with-top-left-element-and-sum-less-than-k/ -package q3070 - -func countSubmatrices(grid [][]int, k int) int { - cnt := 0 - for r := range grid { - for c := 1; c < len(grid[0]); c++ { - grid[r][c] += grid[r][c-1] - } - } - - for r := range grid { - for c := range grid[0] { - if r > 0 { - grid[r][c] += grid[r-1][c] - } - - if grid[r][c] <= k { - cnt++ - } else { - break - } - } - } - return cnt -} - -var _ = countSubmatrices diff --git a/solutions/32/q3212/solution.go b/solutions/32/q3212/solution.go deleted file mode 100644 index 4bae8b4..0000000 --- a/solutions/32/q3212/solution.go +++ /dev/null @@ -1,52 +0,0 @@ -// Package q3212 implements a solution for https://leetcode.com/problems/count-submatrices-with-equal-frequency-of-x-and-y/ -package q3212 - -type State struct { - x, y, dot uint32 -} - -func (s *State) Add(another *State) { - s.x += another.x - s.y += another.y - s.dot += another.dot -} - -func (s *State) Sub(another *State) { - s.x -= another.x - s.y -= another.y - s.dot -= another.dot -} - -func numberOfSubmatrices(grid [][]byte) int { - cntPrev, cntCur := make([]State, len(grid[0])), make([]State, len(grid[0])) - - submatrices := 0 - for row := range grid { - for col := range grid[0] { - st := State{} - switch grid[row][col] { - case 'X': - st.x = 1 - case 'Y': - st.y = 1 - case '.': - st.dot = 1 - } - - cntCur[col] = st - cntCur[col].Add(&cntPrev[col]) - if col > 0 { - cntCur[col].Add(&cntCur[col-1]) - cntCur[col].Sub(&cntPrev[col-1]) - } - - if cntCur[col].x > 0 && cntCur[col].y == cntCur[col].x { - submatrices++ - } - } - cntPrev, cntCur = cntCur, cntPrev - } - return submatrices -} - -var _ = numberOfSubmatrices diff --git a/solutions/36/q3612/solution.go b/solutions/36/q3612/solution.go deleted file mode 100644 index d063611..0000000 --- a/solutions/36/q3612/solution.go +++ /dev/null @@ -1,25 +0,0 @@ -// Package q3612 implements a solution for https://leetcode.com/problems/process-string-with-special-operations-i/ -package q3612 - -import "slices" - -func processStr(s string) string { - ret := make([]byte, 0, len(s)*2) - - for i := range len(s) { - switch s[i] { - case '*': - ret = ret[:max(len(ret)-1, 0)] - case '#': - ret = append(ret, ret...) - case '%': - slices.Reverse(ret) - default: - ret = append(ret, s[i]) - } - } - - return string(ret) -} - -var _ = processStr diff --git a/solutions/8/q829/solution.go b/solutions/8/q829/solution.go deleted file mode 100644 index 36ebccf..0000000 --- a/solutions/8/q829/solution.go +++ /dev/null @@ -1,22 +0,0 @@ -// Package q829 implements a solution for https://leetcode.com/problems/consecutive-numbers-sum/ -package q829 - -import "math" - -func consecutiveNumbersSum(n int) int { - maxN := int(math.Sqrt(float64(n) * 2)) - for maxN*(maxN+1)/2 <= n { - maxN++ - } - - cnt := 1 - for nNums := maxN - 1; nNums > 1; nNums-- { - start := (n*2/nNums + 1 - nNums) / 2 - if (start+start+nNums-1)*nNums/2 == n { - cnt++ - } - } - return cnt -} - -var _ = consecutiveNumbersSum diff --git a/solutions/8/q852/solution.go b/solutions/8/q852/solution.go deleted file mode 100644 index 8108225..0000000 --- a/solutions/8/q852/solution.go +++ /dev/null @@ -1,17 +0,0 @@ -// Package q852 implements a solution for https://leetcode.com/problems/peak-index-in-a-mountain-array/ -package q852 - -func peakIndexInMountainArray(arr []int) int { - l, r := 0, len(arr)-1 - for l < r { - m := (l + r) / 2 - if arr[m] < arr[m+1] { // incrementing - l = m + 1 - } else { - r = m - } - } - return l -} - -var _ = peakIndexInMountainArray