给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网络安全面试题
绿盟护网行动
还有大家最喜欢的黑客技术
网络安全源码合集+工具包
所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
输入:
n = 1, start = 7
输出:
7
样例 4
输入:
n = 10, start = 5
输出:
2
提示
- 1 <= n <= 1000
- 0 <= start <= 1000
- n == nums.length
分析
我们可以直接按照题意,暴力循环,那么时间复杂度就是O(n),是否有时间复杂度为O(1)的算法呢?
记x为变量,^是异或操作,则异或运算满足以下性质:
- x ^ x = 0;
- x ^ 0 = x;
- x ^ y = y ^ x(交换律);
- (x ^ y) ^ z = x ^ (y ^ z)(结合律);
- x ^ y ^ y = x(自反性);
- 如果x是4的倍数,x ^ (x + 1) ^ (x + 2) ^ (x + 3) = 0;
- 本题要计算的 结果公式 为:start ^ (start + 2) ^ (start + 4) ^ ⋯ ^(start + 2 * (n − 1))。
- 如果有一个函数 sumXor(x) 可以计算 0 ^ 1 ^ 2 ^ ⋯ ^ x 。
- 对于某变量x和n,计算sumXor(s - 1) ^ sumXor(s + n - 1)的结果,根据上面的 性质1 可以将 0 ^ 1 ^ 2 ^ … ^ (s - 1) 的值抵消为0,就变成 0 ^ s ^ (s + 1) ^ (s + 2) ^ ⋯ ^ (s + n - 1) ,根据 性质2 可知与0做异或操作还是自己,最后结果就变成 s ^ (s + 1) ^ (s + 2) ^ ⋯ ^ (s + n - 1) ,这个结果很接近我们要计算的内容。
- 如果我们令 s = start / 2 ,把 结果公式 转换成 (s ^ (s + 1) ^ (s + 2) ^ ⋯ ^ (s + n - 1)) * 2,这样并不成立,因为在做除以2的操作时,最低位丢失了,但是我们可以单独处理最低位。
- 观察 结果公式 可知 (start + 2),(start + 4) ,… ,(start + 2 * (n − 1)) 的奇偶性质相同,而且和start一致,也就是最低位要么都是0,要么都是1,只有基数个1做异或操作时才会是1。也就是只有start是奇数并且n是奇数的时候,最终结果的最低位 e 才会是1。
- 这时 结果公式 可以转化为: ((sumXor(s - 1) ^ sumXor(s + n - 1)) * 2) | e 。
只要我们可以实现函数sumXor(x),那么题目计算就可以做到O(1)的时间复杂度,根据 性质6 和 性质2 我们只需要考虑x除以4的余数,也就是最低2位,可以得到如下推导:
x % 4 = 0 的二进制位:xx…x00
x % 4 = 1 的二进制位:xx…x01
x % 4 = 2 的二进制位:xx…x10
x % 4 = 3 的二进制位:xx…x11
- x % 4 = 0,sumXor(x) = x;
- x % 4 = 1,sumXor(x) = (x - 1) ^ x,简化可得 sumXor(x) = 1;
- x % 4 = 2,sumXor(x) = (x - 2) ^ (x - 1) ^ x,简化可得 sumXor(x) = x | 1;
- x % 4 = 3,sumXor(x) = 0;
- x % 4 等同于 x & 3 的操作,而且理论上 & 操作要比 % 操作更快;
题解
java
class Solution {
public int xorOperation(int n, int start) {
int s = start >> 1, e = n & start & 1;
int ret = sumXor(s - 1) ^ sumXor(s + n - 1);
return ret << 1 | e;
}
public int sumXor(int x) {
switch (x & 3) {
case 0:
return x;
case 1:
return 1;
case 2:
return x | 1;
default:
// x & 3 == 3
return 0;
}
}
}
c
int xorOperation(int n, int start) {
int s = start >> 1, e = n & start & 1;
int ret = sumXor(s - 1) ^ sumXor(s + n - 1);
return ret << 1 | e;
}
int sumXor(int x) {
switch (x & 3) {
case 0:
return x;
case 1:
return 1;
case 2:
return x | 1;
default:
// x & 3 == 3
return 0;
}
}
c++
class Solution {
public:
int xorOperation(int n, int start) {
int s = start >> 1, e = n & start & 1;
int ret = sumXor(s - 1) ^ sumXor(s + n - 1);
return ret << 1 | e;
}
int sumXor(int x) {
switch (x & 3) {
case 0:
return x;
case 1:
return 1;
case 2:
return x | 1;
default:
// x & 3 == 3
return 0;
}
}
};
python
class Solution:
def xorOperation(self, n: int, start: int) -> int:
def sumXor(x):
if x % 4 == 0:
return x
if x % 4 == 1:
return 1
if x % 4 == 2:
return x | 1
return 0
s = start >> 1
e = n & start & 1
ans = sumXor(s - 1) ^ sumXor(s + n - 1)
return ans << 1 | e
go
func xorOperation(n, start int) (ans int) {
s, e := start>>1, n&start&1
ret := sumXor(s-1) ^ sumXor(s+n-1)
return ret<<1 | e
}
func sumXor(x int) int {
switch x & 3 {
case 0:
return x
case 1:
return 1
case 2:
return x | 1
default:
return 0
}
}
**先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7**
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/47271736be61cfb35808bbaa780564b0.png)
![img](https://img-blog.csdnimg.cn/img_convert/c98b63c1d29484e07e702b3e28d20eb5.png)
![img](https://img-blog.csdnimg.cn/img_convert/6712d2bbd559b7a60044b39ed25eff49.png)
![img](https://img-blog.csdnimg.cn/img_convert/85747a48e6001f37a2a0b69e5a1246ad.png)
![img](https://img-blog.csdnimg.cn/img_convert/560eedd6f47c1946754933fe04196e47.png)
![img](https://img-blog.csdnimg.cn/img_convert/b31867a0445940ee1fcce6e3d00ac0d7.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
15281760139)]
[外链图片转存中...(img-m56t3Dex-1715281760140)]
[外链图片转存中...(img-dG1CPHoq-1715281760141)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**