class Solution {
public:
vector<int> decompressRLElist(vector<int>& nums) {
vector<int>res;
for(int i=0;i<nums.size();i=i+2){
for(int j=nums[i];j>0;j--){
res.push_back(nums[i+1]);
}
}
return res;
}
};
滚动数组:
class Solution {
public:
int fib(int n) {
if (n < 2) {
return n;
}
int p = 0, q = 0, r = 1;
for (int i = 2; i <= n; ++i) {
p = q;
q = r;
r = p + q;
}
return r;
}
};
递归:easy
class Solution {
public:
int tribonacci(int n) {
if(n==0) return 0;
else if(n==1) return 1;
else if(n==2) return 1;
int p = 0, q = 1, m=1,r = 0;
for (int i = 3; i <= n; ++i) {
r = q+m+p;
p=q,q=m,m=r;
}
return r;
}
};
class Solution {
public:
bool isMonotonic(vector<int>& nums) {
bool big=true,small=true;
for(int i=0;i<nums.size()-1;i++){
if(nums[i]<nums[i+1]){
big=false;
}
if(nums[i]>nums[i+1]){
small=false;
}
}
return big||small;
//return is_sorted(nums.begin(), nums.end()) || is_sorted(nums.rbegin(), nums.rend());
}
};
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
int i = 1; // 滑动窗口的左边界
int j = 1; // 滑动窗口的右边界
int sum = 0; // 滑动窗口中数字的和
vector<vector<int>> res;
while (i <= target / 2) {
if (sum < target) {
// 右边界向右移动
sum += j;
j++;
} else if (sum > target) {
// 左边界向右移动
sum -= i;
i++;
} else {
// 记录结果
vector<int> arr;
for (int k = i; k < j; k++) {
arr.push_back(k);
}
res.push_back(arr);
// 左边界向右移动
sum -= i;
i++;
}
}
return res;
}
};
连续整数求和
再用滑动窗口会超时
添加链接描述
class Solution {
public:
int consecutiveNumbersSum(int n) {
int ans=0;
for(int k=1;n-(k-1)*k/2>0;k++){
if((n-(k-1)*k/2)%k==0)ans++;
}
return ans;
}
};