leetcode 演算法題golang

2021-10-10 23:18:08 字數 2992 閱讀 1331

dic[s[j]] = j // 雜湊表記錄索引

length = maxnum(length, j-i) // 更新結果

} return length

}func maxnum(m, n int) int else

}第一種解法:先排序再掃瞄。從排好序的陣列進行遍歷,記錄當前位置與其之前位置的數進行比較,若相等則輸出該數。時間複雜度:o(nlogn);空間複雜度o(1)第二種解法:對陣列進行遍歷,每次判斷雜湊表中是否含有該元素,若有,輸出此元素。若最後雜湊表中的元素數量與陣列中的相同,表面無重複資料。時間複雜度:o(n);空間複雜度o(n)

時間複雜度必須是o(n),並且空間複雜度為o(1)的條件

第三種解法:

答案是使用 位操作bit operation 來解此題。

將所有元素做異或運算,即a[1] ⊕ a[2] ⊕ a[3] ⊕ …⊕ a[n],所得的結果就是那個只出現一次的數字,時間複雜度為o(n)。

go 位運算

用於運算構成整數的每個二進位制位,就是位上0,1的運算。

package main

import (

"fmt"

)func main()

solonumber(nums)

}func solonumber(nums int) (solo int)

fmt.println("solo", solo)

return solo

}編譯輸出:

>>solo 3

給定兩個字串st,它們只包含小寫字母。

字串t由字串s隨機重排,然後在隨機位置新增乙個字母。

請找出在t中被新增的字母。

示例 1:

輸入:s = "abcd", t = "abcde"

輸出:"e"

解釋:'e' 是那個被新增的字母。

示例 2:

輸入:s = "", t = "y"

輸出:"y"

示例 3:

輸入:s = "a", t = "aa"

輸出:"a"

示例 4:

輸入:s = "ae", t = "aea"

輸出:"a"

知識點:不同編碼方式1個英文本母佔的位元組是不同的:

1.ascii碼:英文本dao母(無大小寫)佔乙個zhuan位元組的空間,中shu文字元佔兩個位元組的空間。

2.utf-8編碼:乙個英文本元等於乙個位元組,乙個中文(含繁體)等於三個位元組。中文的標點符號需要三個位元組,英文的標點符號需要乙個位元組。go使用(utf-8編碼)

3.unicode編碼:英文編碼是兩個位元組,中文編碼是兩個位元組。標點符號在漢語中佔兩個位元組,在英語中佔兩個位元組。

func findthedifference(s, t string) string 

var diff byte

for i := range s

val := int(diff ^ t[len(t)-1])

alphabet := letterascii[val]

return alphabet

}

測試:

fmt.println(findthedifference("afvvvvb", "hafvvvvb"))

>>h

方法二:求和

將字串 s 中每個字元的 ascii 碼的值求和,得到 as;對字串 t 同樣的方法得到 a t。兩者的差值 at_as 

即代表了被新增的字元。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

示例: 給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

func main() 

target := 9

fmt.println(twonum(nums, target))

}func twonum(nums int, target int) int

for i, x := range nums

} hashtable[x] = i

} return nil

}

思路:首先,遍歷字串,統計每個字元出現的頻率,並存入map中。然後,再次遍歷字串串中的字元,如果該字元出現頻率為1,return該字元的索引。如果不存在則返回-1.

count := map[rune]int{}

//統計每個字母的出現的次數,存入map

for _, alph := range s

//遍歷字串,判斷其頻率是否==1,如果是return索引,否則返回-1

for index, v := range s

} return -1}

leetcode之140單詞拆分 Golang

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 示例 1 輸入 s catsanddog worddict cat cats and sand dog 輸出 cats and dog ...

leetcode之162尋找峰值Golang

峰值元素是指其值大於左右相鄰值的元素。給定乙個輸入陣列nums,其中nums i nums i 1 找到峰值元素並返回其索引。陣列可能包含多個峰值,在這種情況下,返回任何乙個峰值所在位置即可。你可以假設nums 1 nums n 示例 1 輸入 nums 1,2,3,1 輸出 2 解釋 3 是峰值元...

leetcode之204計數質數Golang

統計所有小於非負整數n的質數的數量。示例 1 輸入 n 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 示例 2 輸入 n 0 輸出 0示例 3 輸入 n 1 輸出 0 如果用暴力破解,那麼毫無疑問會超時,從題解中知道了乙個叫厄拉多塞篩法的方法 func countp...