学了几天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; }
杨辉三角|| (进阶版)
大佬的做法,原地实现,相当巧妙:
另外一种有趣的做法:
今天就先写到这吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)