aa
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"crypto/cipher"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -216,16 +217,201 @@ func TestUpdateExpand(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUploadImageNew(t *testing.T) {
|
||||
// data, _, err := DownloadFileByURL("http://image.jxc4.com/image/b90ae8585e8cf2f3871f6e8318bde1dc.tem.png")
|
||||
// accountsMerge([][]string{[]string{
|
||||
// "John", "johnsmith@mail.com", "john00@mail.com",
|
||||
// }, []string{
|
||||
// "John", "johnnybravo@mail.com",
|
||||
// }, []string{
|
||||
// "John", "johnsmith@mail.com", "john_newyork@mail.com",
|
||||
// }, []string{
|
||||
// "Mary", "mary@mail.com",
|
||||
// }})
|
||||
fmt.Println(addToArrayForm([]int{1, 2, 6, 3, 0, 7, 1, 7, 1, 9, 7, 5, 6, 6, 4, 4, 0, 0, 6, 3}, 516))
|
||||
}
|
||||
|
||||
// result, err := api.UploadImageNew(data, "b90ae8585e8cf2f3871f6e8318bde1dc.tem.png")
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
func addToArrayForm(A []int, K int) (a []int) {
|
||||
for k, _ := range A {
|
||||
A[k] = A[len(A)-k]
|
||||
}
|
||||
fmt.Println(A)
|
||||
// for _, v := range result {
|
||||
// if b, err := strconv.Atoi(string(v)); err == nil {
|
||||
// a = append(a, b)
|
||||
// }
|
||||
// }
|
||||
// t.Log(utils.Format4Output(result, false))
|
||||
// str := "京西菜市松林农贸市场.生鲜店"
|
||||
// str2 := str[0:strings.Index(str, ".")] + str[strings.Index(str, ".")+1:len(str)]
|
||||
fmt.Println(2 % 4)
|
||||
return a
|
||||
}
|
||||
|
||||
func maximumProduct(nums []int) int {
|
||||
sort.Ints(nums)
|
||||
n := len(nums)
|
||||
fmt.Println(nums)
|
||||
return max(nums[0]*nums[1]*nums[n-1], nums[n-3]*nums[n-2]*nums[n-1])
|
||||
}
|
||||
|
||||
func max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func accountsMerge(accounts [][]string) (ans [][]string) {
|
||||
emailToIndex := map[string]int{}
|
||||
emailToName := map[string]string{}
|
||||
for _, account := range accounts {
|
||||
name := account[0]
|
||||
for _, email := range account[1:] {
|
||||
if _, has := emailToIndex[email]; !has {
|
||||
emailToIndex[email] = len(emailToIndex)
|
||||
emailToName[email] = name
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(emailToIndex)
|
||||
fmt.Println()
|
||||
|
||||
fmt.Println(emailToName)
|
||||
parent := make([]int, len(emailToIndex))
|
||||
for i := range parent {
|
||||
parent[i] = i
|
||||
}
|
||||
var find func(int) int
|
||||
find = func(x int) int {
|
||||
if parent[x] != x {
|
||||
parent[x] = find(parent[x])
|
||||
}
|
||||
return parent[x]
|
||||
}
|
||||
union := func(from, to int) {
|
||||
parent[find(from)] = find(to)
|
||||
}
|
||||
|
||||
for _, account := range accounts {
|
||||
firstIndex := emailToIndex[account[1]]
|
||||
for _, email := range account[2:] {
|
||||
union(emailToIndex[email], firstIndex)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(parent)
|
||||
fmt.Println()
|
||||
fmt.Println(accounts)
|
||||
|
||||
indexToEmails := map[int][]string{}
|
||||
for email, index := range emailToIndex {
|
||||
index = find(index)
|
||||
indexToEmails[index] = append(indexToEmails[index], email)
|
||||
}
|
||||
fmt.Println(indexToEmails)
|
||||
|
||||
for _, emails := range indexToEmails {
|
||||
sort.Strings(emails)
|
||||
account := append([]string{emailToName[emails[0]]}, emails...)
|
||||
ans = append(ans, account)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func findRedundantConnection(edges [][]int) []int {
|
||||
parent := make([]int, len(edges)+1)
|
||||
for i := range parent {
|
||||
parent[i] = i
|
||||
}
|
||||
fmt.Println("edges ", edges)
|
||||
fmt.Println("parent ", parent)
|
||||
var find func(int) int
|
||||
find = func(x int) int {
|
||||
if parent[x] != x {
|
||||
parent[x] = find(parent[x])
|
||||
}
|
||||
return parent[x]
|
||||
}
|
||||
union := func(from, to int) bool {
|
||||
fmt.Println(from, to)
|
||||
x, y := find(from), find(to)
|
||||
fmt.Println(x, y)
|
||||
if x == y {
|
||||
return false
|
||||
}
|
||||
parent[x] = y
|
||||
fmt.Println(parent)
|
||||
fmt.Println("-------------------------------")
|
||||
return true
|
||||
}
|
||||
for _, e := range edges {
|
||||
if !union(e[0], e[1]) {
|
||||
return e
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func removeStones(stones [][]int) int {
|
||||
fa := map[int]int{}
|
||||
var find func(int) int
|
||||
find = func(x int) int {
|
||||
if _, has := fa[x]; !has {
|
||||
fa[x] = x
|
||||
}
|
||||
if fa[x] != x {
|
||||
fa[x] = find(fa[x])
|
||||
}
|
||||
fmt.Println(fa[x])
|
||||
return fa[x]
|
||||
}
|
||||
union := func(x, y int) {
|
||||
fmt.Println(x, y)
|
||||
fx, fy := find(x), find(y)
|
||||
if fx == fy {
|
||||
return
|
||||
}
|
||||
fa[fy] = fx
|
||||
fmt.Println(fa)
|
||||
}
|
||||
for _, p := range stones {
|
||||
union(p[0], p[1]+10000)
|
||||
}
|
||||
ans := len(stones)
|
||||
for x, fx := range fa {
|
||||
if x == fx {
|
||||
ans--
|
||||
}
|
||||
}
|
||||
return ans
|
||||
}
|
||||
|
||||
//动态规划
|
||||
func maxUncrossedLines(A []int, B []int) (s int) {
|
||||
var dynamic = make([][]int, len(A)+1, len(A)+1)
|
||||
for index := range dynamic {
|
||||
dynamic[index] = make([]int, len(B)+1, len(B)+1) //多创建一列,因为 index = 0 的时候,没有前置匹配
|
||||
}
|
||||
for _, v := range dynamic {
|
||||
fmt.Println(v)
|
||||
}
|
||||
fmt.Println("---------------------")
|
||||
for index, a := range A {
|
||||
for i, b := range B {
|
||||
if a == b {
|
||||
dynamic[index+1][i+1] = dynamic[index][i] + 1
|
||||
for _, v := range dynamic {
|
||||
fmt.Println(v)
|
||||
}
|
||||
fmt.Println("---------------------")
|
||||
} else {
|
||||
dynamic[index+1][i+1] = dynamic[index][i+1]
|
||||
if dynamic[index+1][i+1] < dynamic[index+1][i] {
|
||||
dynamic[index+1][i+1] = dynamic[index+1][i] //判断大小,取大值
|
||||
}
|
||||
for _, v := range dynamic {
|
||||
fmt.Println(v)
|
||||
}
|
||||
fmt.Println("---------------------")
|
||||
}
|
||||
}
|
||||
}
|
||||
return dynamic[len(A)][len(B)]
|
||||
}
|
||||
|
||||
func TestShopList(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user