分类颜色
给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
示例:
输入:[2,0,2,1,1,0]输出:[0,0,1,1,2,2]
进阶:
一个直观的解决方案是使用计数排序的两趟扫描算法。
首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
你能想出一个仅使用常数空间的一趟扫描算法吗?
我的思路:直观的想,就是一遍扫描+一遍重写,但是题目建议一遍扫描方法,然后我就想啊想啊!最后终于一遍扫描完成了,提交,耗时超越25%了!fuck!再提交,耗时又变成超越97%了。真的好想吐槽这破东西,一点都看不出来到底效率高不高。然后看最优的,马的,这不就是一遍扫描+一遍重写吗,我,,,,
不说别的了,说说我的思路吧,既然要做到一遍扫描完成,所以必须一边扫描一边改写数据,完成效果就是左边0,右边2,中间1,。所以我们设立两个标志,zero和two,分别表示当前0和2的存放位置,如开始时zero=0;two=nums.size()-1;扫描数据,遇见0,则与nums[zero]交换数据,即将此0存放到zero下标位置,并zero++;遇见2则存放到two下标位置,并two--;直到i>two;1则不处理
代码实现:
两整数之和
不使用运算符+ 和-,计算两整数a、b之和。
示例:
若a = 1 ,b = 2,返回 3。
我的思路:好吧,虽然知道是应该用位运算处理,但是我依旧没有思路,本来想着算每一位的值,但是进位处理很麻烦,没有任何思绪,最后就查找博客,找到了解决方案,下面贴出链接。这里又想吐槽了,最优解是什么鬼? return a+b;??????what‘s the funk!
代码实现:
博客链接:LeetCode 两个整数的加法运算,不使用+符号 - CSDN博客
咯咯咯