https://blog.csdn.net/qq_41277628/article/details/113322136
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
1 #include
2
3 #define N 6
4
5 int main()
6 {
7 int min,temp;
8 int a[] = {7,1,5,3,6,4};
9 min = a[0];
10 temp = 0;
11 for(int i = 0;itemp)
18 {
19 temp = a[i] - min;
20 }
21 }
22 printf("最高收益为%d元\n",temp);
23
24 return 0;
25 }
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
https://violentayang.blog.csdn.net/article/details/123061036
1 #include
2 #include
3
4 #define N 9
5
6 int main()
7 {
8 int a[N] = {1,8,6,2,5,4,8,3,7};
9 int i = 0,j = N-1,sun = 0,top = 0;
10 while(itop)
16 {
17 top = sun;
18 }
19 i++;
20 }
21 else
22 {
23 sun = (j-i)*a[j];
24 if(sun>top)
25 {
26 top = sun;
27 }
28 j--;
29 }
30 }
31 printf("可以盛%d吨的水\n",top);
32
33 return 0;
34 }
c++实现:
1 #include
2 #include
3 using namespace std;
4
5 class node{
6 public:
7 int maxsrea(vector& height){
8 int ans = 0;
9 int l = 0,r = height.size()-1;
10 while(l height = {1,8,6,2,5,4,8,3,7};
23 cout << n.maxsrea(height) << endl;
24
25 return 0;
26 }
一个机器人位于一个 m x n 网格的左上角 。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。
问总共有多少条不同的路径?
https://blog.csdn.net/C_chengxuyuan/article/details/119980859
1 #include
2 #include
3
4 int main()
5 {
6 int x,y;
7 int a[100][100];
8 printf("输入网格的长和宽\n");
9 scanf("%d%d",&x,&y);
10
11 for(int i = 0;i
c++实现:
1 #include
2 #include
3 using namespace std;
4
5 class node{
6 public:
7 int uniquePath(int m,int n){
8 vector> f(m,vector(n,1));
9 for(int i = 1;i
不同路径中间有障碍物(力扣第63题)
1 #include
2 #include
3 using namespace std;
4
5 class node{
6 public:
7 int unique(vector>& o){
8 int m = o.size(),n = o[0].size();
9 vector> f(m,vector(n));
10 for(int i = 0;i> cur;
28 cur.push_back({0,0,0});
29 cur.push_back({0,1,0});
30 cur.push_back({0,0,0});
31 cout << n.unique(cur) << endl;
32
33 return 0;
34 }
一个机器人位于一个 m x n 网格的左上角 ,m x n的网格中分布着不同的数字
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,找出路径的最小和。
1 #include
2 #include
3
4 #define N 3
5 #define M 3
6
7 int main()
8 {
9 int a[N][M] = {{1,3,1},{1,5,1},{4,2,1}};
10 int b[100][100];
11
12 b[0][0] = a[0][0];
13
14 for(int i = 1;i b[i][j-1] ? b[i][j-1]:b[i-1][j])+a[i][j];
29 }
30 }
31
32 printf("长和宽为%d,%d的网格,最小路径和为%d\n",N,M,b[N-1][M-1]);
33
34 return 0;
35 }
一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,...,aN),我们可以得到一些上升的子序列(ai1,ai2,...,aiK),
这里1≤i1 < i2 < ... < iK≤N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8)。
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
1 #include
2 #include
3
4 #define N 7
5
6 int main()
7 {
8 int max = 0;
9 int a[N],dp[N];
10 printf("输入一个数组\n");
11 for(int i = 1;i<=N;i++)
12 {
13 scanf("%d",&a[i]);
14 }
15
16 for(int i = 0;i0;j--)
24 {
25 if(a[i]>a[j]&&dp[j]>=dp[i])
26 {
27 dp[i] = dp[j]+1;
28 if(dp[i]>max)
29 {
30 max = dp[i];
31 }
32 }
33 }
34 }
35 printf("最长上升子序列的长度为%d\n",max);
36
37 return 0;
38 }
1 #include
2 #include
3 #include
4 using namespace std;
5
6 class node{
7 public:
8 int threesun(vector& nums,int target){
9 int ans = nums[0] + nums[1] + nums[2];
10 sort(nums.begin(),nums.end());
11 for(int i = 0;i cur = {-1,2,1,-4};
29 cout << n.threesun(cur,1) << endl;
30
31 return 0;
32 }