腾讯云授权服务中心
五万用户的选择,您身边的云计算顾问
发布日:2021-11-20 14:32 阅读数:
package main import ( "fmt" "math/rand" "sort" "strings" "time" ) func binFind(data []string, item string) int { if len(data) == 0 { return -1 } i, j := 0, len(data)-1 //双指针,注意j的值为末尾下标,不是长度 for { mid := (i + j) / 2 //此处需要向下取整,Go默认。其他语言需要注意 result := strings.Compare(item, data[mid]) if result == 0 { return mid } if result < 0 { j = mid - 1 //注意让出边界值 } else { i = mid + 1 // 注意让出边界值 } if i > j { //不能用i与j break } } return -1 } func main() { var length int = 20000 codeGen := "abcdefghijklmnopgrstuvwxyz1234567890" codeGroup := make([]string, length, length) codeOrderedGroup := make([]string, length, length) codeIndex := make(map[string]int) for j := 0; j < length; j++ { code := "" randomLen := rand.Intn(8) + 2 for i := 0; i < randomLen; i++ { random := rand.Intn(len(codeGen) - 1) code = code + codeGen[random:random+1] } codeGroup[j] = code codeOrderedGroup[j] = code } sort.Strings(codeOrderedGroup) for k, v := range codeOrderedGroup { prefix := v[0:2] index, ok := codeIndex[prefix] if ok { codeIndex[prefix] = index&0xFFFF0000 + k } else { codeIndex[prefix] = k<<16 + k } } now := time.Now().UnixNano() //以下将随机排列数组中的字符串转换为int形的方式 for _, v := range codeGroup { prefix := v[0:2] index := codeIndex[prefix] startIndex := index >> 16 endIndex := index & 0x0000FFFF subcodeGroup := codeOrderedGroup[startIndex : endIndex+1] result := binFind(subcodeGroup, v) //binFind(subcodeGroup, v) fmt.Println(result+startIndex, v) } fmt.Println(time.Now().UnixNano() - now) }
编辑:航网科技 来源:腾讯云
本文版权归原作者所有 转载请注明出处
Copyright © 2011-2020 www.hangw.com. All Rights Reserved 深圳航网科技有限公司 版权所有 增值电信业务经营许可证:粤B2-20201122 - 粤ICP备14085080号
微信扫一扫咨询客服
全国免费服务热线
0755-36300002