前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
反转链表的时候我们用的是双指针。其实这里的反转字符串我们也可以用双指针来做,而且更简单!
字符串它本质上也是一种数组对吧,所以呢它在内存中也是属于连续分布的。
这种还是比较容易想到的对吧,反转之类的不都带是双指针安排上不就行了。
一个指针在最前面,一个在最后面,然后交换这个两个指针所对应的值
public void reverseString(char[] s) { for (int i = 0, j = s.length - 1; i < s.length / 2; i++, j--) { char a = s[i]; s[i] = s[j]; s[j] = a; } }
第二种方法:
通过异或运算
字符串计算的时候其实也是通过转化为二进制计算的
每个字母对应着自己的ASCII码
public void reverseString(char[] s) { int l = 0; int r = s.length - 1; while(r > l){ s[l] ^= s[r]; s[r] ^= s[l]; s[l] ^= s[r]; l++; r--; } }
交换两个数
实例
void Swap(int &a, int &b){ if (a != b){ a ^= b; b ^= a; a ^= b; } }
对于异或运算的解释如下: