周赛连接:第 49 场双周赛
又是大家喜闻乐见的临时紧急事项清单,这次是第49场双周赛。想加快一下速度,所以周赛和双周赛混着来,虚拟竞赛,不会影响排名,坐稳了。
判断国际象棋棋盘中一个格子的颜色
题目连接:判断国际象棋棋盘中一个格子的颜色
我的解法:
没必要说太多的一个简单题,先判断行,再根据列判断是否需要取反。
class Solution {
private:
string black = "aceg";
public:
bool squareIsWhite(string coordinates) {
bool ret;
if (black.find(coordinates[0]) != string::npos) {
ret = false;
} else {
ret = true;
}
if ((coordinates[1] - '1') % 2 != 0) {
ret = !ret;
}
return ret;
}
};
别人的答案:
class Solution:
def squareIsWhite(self, coordinates):
stage = (ord(coordinates[0]) - ord('a')) % 2
num = (int(coordinates[1]) - 1) % 2
return True if stage ^ num else False
作者:qingfengpython
链接:https://leetcode-cn.com/problems/determine-color-of-a-chessboard-square/solution/5705-pan-duan-guo-ji-xiang-qi-qi-pan-zho-xuln/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
直接与a作差,减少了用一个字符串保存黑色格开头的行。可以优化点内存占用。
句子相似性 III
题目连接:句子相似性 III
思路:
- 按照长短交换两个字符串
- 循环遍历放进vector
- 将相同的部分出列
由于为了分析字符串遍历了好多次,解法明细不是最优的,于是没有往下写码,而是看了别人的题解。
别人的解法:
class Solution {
public:
bool areSentencesSimilar(string sentence1, string sentence2) {
if (sentence1.size() < sentence2.size()) swap(sentence1, sentence2);
//first
if (sentence2 == sentence1) return true;
deque<string> q1, q2;
string w;
istringstream cinA(sentence1);
istringstream cinB(sentence2);
while (cinA >> w)
q1.push_back(w);
while (cinB >> w)
q2.push_back(w);
//3 possibilities:
while (true) {
if (!q2.empty() && q1.back() == q2.back()) {
q1.pop_back();
q2.pop_back();
} else if (!q2.empty() && q1.front() == q2.front()) {
q1.pop_front();
q2.pop_front();
} else break;
}
return q2.empty();
}
};
秒啊,秒啊
几个很有意思的地方:
- 使用istringstream让字符串自动按照空格分隔成单词,避免自己写垃圾算法
- 使用双端队列,数据可以从两头出列,避免使用vector需要erase的场景。
统计一个数组中好对子的数目
题目链接:统计一个数组中好对子的数目
我的思路:
- 能够形成好对子的数,各个位的差值相同。
class Solution {
public:
int countNicePairs(vector<int>& nums) {
//
}
};
该题的难点在于数据很大,数据量也很大,如果单独分拆的话,必须超时。看看有没有什么好玩的解法吧。
别人的解法:
这道题只要拿草纸画一下示例即可得到结果,我们通过计算每个数与rev该数的绝对值。
看列表中存在相同数目的数字到底有多少,然后等差的数列求和即可得到最终结果。
from collections import Counter
class Solution:
def countNicePairs(self, nums):
total = 0
tmp = []
for i in nums:
tmp.append(abs(i) - int(str(i)[:: -1]))
for i in Counter(tmp).values():
i -= 1
total += (i + 1) * i // 2
return total % (10**9 + 7)
作者:qingfengpython
链接:https://leetcode-cn.com/problems/count-nice-pairs-in-an-array/solution/5708-tong-ji-yi-ge-shu-zu-zhong-hao-dui-ixtio/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
尾声
又是一次输的很惨的周赛,不懂输入流和双端队列,题目完成度很低。好消息是通过多次挨打,能够通过阅读题解得到提高。