mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-07 01:44:56 +08:00
Add Biweekly 39 / weekly 215 solutions
This commit is contained in:
56
leetcode/5550/1652. Defuse the Bomb.go
Normal file
56
leetcode/5550/1652. Defuse the Bomb.go
Normal file
@ -0,0 +1,56 @@
|
||||
package leetcode
|
||||
|
||||
func decrypt(code []int, k int) []int {
|
||||
if k == 0 {
|
||||
for i := 0; i < len(code); i++ {
|
||||
code[i] = 0
|
||||
}
|
||||
return code
|
||||
}
|
||||
count, sum, res := k, 0, make([]int, len(code))
|
||||
if k > 0 {
|
||||
for i := 0; i < len(code); i++ {
|
||||
for j := i + 1; j < len(code); j++ {
|
||||
if count == 0 {
|
||||
break
|
||||
}
|
||||
sum += code[j]
|
||||
count--
|
||||
}
|
||||
if count > 0 {
|
||||
for j := 0; j < len(code); j++ {
|
||||
if count == 0 {
|
||||
break
|
||||
}
|
||||
sum += code[j]
|
||||
count--
|
||||
}
|
||||
}
|
||||
res[i] = sum
|
||||
sum, count = 0, k
|
||||
}
|
||||
}
|
||||
if k < 0 {
|
||||
for i := 0; i < len(code); i++ {
|
||||
for j := i - 1; j >= 0; j-- {
|
||||
if count == 0 {
|
||||
break
|
||||
}
|
||||
sum += code[j]
|
||||
count++
|
||||
}
|
||||
if count < 0 {
|
||||
for j := len(code) - 1; j >= 0; j-- {
|
||||
if count == 0 {
|
||||
break
|
||||
}
|
||||
sum += code[j]
|
||||
count++
|
||||
}
|
||||
}
|
||||
res[i] = sum
|
||||
sum, count = 0, k
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
53
leetcode/5550/1652. Defuse the Bomb_test.go
Normal file
53
leetcode/5550/1652. Defuse the Bomb_test.go
Normal file
@ -0,0 +1,53 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type question1652 struct {
|
||||
para1652
|
||||
ans1652
|
||||
}
|
||||
|
||||
// para 是参数
|
||||
// one 代表第一个参数
|
||||
type para1652 struct {
|
||||
code []int
|
||||
k int
|
||||
}
|
||||
|
||||
// ans 是答案
|
||||
// one 代表第一个答案
|
||||
type ans1652 struct {
|
||||
one []int
|
||||
}
|
||||
|
||||
func Test_Problem1652(t *testing.T) {
|
||||
|
||||
qs := []question1652{
|
||||
|
||||
{
|
||||
para1652{[]int{5, 7, 1, 4}, 3},
|
||||
ans1652{[]int{12, 10, 16, 13}},
|
||||
},
|
||||
|
||||
{
|
||||
para1652{[]int{1, 2, 3, 4}, 0},
|
||||
ans1652{[]int{0, 0, 0, 0}},
|
||||
},
|
||||
|
||||
{
|
||||
para1652{[]int{2, 4, 9, 3}, -2},
|
||||
ans1652{[]int{12, 5, 6, 13}},
|
||||
},
|
||||
}
|
||||
|
||||
fmt.Printf("------------------------Leetcode Problem 1652------------------------\n")
|
||||
|
||||
for _, q := range qs {
|
||||
_, p := q.ans1652, q.para1652
|
||||
fmt.Printf("【input】:%v 【output】:%v \n", p, decrypt(p.code, p.k))
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package leetcode
|
||||
|
||||
func minimumDeletions(s string) int {
|
||||
ai, bi, sum, temp, array := 0, 0, 0, 0, []int{}
|
||||
for ai = 0; ai < len(s); ai++ {
|
||||
if s[ai] == 'a' {
|
||||
break
|
||||
}
|
||||
}
|
||||
if ai != 0 && ai != len(s) {
|
||||
sum += ai
|
||||
}
|
||||
for bi = ai; bi < len(s); bi++ {
|
||||
if s[bi] == 'b' {
|
||||
break
|
||||
}
|
||||
}
|
||||
if s[bi-1] == 'a' {
|
||||
ai = bi - 1
|
||||
}
|
||||
if s[bi-1] == 'b' && bi != len(s) {
|
||||
ai = bi + 1
|
||||
}
|
||||
for j := bi; j < len(s); j++ {
|
||||
if s[j] == 'b' {
|
||||
temp++
|
||||
}
|
||||
if s[j] == 'a' && temp != 0 {
|
||||
array = append(array, temp)
|
||||
temp = 0
|
||||
}
|
||||
}
|
||||
if len(array) == 0 {
|
||||
return sum
|
||||
}
|
||||
dp := make([]int, len(array))
|
||||
dp[0] = min(array[0], len(array))
|
||||
for i := 1; i < len(array); i++ {
|
||||
dp[i] = min(dp[i-1]+array[i], dp[i-1]+len(array)-(i+1)+1)
|
||||
}
|
||||
return sum + dp[len(array)-1]
|
||||
}
|
||||
|
||||
func min(a int, b int) int {
|
||||
if a > b {
|
||||
return b
|
||||
}
|
||||
return a
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type question1649 struct {
|
||||
para1649
|
||||
ans1649
|
||||
}
|
||||
|
||||
// para 是参数
|
||||
// one 代表第一个参数
|
||||
type para1649 struct {
|
||||
s string
|
||||
}
|
||||
|
||||
// ans 是答案
|
||||
// one 代表第一个答案
|
||||
type ans1649 struct {
|
||||
one int
|
||||
}
|
||||
|
||||
func Test_Problem1649(t *testing.T) {
|
||||
|
||||
qs := []question1649{
|
||||
|
||||
// {
|
||||
// para1649{"aababbab"},
|
||||
// ans1649{2},
|
||||
// },
|
||||
|
||||
// {
|
||||
// para1649{"bbaaaaabb"},
|
||||
// ans1649{2},
|
||||
// },
|
||||
|
||||
{
|
||||
para1649{"b"},
|
||||
ans1649{0},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"ababaaaabbbbbaaababbbbbbaaabbaababbabbbbaabbbbaabbabbabaabbbababaa"},
|
||||
ans1649{25},
|
||||
},
|
||||
}
|
||||
|
||||
fmt.Printf("------------------------Leetcode Problem 1649------------------------\n")
|
||||
|
||||
for _, q := range qs {
|
||||
_, p := q.ans1649, q.para1649
|
||||
fmt.Printf("【input】:%v 【output】:%v \n", p, minimumDeletions(p.s))
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
42
leetcode/5601/5601. Design an Ordered Stream.go
Normal file
42
leetcode/5601/5601. Design an Ordered Stream.go
Normal file
@ -0,0 +1,42 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type OrderedStream struct {
|
||||
ptr int
|
||||
stream []string
|
||||
}
|
||||
|
||||
func Constructor(n int) OrderedStream {
|
||||
ptr, stream := 1, make([]string, n+1)
|
||||
return OrderedStream{ptr: ptr, stream: stream}
|
||||
}
|
||||
|
||||
func (this *OrderedStream) Insert(id int, value string) []string {
|
||||
this.stream[id] = value
|
||||
res := []string{}
|
||||
fmt.Printf("%v %v %v\n", this.ptr, id, value)
|
||||
if this.ptr == id || this.stream[this.ptr] != "" {
|
||||
res = append(res, this.stream[this.ptr])
|
||||
for i := id + 1; i < len(this.stream); i++ {
|
||||
if this.stream[i] != "" {
|
||||
res = append(res, this.stream[i])
|
||||
} else {
|
||||
this.ptr = i
|
||||
return res
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(res) > 0 {
|
||||
return res
|
||||
}
|
||||
return []string{}
|
||||
}
|
||||
|
||||
/**
|
||||
* Your OrderedStream object will be instantiated and called as such:
|
||||
* obj := Constructor(n);
|
||||
* param_1 := obj.Insert(id,value);
|
||||
*/
|
21
leetcode/5601/5601. Design an Ordered Stream_test.go
Normal file
21
leetcode/5601/5601. Design an Ordered Stream_test.go
Normal file
@ -0,0 +1,21 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_Problem707(t *testing.T) {
|
||||
obj := Constructor(5)
|
||||
fmt.Printf("obj = %v\n", obj)
|
||||
param1 := obj.Insert(3, "ccccc")
|
||||
fmt.Printf("param_1 = %v obj = %v\n", param1, obj)
|
||||
param1 = obj.Insert(1, "aaaaa")
|
||||
fmt.Printf("param_1 = %v obj = %v\n", param1, obj)
|
||||
param1 = obj.Insert(2, "bbbbb")
|
||||
fmt.Printf("param_1 = %v obj = %v\n", param1, obj)
|
||||
param1 = obj.Insert(5, "eeeee")
|
||||
fmt.Printf("param_1 = %v obj = %v\n", param1, obj)
|
||||
param1 = obj.Insert(4, "ddddd")
|
||||
fmt.Printf("param_1 = %v obj = %v\n", param1, obj)
|
||||
}
|
88
leetcode/5603/5603. Determine if Two Strings Are Close.go
Normal file
88
leetcode/5603/5603. Determine if Two Strings Are Close.go
Normal file
@ -0,0 +1,88 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
func closeStrings(word1 string, word2 string) bool {
|
||||
if len(word1) != len(word2) {
|
||||
return false
|
||||
}
|
||||
freqWord1, freq1, freqList1, freqWord2, freq2, freqList2, flag := map[byte]int{}, []int{}, map[int][]byte{}, map[byte]int{}, []int{}, map[int][]byte{}, false
|
||||
for i := 0; i < len(word1); i++ {
|
||||
freqWord1[word1[i]]++
|
||||
}
|
||||
for i := 0; i < len(word2); i++ {
|
||||
freqWord2[word2[i]]++
|
||||
}
|
||||
freqTemp1 := map[int]int{}
|
||||
for k, v := range freqWord1 {
|
||||
freqTemp1[v]++
|
||||
if list, ok := freqList1[v]; ok {
|
||||
list = append(list, k)
|
||||
freqList1[v] = list
|
||||
} else {
|
||||
list := []byte{}
|
||||
list = append(list, k)
|
||||
freqList1[v] = list
|
||||
}
|
||||
}
|
||||
for _, v := range freqTemp1 {
|
||||
freq1 = append(freq1, v)
|
||||
}
|
||||
freqTemp2 := map[int]int{}
|
||||
for k, v := range freqWord2 {
|
||||
freqTemp2[v]++
|
||||
if list, ok := freqList2[v]; ok {
|
||||
list = append(list, k)
|
||||
freqList2[v] = list
|
||||
} else {
|
||||
list := []byte{}
|
||||
list = append(list, k)
|
||||
freqList2[v] = list
|
||||
}
|
||||
}
|
||||
for _, v := range freqTemp2 {
|
||||
freq2 = append(freq2, v)
|
||||
}
|
||||
if len(freq1) != len(freq2) {
|
||||
return false
|
||||
}
|
||||
sort.Ints(freq1)
|
||||
sort.Ints(freq2)
|
||||
for i := 0; i < len(freq1); i++ {
|
||||
if freq1[i] != freq2[i] {
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if flag == true {
|
||||
return false
|
||||
}
|
||||
flag = false
|
||||
// 频次相同,再判断字母交换是否合法存在
|
||||
for k, v := range freqWord1 {
|
||||
if list, ok := freqList2[v]; ok {
|
||||
for i := 0; i < len(list); i++ {
|
||||
if list[i] != k && list[i] != '0' {
|
||||
// 交换的字母不存在
|
||||
if _, ok := freqWord1[list[i]]; !ok {
|
||||
flag = true
|
||||
break
|
||||
} else {
|
||||
// 交换的字母存在,重置这一位,代表这一个字母被交换了,下次不用它
|
||||
list[i] = '0'
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 出现频次个数相同,但是频次不同
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if flag == true {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type question1649 struct {
|
||||
para1649
|
||||
ans1649
|
||||
}
|
||||
|
||||
// para 是参数
|
||||
// one 代表第一个参数
|
||||
type para1649 struct {
|
||||
word1 string
|
||||
word2 string
|
||||
}
|
||||
|
||||
// ans 是答案
|
||||
// one 代表第一个答案
|
||||
type ans1649 struct {
|
||||
one bool
|
||||
}
|
||||
|
||||
func Test_Problem1649(t *testing.T) {
|
||||
|
||||
qs := []question1649{
|
||||
|
||||
{
|
||||
para1649{"abc", "bca"},
|
||||
ans1649{true},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"a", "aa"},
|
||||
ans1649{false},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"cabbba", "abbccc"},
|
||||
ans1649{true},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"cabbba", "aabbss"},
|
||||
ans1649{false},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"uau", "ssx"},
|
||||
ans1649{false},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"uuukuuuukkuusuususuuuukuskuusuuusuusuuuuuuk", "kssskkskkskssskksskskksssssksskksskskksksuu"},
|
||||
ans1649{false},
|
||||
},
|
||||
}
|
||||
|
||||
fmt.Printf("------------------------Leetcode Problem 1649------------------------\n")
|
||||
|
||||
for _, q := range qs {
|
||||
_, p := q.ans1649, q.para1649
|
||||
fmt.Printf("【input】:%v 【output】:%v \n", p, closeStrings(p.word1, p.word2))
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
Reference in New Issue
Block a user