Skip to content

Commit 5d158de

Browse files
committed
常规提交
1 parent d2f7c35 commit 5d158de

File tree

84 files changed

+2684
-21
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+2684
-21
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*泰波那契序列 Tn 定义如下: 
2+
3+
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
4+
5+
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
6+
7+
 
8+
9+
示例 1:
10+
11+
输入:n = 4
12+
输出:4
13+
解释:
14+
T_3 = 0 + 1 + 1 = 2
15+
T_4 = 1 + 1 + 2 = 4
16+
示例 2:
17+
18+
输入:n = 25
19+
输出:1389537
20+
 
21+
22+
提示:
23+
24+
0 <= n <= 37
25+
答案保证是一个 32 位整数,即 answer <= 2^31 - 1。
26+
27+
来源:力扣(LeetCode)
28+
链接:https://leetcode-cn.com/problems/n-th-tribonacci-number
29+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
30+
class Solution {
31+
public:
32+
int tribonacci(int n) {
33+
if(n==0) return 0;
34+
if(n==1||n==2) return 1;
35+
return tribonacci(n-1)+tribonacci(n-2)+tribonacci(n-3);
36+
}
37+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public:
3+
int tribonacci(int n) {
4+
int dp[n+1];
5+
for(int i=0;i<n+1;i++){
6+
if(i==0) dp[i]=0;
7+
else if(i==1||i==2) dp[i]=1;
8+
else dp[i]=dp[i-3]+dp[i-2]+dp[i-1];
9+
}
10+
return dp[n];
11+
}
12+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*给定一个未排序的整数数组,找出最长连续序列的长度。
2+
3+
要求算法的时间复杂度为 O(n)。
4+
5+
示例:
6+
7+
输入: [100, 4, 200, 1, 3, 2]
8+
输出: 4
9+
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
10+
11+
来源:力扣(LeetCode)
12+
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
13+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
14+
class Solution {
15+
public:
16+
int longestConsecutive(vector<int>& nums) {
17+
set<int> nums_set=set<int>(nums.begin(),nums.end());
18+
nums.assign(nums_set.begin(),nums_set.end());
19+
sort(nums.begin(),nums.end());
20+
if(nums.size()<=2) return nums.size();
21+
int res=0;
22+
int length=2;
23+
int tmp=0;
24+
for(int i=0,j=1;j<nums.size();i++,j++){
25+
if(tmp==nums[j]-nums[i]) length++;
26+
else{
27+
length=2;
28+
tmp=nums[j]-nums[i];
29+
}
30+
res=max(length,res);
31+
cout<<"nums[j]="<<nums[j]<<endl;
32+
cout<<"tmp="<<tmp<<endl;
33+
cout<<"length="<<length<<endl;
34+
}
35+
return res;
36+
}
37+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
int longestConsecutive(vector<int>& nums) {
4+
unordered_set<int> num_set;
5+
for (const int& num : nums) {
6+
num_set.insert(num);
7+
}
8+
9+
int longestStreak = 0;
10+
11+
for (const int& num : num_set) {
12+
if (!num_set.count(num - 1)) {
13+
int currentNum = num;
14+
int currentStreak = 1;
15+
16+
while (num_set.count(currentNum + 1)) {
17+
currentNum += 1;
18+
currentStreak += 1;
19+
}
20+
21+
longestStreak = max(longestStreak, currentStreak);
22+
}
23+
}
24+
25+
return longestStreak;
26+
}
27+
};

141_环形链表_easy/自己写的很慢.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Solution {
4343
while(head!=NULL){
4444
if(!p.empty()){
4545
for(int i=0;i<=p.size()-1;i++){
46-
if(p[i]==head) return true;
46+
if(p[i]==head) return true;
4747
}
4848
}
4949
p.push_back(head);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
2+
3+
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
4+
5+
 
6+
7+
示例 1:
8+
9+
输入:candies = [2,3,5,1,3], extraCandies = 3
10+
输出:[true,true,true,false,true]
11+
解释:
12+
孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
13+
孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
14+
孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。
15+
孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。
16+
孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
17+
示例 2:
18+
19+
输入:candies = [4,2,1,1,2], extraCandies = 1
20+
输出:[true,false,false,false,false]
21+
解释:只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。
22+
示例 3:
23+
24+
输入:candies = [12,1,12], extraCandies = 10
25+
输出:[true,false,true]
26+
 
27+
28+
提示:
29+
30+
2 <= candies.length <= 100
31+
1 <= candies[i] <= 100
32+
1 <= extraCandies <= 50
33+
34+
来源:力扣(LeetCode)
35+
链接:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies
36+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
37+
class Solution {
38+
public:
39+
vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
40+
vector<bool> res;
41+
int max_candy=0;
42+
for(int i=0;i<candies.size();i++){
43+
max_candy=max(max_candy,candies[i]);
44+
}
45+
for(int i=0;i<candies.size();i++){
46+
if(candies[i]+extraCandies>=max_candy) res.push_back(1);
47+
else res.push_back(0);
48+
}
49+
return res;
50+
}
51+
};
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*峰值元素是指其值大于左右相邻值的元素。
2+
3+
给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。
4+
5+
数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。
6+
7+
你可以假设 nums[-1] = nums[n] = -∞。
8+
9+
示例 1:
10+
11+
输入: nums = [1,2,3,1]
12+
输出: 2
13+
解释: 3 是峰值元素,你的函数应该返回其索引 2。
14+
示例 2:
15+
16+
输入: nums = [1,2,1,3,5,6,4]
17+
输出: 1 或 5
18+
解释: 你的函数可以返回索引 1,其峰值元素为 2;
19+
  或者返回索引 5, 其峰值元素为 6。
20+
说明:
21+
22+
你的解法应该是 O(logN) 时间复杂度的。
23+
24+
来源:力扣(LeetCode)
25+
链接:https://leetcode-cn.com/problems/find-peak-element
26+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
27+
class Solution {
28+
public:
29+
int findPeakElement(vector<int>& nums) {
30+
for(int i=0;i<nums.size()-1;i++){
31+
if(nums[i]>nums[i+1]) return i;
32+
}
33+
return nums.size()-1;
34+
}
35+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int rob(vector<int>& nums) {
4+
if(nums.empty()) return 0;
5+
vector<int> dp(nums.size(),0);
6+
for(int i=0;i<nums.size();i++){
7+
if(i==0) dp[i]=nums[i];
8+
else if(i==1) dp[i]=max(nums[0],nums[1]);
9+
else dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
10+
}
11+
return dp[nums.size()-1];
12+
}
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
2+
3+
 
4+
5+
示例:
6+
7+
输入: [1,2,3,4]
8+
输出: [24,12,8,6]
9+
 
10+
11+
提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
12+
13+
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
14+
15+
进阶:
16+
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
17+
18+
来源:力扣(LeetCode)
19+
链接:https://leetcode-cn.com/problems/product-of-array-except-self
20+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
21+
class Solution {
22+
public:
23+
vector<int> productExceptSelf(vector<int>& nums) {
24+
vector<int> left(nums.size(),0);
25+
vector<int> right(nums.size(),0);
26+
vector<int> res(nums.size(),0);
27+
for(int i=0,tmp=1;i<nums.size();i++){
28+
left[i]=tmp;
29+
tmp*=nums[i];
30+
}
31+
for(int i=nums.size()-1,tmp=1;i>=0;i--){
32+
right[i]=tmp;
33+
tmp*=nums[i];
34+
}
35+
for(int i=0;i<nums.size();i++){
36+
res[i]=left[i]*right[i];
37+
}
38+
return res;
39+
}
40+
};
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
2+
3+
示例 1:
4+
5+
输入: [1,3,4,2,2]
6+
输出: 2
7+
示例 2:
8+
9+
输入: [3,1,3,4,2]
10+
输出: 3
11+
说明:
12+
13+
不能更改原数组(假设数组是只读的)。
14+
只能使用额外的 O(1) 的空间。
15+
时间复杂度小于 O(n2) 。
16+
数组中只有一个重复的数字,但它可能不止重复出现一次。
17+
18+
来源:力扣(LeetCode)
19+
链接:https://leetcode-cn.com/problems/find-the-duplicate-number
20+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
21+
class Solution {
22+
public:
23+
int findDuplicate(vector<int>& nums) {
24+
sort(nums.begin(),nums.end());
25+
for(int i=0;i<nums.size()-1;i++){
26+
if(nums[i]==nums[i+1]) return nums[i];
27+
}
28+
return 0;
29+
}
30+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*给定一个 N 叉树,返回其节点值的前序遍历。
2+
3+
例如,给定一个 3叉树 :
4+
5+
 
6+
7+
8+
9+
 
10+
11+
返回其前序遍历: [1,3,5,6,2,4]。
12+
13+
 
14+
15+
说明: 递归法很简单,你可以使用迭代法完成此题吗?
16+
17+
来源:力扣(LeetCode)
18+
链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal
19+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/
20+
/*
21+
// Definition for a Node.
22+
class Node {
23+
public:
24+
int val;
25+
vector<Node*> children;
26+
27+
Node() {}
28+
29+
Node(int _val) {
30+
val = _val;
31+
}
32+
33+
Node(int _val, vector<Node*> _children) {
34+
val = _val;
35+
children = _children;
36+
}
37+
};
38+
*/
39+
40+
class Solution {
41+
public:
42+
vector<int> res;
43+
vector<int> preorder(Node* root) {
44+
if(root){
45+
res.push_back(root->val);
46+
for(auto x:root->children){
47+
preorder(x);
48+
}
49+
}
50+
return res;
51+
}
52+
};

0 commit comments

Comments
 (0)