旋转数组
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k = k%nums.size();
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+k);
reverse(nums.begin()+k,nums.end());
}
};
/*
笔记:
reverse(nums.begin(),nums.end());
这个nums.end()是取不到的,所以
reverse(nums.begin(),nums.begin()+k);
从begin()开始有几个数就加上几。
*/
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
vector<int> newArr(n);
for (int i = 0; i < n; ++i) {
newArr[(i + k) % n] = nums[i];
}
nums.assign(newArr.begin(), newArr.end());
}
};
/*
*/
笔记:
reverse(nums.begin(),nums.end());
这个nums.end()是取不到的,所以
reverse(nums.begin(),nums.begin()+k);
从begin()开始有几个数就加上几。
笔记:
assign函数:
函数原型:
void assign(const_iterator first,const_iterator last);
void assign(size_type n,const T& x = T());
功能:
将区间[first,last)的元素赋值到当前的vector容器中,
或者赋n个值为x的元素到vector容器中,
这个容器会清除掉vector容器中以前的内容。
二维vector排序
1.sort()函数,默认的是对二维数组按照第一列的大小对每行的数组进行排序。所以可以加上cmp函数用按照任意列对数组进行排序。
#include<bits/stdc++.h>
using namespace std;
//按照二维数组第一列的大小对每个一维数组升序排序,
//如何第一列相同时,按照第二列大小对每行的数组降序排序
bool cmp(vector<int>&a,vector<int>&b){
if(a[0]!=b[0]) return a[0]<b[0];
else return a[1]>b[1];
}
int main()
{
vector<vector<int> >a(6);
int x;
for(int i=0;i<6;i++){
for(int j=0;j<2;j++){
cin>>x;
a[i].push_back(x);
}
}
cout<<endl;
sort(a.begin(),a.end(),cmp);
for(int i=0;i<6;i++){
for(int j=0;j<2;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
输入的数组和排序的数组如下:
// class Solution {
// public:
// vector<vector<int>> merge(vector<vector<int>>& intervals) {
// vector<vector<int>> res;
// vector<int> mid(2,0);
// sort(intervals.begin(), intervals.end());
// if(intervals.size()<=1) return intervals;
// for(int i = 0;i<intervals.size()-1;i++){
// if(intervals[i][1]>=intervals[i+1][0]&&intervals[i+1][1]>=intervals[i][0]){
// mid[0] = min(intervals[i][0],intervals[i+1][0]);
// mid[1] = max(intervals[i][1],intervals[i+1][1]);
// intervals[i+1].assign(mid.begin(),mid.end());
// }
// else {
// mid.assign(intervals[i].begin(),intervals[i].end());
// res.push_back(mid);
// }
// }
// res.push_back(intervals[intervals.size()-1]);
// return res;
// }
// };
/*
二维vector排序:
1.sort()函数,默认的是对二维数组按照第一列的大小对每行的数组进行排序。
所以可以加上cmp函数用按照任意列对数组进行排序。
*/
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
vector<int> mid(2,0);
sort(intervals.begin(), intervals.end());
if(intervals.size()<=1) return intervals;
for(int i = 0;i<intervals.size()-1;i++){
if(intervals[i][1]>=intervals[i+1][0]){
mid[0] = intervals[i][0];
mid[1] = max(intervals[i][1],intervals[i+1][1]);
intervals[i+1].assign(mid.begin(),mid.end());
}
else {
mid.assign(intervals[i].begin(),intervals[i].end());
res.push_back(mid);
}
}
res.push_back(intervals[intervals.size()-1]);
return res;
}
};