解题思路:
开个新数组或者map存储对应序号的字符,然后按序输出。
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public: string restoreString(string s, vector<int>& indices) { map<int,char> q; for(int i=0;i<s.length();i++) q[indices[i]]=s[i]; string ans=""; for(int i=0;i<s.length();i++) ans+=q[i]; return ans; } };
|
解题思路:
遍历灯泡数组,从前往后翻转,如果前一状态与此时状态不同,则翻转灯泡。
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public: int minFlips(string target) { int ans=0; char tmp[2]={'0','1'}; int t=0; for(int i=0;i<target.length();i++){ if(target[i]!=tmp[t]){ ans++; t=1-t; } } return ans; } };
|
解题思路:
后序遍历树,每个节点返回该节点的子树中距离该节点i长度的叶节点个数的vector数组。
答案计算在每个节点中,加上该节点左右子树叶节点距离<=distance个数的乘积和。
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
class Solution { public: int ans,d; int countPairs(TreeNode* root, int distance) { ans=0; d=distance; order(root); return ans; } vector<int> order(TreeNode *T){ if(T==NULL) return vector<int> (d+1); if(T->left==NULL && T->right==NULL){ vector<int> q(d+1); q[0]=1; return q; } vector<int> le = order(T->left); vector<int> ri = order(T->right); for(int i=d;i>0;i--){ le[i]=le[i-1]; ri[i]=ri[i-1]; } le[0]=ri[0]=0; for(int i=0;i<=d;i++){ for(int j=0;j<=d;j++){ if(i+j<=d) ans+=le[i]*ri[j]; } } for(int i=0;i<=d;i++) le[i]+=ri[i]; return le; } };
|
做题情况:
AC 三题
排名:154 / 5231
总结反思:
这次排名较高,第三题思路出的比较快,之前几次都要八百多名,继续努力,坚持每日一刷题,争取周赛能够AK。
第一次写博客,以后要多写博客,分享一些做题或者学习的情况与反思。