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
給定兩個字串s和t,它們只包含小寫字母。
字串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...