add new solutions

This commit is contained in:
Yiyang Kang 2026-02-09 10:55:02 +09:00
parent 51975f3386
commit 489fa73880
Signed by: kkyy
SSH key fingerprint: SHA256:lJSbAzC3MvrSORdvIVK6h/3g+rVKJNzM7zq0MgA9WKY
13 changed files with 437 additions and 3 deletions

View file

@ -0,0 +1,33 @@
package q3634
import "slices"
const INF int = 1<<63 - 1
func minRemoval(nums []int, k int) int {
slices.Sort(nums)
minRem := INF
for i := 0; i < min(len(nums), minRem); i++ {
if i > 0 && nums[i] == nums[i-1] {
continue
}
target := nums[i] * k
l, r := i, len(nums)
for l < r {
m := (l + r) / 2
switch {
case nums[m] > target:
r = m
default:
l = m + 1
}
}
minRem = min(minRem, i+len(nums)-l)
}
return minRem
}
var _ = minRemoval

View file

@ -0,0 +1,33 @@
package q3637
func isTrionic(nums []int) bool {
turns := 0
isInc := true
for i := 1; i < len(nums); i++ {
if i == 1 && nums[i] < nums[i-1] {
return false
}
switch {
case nums[i] == nums[i-1]:
return false
case nums[i] > nums[i-1]:
if !isInc {
isInc = true
turns++
}
case nums[i] < nums[i-1]:
if isInc {
isInc = false
turns++
}
}
if turns > 2 {
return false
}
}
return turns == 2
}
var _ = isTrionic

View file

@ -0,0 +1,59 @@
package q3640
import "math"
type node struct {
pos int
dir int8
}
const (
NEUTRAL int8 = iota
ASCEND
DESCEND
)
func maxSumTrionic(nums []int) int64 {
nodes := [4]node{}
pfSum := make([]int, len(nums)+1) // prefix sum
pfSum[1] = nums[0]
var maxSum = math.MinInt
var currentDir int8
for i := 1; i < len(nums); i++ {
switch {
case nums[i] == nums[i-1]:
currentDir = NEUTRAL
case nums[i] < nums[i-1]:
currentDir = DESCEND
default:
currentDir = ASCEND
}
if currentDir != nodes[3].dir {
nodes[0], nodes[1], nodes[2] = nodes[1], nodes[2], nodes[3]
nodes[3] = node{
pos: i,
dir: currentDir,
}
for j := nodes[0].pos + 1; j < nodes[1].pos; j++ {
if pfSum[j] < pfSum[nodes[0].pos] {
nodes[0].pos = j
}
}
} else {
nodes[3].pos = i
}
pfSum[i+1] = nums[i] + pfSum[i]
if nodes[1].dir == ASCEND && nodes[2].dir == DESCEND && nodes[3].dir == ASCEND {
curSum := pfSum[i+1] - pfSum[nodes[0].pos]
maxSum = max(curSum, maxSum)
}
}
return int64(maxSum)
}
var _ = maxSumTrionic