1790. 僅執(zhí)行一次字符串交換能否使兩個(gè)字符串相等-簡(jiǎn)單
題目描述:
給你長(zhǎng)度相等的兩個(gè)字符串 s1 和 s2 。一次 字符串交換 操作的步驟如下:選出某個(gè)字符串中的兩個(gè)下標(biāo)(不必不同),并交換這兩個(gè)下標(biāo)所對(duì)應(yīng)的字符。
如果對(duì) 其中一個(gè)字符串 執(zhí)行 最多一次字符串交換 就可以使兩個(gè)字符串相等,返回 true ;否則,返回 false 。
題解:
前面做過(guò)一道和這個(gè)題一樣的,區(qū)別就是那個(gè)題必須強(qiáng)制交換一次,所以相等的時(shí)候返回值不一樣,其他一模一樣
代碼(Go):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-464554.html
func areAlmostEqual(s1 string, s2 string) bool {
if s1 == s2{
return true
}
if len(s1) != len(s2){
return false
}
temp := 0
p,q := 0,0
for i := 0;i < len(s1);i++{
if s1[i] != s2[i]{
temp++
if temp == 1{
p = i
}else{
q = i
}
}
if temp > 2{
return false
}
}
if temp == 2{
if s1[p] == s2[q] && s1[q] == s2[p]{
return true
}
}
return false
}
1800. 最大升序子數(shù)組和-簡(jiǎn)單
題目描述:
給你一個(gè)正整數(shù)組成的數(shù)組 nums ,返回 nums 中一個(gè) 升序 子數(shù)組的最大可能元素和。
子數(shù)組是數(shù)組中的一個(gè)連續(xù)數(shù)字序列。
已知子數(shù)組 [numsl, numsl+1, …, numsr-1, numsr] ,若對(duì)所有 i(l <= i < r),numsi < numsi+1 都成立,則稱(chēng)這一子數(shù)組為 升序 子數(shù)組。注意,大小為 1 的子數(shù)組也視作 升序 子數(shù)組。
題解:
遍歷一次數(shù)組,遇到降序就從零開(kāi)始計(jì)算temp,遇到升序就累加到temp中,最后比較temp與max的大小,把大數(shù)保存起來(lái)??戳斯俜筋}解才發(fā)現(xiàn)這是動(dòng)態(tài)規(guī)劃的思想
代碼(Go):
func maxAscendingSum(nums []int) int {
temp := nums[0]
max := temp
for i := 1;i < len(nums);i++{
if nums[i] > nums[i - 1]{
temp += nums[i]
}else{
temp = nums[i]
}
if temp > max{
max = temp
}
}
return max
}
1748. 唯一元素的和-簡(jiǎn)單
題目描述:
給你一個(gè)整數(shù)數(shù)組 nums 。數(shù)組中唯一元素是那些只出現(xiàn) 恰好一次 的元素。
請(qǐng)你返回 nums 中唯一元素的 和 。
題解:
哈希表記錄出現(xiàn)次數(shù),遍歷哈希表將出現(xiàn)次數(shù)為1的數(shù)加起來(lái)。官方題解還可以再優(yōu)化,遍歷數(shù)組時(shí)第一次遇到一個(gè)數(shù)就加起來(lái),如果后續(xù)再遇到這個(gè)數(shù)就減掉,這個(gè)方法只需要遍歷一次數(shù)組不需要遍歷哈希表
代碼(Go):
func sumOfUnique(nums []int) int {
dict := map[int]int{}
for _,v := range nums{
if _,ok := dict[v];ok{
dict[v]++
}else{
dict[v] = 1
}
}
sum := 0
for i,v := range dict{
if v == 1{
sum += i
}
}
return sum
}
1110. 刪點(diǎn)成林-中等
題目描述:
給出二叉樹(shù)的根節(jié)點(diǎn) root,樹(shù)上每個(gè)節(jié)點(diǎn)都有一個(gè)不同的值。
如果節(jié)點(diǎn)值在 to_delete 中出現(xiàn),我們就把該節(jié)點(diǎn)從樹(shù)上刪去,最后得到一個(gè)森林(一些不相交的樹(shù)構(gòu)成的集合)。
返回森林中的每棵樹(shù)。你可以按任意順序組織答案。
題解:
判斷節(jié)點(diǎn)是否需要被刪除如果需要被刪除,則遞歸判斷它的兩個(gè)子節(jié)點(diǎn),并且兩個(gè)子節(jié)點(diǎn)可能加入節(jié)點(diǎn)序列,若不需要?jiǎng)h除依舊遞歸遍歷它的兩個(gè)子節(jié)點(diǎn),但是子節(jié)點(diǎn)不能加入節(jié)點(diǎn)序列
代碼(Go):
func delNodes(root *TreeNode, to_delete []int) []*TreeNode {
re := []*TreeNode{}
var delNode func(root *TreeNode,to_delete []int,add int)
delNode = func(root *TreeNode,to_delete []int,add int){
if inDelete(root.Val,to_delete){
if root.Left != nil{
delNode(root.Left,to_delete,1)
}
if root.Right != nil{
delNode(root.Right,to_delete,1)
}
}else{
if root.Left != nil{
delNode(root.Left,to_delete,0)
if inDelete(root.Left.Val,to_delete){
root.Left = nil
}
}
if root.Right != nil{
delNode(root.Right,to_delete,0)
if inDelete(root.Right.Val,to_delete){
root.Right = nil
}
}
if add == 1{
re = append(re,root)
}
}
}
delNode(root,to_delete,1)
return re
}
func inDelete(i int,to_delete []int) bool {
for _,v := range to_delete{
if v == i{
return true
}
}
return false
}
總結(jié)
簡(jiǎn)單題提交數(shù)1000以上的題已經(jīng)做遍了,接下來(lái)還有一些重復(fù)的題和提交數(shù)比較少的題,本來(lái)是想的開(kāi)始一天兩道中等題,但是最近比較忙,所以先繼續(xù)一天3道,等忙完這陣就開(kāi)始加到兩道中等題文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-464554.html
到了這里,關(guān)于從零開(kāi)始的力扣刷題記錄-第四十二天的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!