第 190 场力扣周赛
生活随笔
收集整理的這篇文章主要介紹了
第 190 场力扣周赛
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2020-05-24
5416. 檢查單詞是否為句中其他單詞的前綴 注意這里的前綴是指單詞的開始,我們首先找到單詞的開始,然后判斷其長度為searchword的子串是否等于searchword即可。 class Solution { public:int isPrefixOfWord(string sentence, string searchWord) {int l1=sentence.length();int l2=searchWord.length();if (!l1||!l2) return 0; // 特殊情況判斷int word=1;for (int i=0;i<=l1-l2;i++){if ((i==0&&sentence[i]!=' ')||(i-1>0&&sentence[i-1]==' '&&sentence[i]!=' ')){// 找到單詞的開始if (sentence.substr(i,l2)==searchWord){return word;}word++;}}return -1;} }; 5417. 定長子串中元音的最大數目 1.暴力判斷,時間復雜度為O(s.length()*k),超時 2.使用滑動窗口即可 class Solution { public:int maxVowels(string s, int k) {int l=s.length();if (!l) return 0;int res=0;int cnt=0;vector<bool>vec(l,false); // 存放是不是元音字母for (int i=0;i<l;i++){if (s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u'){ vec[i]=true;}}queue<int> myque;for (int i=0;i<k;i++){if (vec[i]) cnt++;}if (cnt==k) return k;res=cnt;for (int i=k;i<l;i++){if (vec[i]) cnt++;if (vec[i-k]) cnt--;res=max(res,cnt);if (res>=k) return k;}if (res>=k) return k;return res;} }; 5418. 二叉樹中的偽回文路徑 使用深度優先搜索即可,到葉子節點的時候判斷是否是偽回文路徑,由于數字范圍是0-9, 1. 可以使用vector存放當前路徑上的數值,到葉子節點時判斷vector中是否最多只有一個數值出現一次,可以用 map存放其出現的次數。 2. 使用異或操作,異或操作就是相同為0,不同為1,且n&(n-1)可以消除n二進制表示的最后一個1,由于數字范圍為0-9,我們可以將當前數表示為第幾個二進制位上值為1,比如3:1000,如果所有的數出現的次數是偶數次,那么其異或的結果為0,如果只有一個數出現的次數為奇數次,那么其異或的結果*(其結果-1)就表示把其中的一個1消除了。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class Solution { public:int res=0;int pseudoPalindromicPaths (TreeNode* root) {if (!root) return 0;dfs(root,0);return res;}void dfs(TreeNode* t,int value){value^=(1<<t->val);if (!t->left&&!t->right){ // 如果是葉子節點if (!value||!(value&(value-1))) res++;}if (t->left) dfs(t->left,value);if (t->right) dfs(t->right,value);} }; 5419. 兩個子序列的最大點積 使用動態規劃即可,太久沒有寫,都快生疏了... class Solution { public:int maxDotProduct(vector<int>& nums1, vector<int>& nums2) {int l1=nums1.size();int l2=nums2.size();vector<vector<int>> dp(l1+1,vector<int>(l2+1,-100000*500));for (int i=1;i<=l1;i++){for (int j=1;j<=l2;j++){int a=nums1[i-1];int b=nums2[j-1];dp[i][j]=a*b;dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a*b);dp[i][j]=max(dp[i][j],dp[i-1][j-1]);dp[i][j]=max(dp[i][j],dp[i-1][j]);dp[i][j]=max(dp[i][j],dp[i][j-1]);}}return dp[l1][l2];} };總結
以上是生活随笔為你收集整理的第 190 场力扣周赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux df du命令
- 下一篇: Windows10 UWP开发 - 响应