(1)
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int>res;
for(int num:nums){
res.push_back(num*num);
}
stable_sort(res.begin(),res.end());
return res;
}
};
时间复杂度:O(nlog n),其中n是数组的长度。
空间复杂度:O(logn)。除了存储答案的数组以外,
我们需要O(logn) 的栈空间进行排序。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
vector<int> ans(n);
for (int i = 0, j = n - 1, pos = n - 1; i <= j;) {
if (nums[i] * nums[i] > nums[j] * nums[j]) {
ans[pos] = nums[i] * nums[i];
++i;
}
else {
ans[pos] = nums[j] * nums[j];
--j;
}
--pos;
}
return ans;
}
};
时间复杂度:O(n)
空间复杂度:O(1)。我们只需要维护常量空间
(2)
class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
vector<int>hash(n+5,0);
for(int i=0;i<n;i++){
hash[nums[i]]+=1;
}
for(int i=0;i<=n;i++){
if(hash[i]==0) return i;//没有就返回下标
}
return n;
}
};
异或:1^1=0 1^0=1 4^0=4
3^0^0^1^1^3^2=2(缺2)
class Solution {
public:
int missingNumber(vector<int>& nums) {
int res = nums.size();
for (int i = 0; i < nums.size(); ++i){
res ^= nums[i];
res ^= i;
}
return res;
}
};
按递增顺序显示卡牌
csdn
class Solution {
public:
vector<int> deckRevealedIncreasing(vector<int>& deck) {
sort(deck.begin(), deck.end());
int n = deck.size();
queue<int>q;
map<int, int>mp;
for (int i = 0; i<n; i++){
q.push(deck[i]);
mp[deck[i]] = i;
}
vector<int>index;
while (!q.empty()){
index.push_back(mp[q.front()]);
q.pop();
int temp = q.front(); q.pop(); q.push(temp);
}
vector<int>res(n,0);
for (int i = 0; i<n; i++){
res[index[i]]=deck[i];
}
return res;
}
};
class Solution {
public:
vector<int> deckRevealedIncreasing(vector<int>& deck) {
sort(deck.begin(), deck.end());
// 如何从有序数组得到原先的数组。
// n-1逆序添加,每次添加需保证当前牌处在当前牌顶。
// 添加前将牌底元素添加到牌顶。
int n = deck.size();
deque<int> dq;
for(int i = n -1; i >= 0; i--){
if(!dq.empty()){
dq.push_front(dq.back());
dq.pop_back();
}
dq.push_front(deck[i]);
}
vector<int> res(dq.begin(), dq.end());
return res;
}
};
反向