文章目录
今日知识总结
- 数列:逻辑形式为数组
- 经典数列:
- 等差数列:相邻两个数的差相等
- 公差:d
- 首项:a0
- 公式: a n = { a 0 i = 0 a n − 1 + d i > 0 (例子1) a_n\ =\ \begin{cases} a_0&i = 0 \\ a_{n - 1} + d & i>0\\ \end{cases} \tag{例子1} an = {a0an−1+di=0i>0(例子1)
- 等比数列:任意后一个数除以前一个数的商都相等
- 公比:q
- 首项:a0
- 公式: a n = { a 0 i = 0 a n − 1 ∗ q i > 0 (例子1) a_n\ =\ \begin{cases} a_0&i = 0 \\ a_{n - 1} *q & i>0\\ \end{cases} \tag{例子1} an = {a0an−1∗qi=0i>0(例子1)
- 斐波那契数列:除了第一项和第二项,任何一个项等于前两项之和
- f ( n ) = { 0 n = 0 1 n = 1 f ( n − 1 ) + f ( n − 2 ) n > 1 (例子1) f(n)\ =\ \begin{cases} 0&n = 0\\ 1& n=1\\ f(n-1) +f(n-2)&n>1 \end{cases} \tag{例子1} f(n) = ⎩⎪⎨⎪⎧01f(n−1)+f(n−2)n=0n=1n>1(例子1)
- 等差数列:相邻两个数的差相等
题目分析
-
-
题目链接:https://leetcode-cn.com/problems/fibonacci-number/
-
思路:公式
-
代码:
class Solution { public: int fib(int n) { int f[n + 1]; if(n == 0) f[0] = 0; else{ f[0] = 0; f[1] = 1; } for(int i = 2; i < n + 1; i++){ f[i] = f[i - 1] + f[i - 2]; } // for(int i = 0; i < n + 1; i++){ // cout<<"f[" << i << "]=" << f[i] << endl; // } return f[n]; } };
-
-
-
题目链接:https://leetcode-cn.com/problems/n-th-tribonacci-number/
-
思路:按公式
-
代码:
class Solution { public: int tribonacci(int n) { int f[38] = {0, 1, 1}; for(int i = 3; i <= n; i++){ f[i] = f[i - 3] + f[i - 1] + f[i - 2]; } return f[n]; } };
-
-
-
题目链接:https://leetcode-cn.com/problems/qiu-12n-lcof/
-
思路:等差序列求和
-
代码:
class Solution { public: int sumNums(int n) { // n && (n += sumNums(n - 1)); // return n; return (int)((double)(1 + n)/ 2 * n); } };
-
-
-
题目链接:https://leetcode-cn.com/problems/monotonic-array/
-
思路:
- 首先我们用d获知这串数列递增还是递减
- 如果
nums[len - 1] - nums[0] == 0
,就说明只有这个数列所有数字都相同时,这是一个单调数列 - 如果
nums[len - 1] - nums[0] > 0
就说明这应该是一个单调递增数列,即num[i]
应当大于nums[i - 1]
才成立 - 如果
nums[len - 1] - nums[0] < 0
就说明这应该是一个单调递增数列,即num[i]
应当大于nums[i - 1]
才成立 - 确定了d之后,遍历一遍数组,不符合数组成立条件就
return false
-
代码:
class Solution { public: bool isMonotonic(vector<int>& nums) { int len = nums.size(); int d = nums[len - 1] - nums[0]; for(int i = 1; i < len; i++){ if(d == 0) if(nums[i] != nums[i - 1]) return false; if(d > 0) if(nums[i] < nums[i - 1]) return false; if(d < 0) if(nums[i] > nums[i - 1]) return false; } return true; } };
-
-
-
题目链接:https://leetcode-cn.com/problems/decompress-run-length-encoded-list/
-
思路:模拟
-
代码:
class Solution { public: vector<int> decompressRLElist(vector<int>& nums) { int len = nums.size(); vector<int> ans; for(int i = 0; i < len; i += 2){ int cnt = nums[i]; int mid = nums[i + 1]; while(cnt != 0){ ans.push_back(mid); cnt--; } } return ans; } };
-
今日收获:
- 是否可以考虑用数学公式帮助做题呢
今日疑问:
- 两个连续证书求和没做会