Golang演算法題目小計
阿新 • • 發佈:2018-12-11
1 請符合兩數之和的索引
給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 第一種實現:暴力破解法
func twoSum(nums []int, target int) []int { length := len(nums) for i:=0;i<length;i++{ for j:=i+1;j<length;j++{ if t := nums[i]+nums[j];t==target{ return []int{i,j} } } } return []int{} }
第二種:利用map時間複雜度O(1)大資料時候更為明顯
func Getk(nums []int,val int)[]int{
length := len(nums)
mymap := make(map[int]int,length)
for i,v := range nums {
mymap[v] = i
}
for i,v := range nums {
yu := val - v
if k,ok := mymap[yu];ok {
return []int{i,k}
}
}
return []int{}
}
第三種:減少n次遍歷
func Getk2(nums []int,val int)[]int{ length := len(nums) mymap := make(map[int]int,length) for i,v := range nums { yu := val-v if vl,ok := mymap[yu];ok{ return []int{vl,i} }else{ mymap[v]=i } } return []int{} }
2、找出不重複最多字串位數
hello := "abcabbacdaftgsya"
ci := 0
jj := 0
mp := make(map[int32]int32)
for _,v := range hello{
if _,ok := mp[v];!ok {
mp[v]=v
ci++
}else{
mp = make(map[int32]int32)
mp[v]=v
if ci > jj {
jj = ci
}
ci = 1
}
}
return ci