Algorithm
lc2342_数位和相等数对的最大和
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 46 47 48 49 50 51
| class Solution { public: int getBitSum(int num) { int bitSum = 0; while (num) { bitSum += num % 10; num /= 10; } return bitSum; } int maximumSum(vector<int>& nums) { unordered_map<int, pair<int, int>> bitSum2max; for (auto& num : nums) { int bitSum = getBitSum(num); if (bitSum2max.find(bitSum) == bitSum2max.end()) { bitSum2max[bitSum].first = num; continue; } if (bitSum2max[bitSum].second == 0) { if (num < bitSum2max[bitSum].first) { swap(num, bitSum2max[bitSum].first); } bitSum2max[bitSum].second = num; continue; } if (num <= bitSum2max[bitSum].first) { continue; } else if (num <= bitSum2max[bitSum].second) { swap(num, bitSum2max[bitSum].first); } else { swap(num, bitSum2max[bitSum].second); swap(num, bitSum2max[bitSum].first); } } int ans = -1; for (const auto& it : bitSum2max) { if (it.second.first && it.second.second) { ans = max(ans, it.second.first + it.second.second); } } return ans; } };
|
这个题花了40分钟,速度还是慢了,还得多练练。
Review
Iterator Implementation
Iterator 通过良好的组合,把简洁留给客户,把复杂留给自己,而且通过简单的关系组合,构建了美妙的实现。
其实看每一块都觉得很简单简洁,但组合在一起,就感觉很美妙复杂。
记得高中化学老师常说: 世上无难题,只有组合题。
所以当我们肢解了每一个小块,那么就能发现组合在一起的复杂事务其实也很简单精妙了。
Tips
推荐微信读书灰度测试的读书打卡活动:
- 每天5分钟,365天只需要打卡360天即可,所以有5天冗余,也不要求连续阅读,基本不会翻车.
- 价格实惠,只要50元RMB就能立马获得1个月的阅读会员,然后完成挑战之后直接送1年的阅读会员,很香。
下面链接需要微信中打开:
https://weread.qq.com/misc/read-challenge
Share-开发临时备份代码思考,私人分支备份,整理好再push工作分支
因为 rebase
容易毁掉整个远程分支,所以不能直接推到远程工作分支,防止影响他人。
但是如果一个 feature 的代码一直放在本地,又怕数据丢失,这样会导致极大的风险。
一个个 temp commit
推到远程,之后 git reset
很长的提交链条整理再强推,其实好像和 rebase 强推差不多…
所以这里想到的就是在远程建立一个私人分支,方便仅用于用于备份 temp commit
。
之后 git rebase
整理好推到工作分支,顺便强推到备份私人分支。