利用前面的值的和推算后面的值就是前缀和
43
力扣https://leetcode-cn.com/problems/WGki4K/
给你一个整数数组 nums
,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
思路:可以使用map,也可以使用位数,一定出现三次会导致位一定被3整除,剩下的就是多余的值
func singleNumber(nums []int) int {
nummap:=make(map[int]int)
for i:=0;i<len(nums);i++{
nummap[nums[i]]++
}
for k,v:=range nummap{
if v==1{
return k
}
}
return -1
}
44
力扣https://leetcode-cn.com/problems/aseY1I/
给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。
思路:按位与的思路,如果两个单词没有重复单词,那么按位与的结果就是0
func SameMapV2(a,b int)bool{
return a&b>0
}
func maxProduct(words []string) int {
var length int
//每个单词的字符组合
varmap:=make(map[string]int)
for i:=0;i<len(words);i++{
var tmp int
for j:=0;j<len(words[i]);j++{
tmp |= 1<<(words[i][j]-'a')
}
varmap[words[i]] = tmp
for z:=i-1;z>=0;z--{
if !SameMapV2(varmap[words[i]],varmap[words[z]]){
//如果两个单词不重复
tmp := len(words[i])*len(words[z])
if tmp > length{
length