1
<= a.length, b.length <=
10000
c++ 函式形式為:vector
wordsubsets
(vector
& a, vector
& b)
此題**於leetcode
查詢單詞問題,首選仿造的雜湊表,只需要對a的每個單詞,在b中遍歷所有的單詞,看是否滿足就行了。
class
solution
for(k=
0;ksize()
;k++
)else
break;}
if(h==b[k]
.size()
)continue
;else
break;}
if(k==b.
size()
) result.
push_back
(a[i]);
else
continue;}
return result;}}
;
這段**並沒有錯誤,但是實在是太暴力了,因為已經達到o(n^3)
了,當然沒有通過。
於是思考怎麼優化。。。。。。
首先想得是怎麼把這個三層迴圈變成二層迴圈,二層肯定是必須得,因為必須遍歷到a中得所有單詞嘛,所有目光就投向了b陣列。
題目的意思是如果b中每個單詞都是a中乙個單詞的子集的話,那麼a中的那個單詞就算是乙個通用單詞,所有我們可以找辦法一次性,將b中的單詞合起來,何a中的乙個單詞比較。
因為上面暴力比較的核心就是每個單詞出現的次數,所以我們組合起來的那個b單詞,應該包含每個小單詞中字元出現次數最高的那個字元。
這個在b中小單詞**現次數最高的字元就是特徵字元,因為只要單詞中這個字元的數量都匹配了,那麼其餘小單詞肯定是匹配的。
這種思想,叫做特徵思想。
這樣我們就可以把乙個記憶體的迴圈轉變為外層的迴圈,而且因為每個單詞的字元都小於10,所以可以忽略不計,時間複雜度接近o(n)
。
class
solution
for(m =
0; m <
26; m++)}
for(i =
0; i < a.
size()
; i++
)for
(m =
0; m <
26; m++)if
(m ==
26) result.
push_back
(a[i]);
}return result;}}
;
atfwus --writing by 2020–03–18
子集和問題 基於dfs的回溯思想
子集和問題 description 子集和問題的乙個例項為 s,t 其中,s 是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得 試設計乙個解子集和問題的回溯法。對於給定的正整數的集合s 和正整數c,計算s 的乙個子集s1,使得 input 輸入資料的第1 行有2 個正...
運用CS LBP提取裂紋的梯度特徵
目前對cs lbp 的理解是cs lbp只能描述電池片裂紋的梯度特徵 cs lbp值的大小代表的是方向,每乙個值出現的頻率代表的大小。cs lbp作為一種特徵描述的方法,所提取的特徵向量維數小,並且對銻度變化響應明顯,這也就是為什莫選用它作為裂紋特徵提取主要原因。而缺點只能描述梯度特徵,一旦雜訊干擾...
物件導向思想的三大特徵
封裝性 繼承性 多型性 二 繼承性 問題 為什麼有繼承這個概念?例如我們建立乙個學生類 student 教師類 teacher 家長類 parent 這三個類中都會有的屬性 姓名 年齡 性別等等 這三個類中都會有的方法有 走路 吃飯 睡覺等等。如果建立完成這三個類,那麼這些重複的屬性和方法就會重複,...