赞
踩
纪念第一次"AK"(12:02 AK。。。最后一题太蠢了 这么简单个动态规划,找bug找了很久)
leetcode最近周赛好像越来越简单了啊,最后一题的动态规划也不难。
class Solution { public: int isPrefixOfWord(string sentence, string searchWord) { istringstream ss(sentence); string word; int ind = 1; int ans = -1; while(ss>>word) { int N = searchWord.length(); if(strcmp(word.substr(0,N).c_str(),searchWord.c_str())==0) { ans = ind; break; } ind++; } return ans; } };
class Solution { public: int maxVowels(string s, int k) { set<char> vowel; char ch[6] = "aeiou"; for(int i=0;i<5;i++) vowel.insert(ch[i]); int N = s.length(); int maxi = -1; int tmp = 0; for(int i=0;i<k;i++) if(vowel.find(s[i])!=vowel.end()) tmp++; maxi = max(maxi,tmp); for(int i=1;i+k-1<N;i++) { int j = i+k-1; if(vowel.find(s[i-1])!=vowel.end()) tmp--; if(vowel.find(s[j])!=vowel.end()) tmp++; maxi = max(maxi,tmp); } return maxi; } };
/** * 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: vector<vector<int>> paths; void getPath(TreeNode* root, vector<int>& path) { path.push_back(root->val); if(root->left==nullptr&&root->right==nullptr) { paths.push_back(path); } if(root->left) { getPath(root->left,path); } if(root->right) { getPath(root->right,path); } path.pop_back(); } int pseudoPalindromicPaths (TreeNode* root) { vector<int> path; getPath(root,path); int ans = 0; for(auto path:paths) { unordered_map<int,int> m; for(int x:path) { m[x]++; } int N = path.size(); int odd = 0; for(auto it=m.begin();it!=m.end();it++) { if(it->second&1==1) odd++; } if(odd==0||(odd==1&&N&1==1)) ans++; } return ans; } };
dp[i][j]就是数组1前i个 数组2前j个的最大点积
dp[i][j] = max{nums1[i-1]*nums2[j-1], dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+nums1[i-1]*nums2[j-1]}
#define INF 0x3f3f3f3f; class Solution { public: int maxDotProduct(vector<int>& nums1, vector<int>& nums2) { int N = nums1.size(); int M = nums2.size(); vector<vector<int>> dp; dp.resize(N+1); for(int i=0;i<=N;i++) dp[i].resize(M+1); for(int i=0;i<=N;i++) { for(int j=0;j<=M;j++) { dp[i][j] = -INF; } } for(int i=1;i<=N;i++) { for(int j=1;j<=M;j++) { dp[i][j] = max(dp[i][j],nums1[i-1]*nums2[j-1]); dp[i][j] = max(max(dp[i][j],dp[i-1][j]),max(dp[i][j-1],dp[i-1][j-1]+nums1[i-1]*nums2[j-1])); } } return dp[N][M]; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。