1. MoveZeros
class Solution {
public:
void moveZeroes(vector<int> &num) {
/* two pointers*/
vector<int>::iterator itfront, itbehind;
itfront = itbehind = num.begin(); //return an iterater
while (itfront != num.end())
{
if (*itfront != 0) // if not zero,copy? to itbehind, then front++,behind++
{
if (itfront != itbehind)
{
*itbehind++ = *itfront++;
}
else
{
itfront++;
itbehind++;
}
}
else // if itfront is zero,front++
{
itfront++;
}
}
while (itbehind != num.end())
{
*itbehind++ = 0;
}
}
};
2. FirstBadVersion
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int start=1,end=n;
int mid;
while (start<=end)
{
// bug when start=end=1
//mid=start/2+end/2; /*or:operator priority mid=start+(end-start)>>1; data overflow mid=(start+end)/2*/
mid = start+(end-start)/2;
if(!isBadVersion(mid)) // not bad version
{
start=mid+1;
}
else // bad version
{
if ((mid==1 )||(!isBadVersion(mid-1))) //mid-1 is not bad version (mid>1)
return mid;
else
end=mid-1;
}
}
}
};
3. MissingNumber
class Solution {
public:
int missingNumber(vector<int>& nums) {
int size=nums.size(); // not in loop
int bitret=nums[0]^size;
for (int i=1;i<size;i++)
{
bitret^=nums[i]^i; //one loop
}
return bitret;
}
};