学了几天C++回来了,重新开始数据结构的内容!
^(异或运算符) 实现交换
交换两个整数的值而不必用第三个参数
a = 9;
b = 11;
a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b; 0010^1001=1011
a = 11;
b = 9;
如果有其它类型,那么就在前面加上强制类型转换符就好啦。
比如这样:(char) (s[left] ^ s[right]);
移除元素
思路:
不要想着去前后交换,那样效率很低,直接用fast走完一遍表就可以了。
大佬的代码:
int removeElement(int* nums, int numsSize, int val){
int slow = 0;
for (int fast = 0; fast < numsSize; fast++) {"last跑完整个过程也就做完了"
if (nums[fast] != val) {"如果fast的值不是要删除的值,那么就拷贝到前面"
nums[slow] = nums[fast];
slow++;"slow前往下一格"
}
}
return slow;"这个时候slow的值就是新数组的长度了"
}
最大连续1的个数
大佬的代码:相当简洁;
int findMaxConsecutiveOnes(int* nums, int numsSize){
int ans = 0;
int count = 0;
int slow = 0;
for (int fast = 0; fast < numsSize; fast++) {"还是一往无前冲"
if (nums[fast] == 0) {"如果碰到0就更新slow的位置和初始化计数器count"
slow = fast;
count = 0;
continue;
}
count++;
ans = ans > count ? ans : count;
}
return ans;
}
杨辉三角|| (进阶版)
大佬的做法,原地实现,相当巧妙:
另外一种有趣的做法:
今天就先写到这吧。