905. Sort Array By Parity
Given an array A of non-negative integers, return an array consisting of all the even elements of A, followed by all the odd elements of A.
You may return any answer array that satisfies this condition.
Example 1:
Input: [3,1,2,4]
Output: [2,4,3,1]
The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
Note:
1 <= A.length <= 50000 <= A[i] <= 5000
Time Limit Exceeded:
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
for(int i = 0; i < A.size(); )
{
if(A[i]%2 == 1)
{
A.push_back(A[i]);
A.erase(A.begin()+i);
}
else
i++;
}
return A;
}
};
Slow version:
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
vector<int> even;
vector<int> odd;
for(int i = 0; i < A.size();i++)
{
if(A[i]%2 == 1)
odd.push_back(A[i]);
else
even.push_back(A[i]);
}
A.erase(A.begin(), A.end());
A.insert(A.end(), even.begin(), even.end());
A.insert(A.end(), odd.begin(), odd.end());
return A;
}
};
using Partition():
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
partition(A.begin(), A.end(), [](int i){return i%2==0;});
return A;
}
};
Performance:

Faster version using sort():
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
sort(A.begin(), A.end(), [](int lhs, int rhs) {
if (lhs % 2 == 1 && rhs % 2 == 0) {
return false; // left is odd, right is even, out of order
} else if (rhs % 2 == 1 && lhs % 2 == 0) {
return true; // left is even, right is odd, OK
} else {
return false;
}
});
return A;
}
};
Useful knowledge:
977. Squares of a Sorted Array
Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order.
Example 1:
Input: [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Note:
1 <= A.length <= 10000-10000 <= A[i] <= 10000Ais sorted in non-decreasing order.
Slow Version:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
for(int i = 0; i < A.size(); i++)
A[i] = A[i]*A[i];
sort(A.begin(), A.end());
return A;
}
};
Performance:

Two pointers:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
int p1 = 0; int p2 = A.size()-1;
vector<int> v(A.size());
for(int i = A.size()-1; i >= 0; i--)
{
if(A[p1]<0 && abs(A[p1]) > A[p2]) //First error: A[p1] compares with A[p2] not with A[i]
{
v[i] = A[p1]*A[p1];
p1++;
}
else
{
v[i] = A[p2]*A[p2];
p2--;
}
}
return v;
}
};
Performance:

830. Positions of Large Groups
In a string S of lowercase letters, these letters form consecutive groups of the same character.
For example, a string like S = "abbxxxxzyy" has the groups "a", "bb", "xxxx", "z" and "yy".
Call a group large if it has 3 or more characters. We would like the starting and ending positions of every large group.
The final answer should be in lexicographic order.
Example 1:
Input: "abbxxxxzzy"
Output: [[3,6]]
Explanation: "xxxx" is the single large group with starting 3 and ending positions 6.
Note: 1 <= S.length <= 1000
Slow version:
class Solution {
public:
vector<vector<int>> largeGroupPositions(string S) {
vector<vector<int>> ans;
int start = 0; int end = 0;
S = S + '#'; //in order to avoid S[i+1] being out of array index
for(int i = 0; i < S.length()-1; i++)
{
if(end - start >= 2 && S[i] != S[i+1])
{
ans.push_back({start, end});
}
if(S[i]!=S[i+1])
{
start = end = i+1;
}
else
end++;
}
return ans;
}
};
Performance:

Useful knowledge:
来源:CSDN
作者:cxyhss
链接:https://blog.csdn.net/hushanshan520/article/details/104345962