Leetcode 移除重复节点
题目
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
遍历链表,用map记录已出现的值,如在map中已出现则删除该节点。
ListNode* removeDuplicateNodes(ListNode* head) {
map<int, int> m;
ListNode* res = head;
if(head == NULL){
return head;
}
m[head->val]++;
while(head->next){
if(m[head->next->val] != 0){
head->next = head->next->next;
}else{
m[head->next->val]++;
head = head->next;
}
}
return res;
}
该题还存在进阶要求:不使用临时缓冲区,暂时没想出如何保证时间为 o(n) 的情况下降低空间复杂度,直接查看题解。
所以进阶解法是两重循环暴力求解???
没什么可说的,的确是不使用临时缓冲区。
Leetcode 191. 位1的个数
题目
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
本题的解法很简单,是前天翻转无符号数解法的一部分,但是重点是针对数的处理。通过这两个题可以总结出如下针对整数处理的方法:
使用移位和 & 操作
无符号数不存在符号位,故在涉及无符号数二进制处理中可使用移位操作遍历无符号数(预想有符号数也可以这么遍历,不过要注意符号位)。
&操作,通过和1进行 & 操作可以读取到整数的二进制表示中每一位是0还是1(千万不要混淆 & 和 同或运算)。
int hammingWeight(uint32_t n) {
int count = 0;
while(n){
count += n & 1;
n >>= 1;
}
return count;
}
Leetcode 461. 汉明距离
题目
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hamming-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
使用上一题学会的移位与 & 操作,两种方法的代码如下:
采用按位比较的方法。
int hammingDistance(int x, int y) {
int count = 0;
while(x || y){
if((x & 1) != (y & 1)){
count++;
}
x >>= 1;
y >>= 1;
}
return count;
}
采用先异或再计数的方法。
int hammingDistance(int x, int y) {
int temp = x ^ y, count = 0;
while(temp){
if(temp & 1){
count++;
}
temp >>= 1;
}
return count;
}
今天还做了一道杨辉三角的题,由于过于简单就不写了。
《大衮》
这部短篇写的就有一点克苏鲁风格了,洛夫克拉夫特故事的重点开始由灵异的超自然现象转移到科学化的想象,开始描写一些人完全无法认知、完全无法对抗的存在。但是《大衮》还是停留在与其说恐怖不如说有点猎奇的范围,几百万年前的陆地、奇妙的祭祀碑文、传说中的鱼神,这些描写从心底泛出的并不是恐怖,而是一种如文中所写的不明海洋生物腐烂的臭味感到极其恶心的厌恶情绪,那种半梦半醒中难以言喻的恶心就好比重感冒发烧时闻到焚烧艾草的味道,关于大衮本身的描写倒并没有多可怕,只是说令人难以忘记的吼叫之外也没有很具体的描写。洛夫克拉夫特对场景的描写一直非常能带动气氛,不过这种过于聚焦于场景以及主人公内心折磨的描写总感觉淡化了那些奇特生物或者外神的恐怖感。
今天又是没有学习笔记的一天。。。在家是真看不下去书。。。