從4個方面考慮
s1==s2,直接true
s1和s2裡只有乙個位置不同,返回false
s1和s2裡有兩個位置不同,swap後,s1==s2,返回true
s1和s2裡有多於兩個位置不同,swap後,不能保證s1==s2,返回false
class
solution
int length = s1.
length()
;int p1 =-1
, p2 =-1
, count =0;
char
c1 = s1.
tochararray()
, c2 = s2.
tochararray()
;for
(int i =
0; i < length; i++
)else
if(count ==2)
else}}
if(p1 !=-1
&& p2 !=-1
)else
return
newstring
(c1)
.equals
(new
string
(c2));
}}
記錄所有的邊集結點的出現次數,最後統計次數等於n的,就是中心節點。
class
solution
for(
int i =
0; i <
100001
; i++)}
return0;
}}
看題解看到乙個偷懶的寫法,思路還是很巧妙的。
class
solution
}
選擇班級的時候,要保證,放入聰明學生的這個班級,比其他所有班級放入聰明學生通過率增高的多,才能使最後的平均通過率最大。
乙個班級,放入乙個聰明學生,增長率是pas
s+
1.0tot
al
+1.0
−1.0×p
asst
otal
\frac-\frac
total+
1.0p
ass+
1.0
−tot
al1.
0×pa
ss。
再看extrastudents的資料範圍1≤e
xtra
stud
ents
≤105
1 \le extrastudents \le 10^
1≤extr
astu
dent
s≤10
5。用優先佇列維護通過率的增長率,每次把乙個聰明學生放入班級。
注意用double,因為浮點數會有誤差。
class
solution
else
if(o1.rate > o2.rate)
else})
;for
(int
c : classes)
while
(extrastudents >0)
double total =0;
while
(!priorityqueue.
isempty()
)return total / classes.length;
}classt}
}
具體解釋寫在**的注釋裡了,思路還是比較直接的。
class
solution
while
(right <= length -
1&& nums[right]
>= nums[k]
)// 此時nums[left]和nums[right]都小於nums[k]了,在計算result的時候,要把left和right位置都減掉,不能算在內
// 下一步需要更新nums[k]了,在更新之前,求一次當前的最大值
result = math.
max(result, nums[k]
*(right - left +1-
2));
if(left <
0&& right > length -1)
if(left >=
0&& right <= length -1)
else
if(left <0)
else
}return result;
}}
leetcode 第 232 場周賽
第一次成功 ak leetcode 周賽,決定寫篇部落格記錄一下。這場周賽確實相對簡單一些。目錄給你長度相等的兩個字串s1和s2。一次字串交換操作的步驟如下 選出某個字串中的兩個下標 不必不同 並交換這兩個下標所對應的字元。如果對其中乙個字串執行最多一次字串交換就可以使兩個字串相等,返回true 否...
20210314 力扣第 232 場周賽
僅執行一次字串交換能否使兩個字串相等 找出星型圖的中心節點 最大平均通過率 好子陣列的最大分數 僅執行一次字串交換能否使兩個字串相等 翻譯題目即可 找出星型圖的中心節點 關鍵在於清楚這個中心點出現的次數剛好就是點數 1 最大平均通過率 優先佇列存所有的最大通過率,注意加乙個同學到乙個班裡的通過率提公...
leetcode 第132場周賽
愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...