国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C/C++ 動態(tài)規(guī)劃面試算法題

這篇具有很好參考價值的文章主要介紹了C/C++ 動態(tài)規(guī)劃面試算法題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.買賣股票的最佳時機

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 <stdio.h>
 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;i<N;i++)
12     {
13         if(a[i] < min)
14         {
15             min = a[i];
16         }
17         else if((a[i]-min)>temp)
18         {
19             temp = a[i] - min;
20         }
21     }
22     printf("最高收益為%d元\n",temp);
23 
24     return 0;
25 }

2.盛最多水的容器

給定一個長度為 n 的整數(shù)數(shù)組?height 。有 n 條垂線,第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。

找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。

返回容器可以儲存的最大水量。

https://violentayang.blog.csdn.net/article/details/123061036

1 #include <stdio.h>
 2 #include <string.h>
 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(i<j)
11     {
12         if(a[i]<a[j])
13         {
14             sun = (j-i)*a[i]; 
15             if(sun>top)
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++實現(xiàn):

1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 
 5 class node{
 6 public:
 7     int maxsrea(vector<int>& height){
 8         int ans = 0;
 9         int l = 0,r = height.size()-1;
10         while(l<r){
11             ans = max(ans,min(height[l],height[r]) * (r-l));
12             if(height[l] < height[r]) l++;
13             else r--;
14         }
15         return ans;
16     }
17 };
18 
19 int main()
20 {
21     node n;
22     vector<int> height = {1,8,6,2,5,4,8,3,7};
23     cout << n.maxsrea(height) << endl;
24     
25     return 0;
26 }

3.不同路徑

一個機器人位于一個 m x n 網(wǎng)格的左上角 。

機器人每次只能向下或者向右移動一步。機器人試圖達到網(wǎng)格的右下角。

問總共有多少條不同的路徑?

https://blog.csdn.net/C_chengxuyuan/article/details/119980859

1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main() 
 5 {
 6    int x,y;
 7    int a[100][100];
 8    printf("輸入網(wǎng)格的長和寬\n");
 9    scanf("%d%d",&x,&y);
10    
11    for(int i = 0;i<x;i++)
12    {
13        a[i][0] = 1;
14    }
15    
16    for(int j = 0;j<y;j++)
17    {
18        a[0][j] = 1;
19    }
20    
21    for(int i = 1;i<x;i++)
22    {
23        for(int j  = 1;j<y;j++)
24        {
25            a[i][j] = a[i-1][j] + a[i][j-1];
26        }
27    }
28    
29    printf("長和寬為%d,%d的網(wǎng)格,總共有%d條不同的路徑\n",x,y,a[x-1][y-1]);
30     
31     return 0;
32 }

c++實現(xiàn):

1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 class node{
 6 public:
 7    int uniquePath(int m,int n){
 8       vector<vector<int>> f(m,vector<int>(n,1));
 9       for(int i = 1;i<m;i++){
10          for(int j = 1;j<n;j++){
11             f[i][j] = f[i-1][j] + f[i][j-1];
12          }
13       }
14       return f[m-1][n-1];
15    }
16 };
17 
18 int main()
19 {
20    int y = 3,x = 7;
21    node n;
22    cout << "長為7,寬為3的網(wǎng)格從左上角到右下角的路徑有:" << n.uniquePath(x,y);
23    
24    return 0;
25 }

?不同路徑中間有障礙物(力扣第63題)

1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 class node{
 6 public:
 7    int unique(vector<vector<int>>& o){
 8       int m = o.size(),n = o[0].size();
 9       vector<vector<int>> f(m,vector<int>(n));
10          for(int i = 0;i<m;i++){
11             for(int j = 0;j<n;j++){
12                if(o[i][j] == 1) continue;
13                if(!i&&!j) f[i][j] = 1;
14                else{
15                   if(i) f[i][j] += f[i-1][j];
16                   if(j) f[i][j] += f[i][j-1];
17                }
18             }
19          }
20          return f[m-1][n-1];
21       }
22 };
23 
24 int main()
25 {
26    node n;
27    vector<vector<int>> 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 }

4.最小路徑和

一個機器人位于一個 m x n 網(wǎng)格的左上角 ,m x n的網(wǎng)格中分布著不同的數(shù)字

機器人每次只能向下或者向右移動一步。機器人試圖達到網(wǎng)格的右下角,找出路徑的最小和。

1 #include <stdio.h>
 2 #include <string.h>
 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<N;i++)
15    {
16        b[i][0] = b[i-1][0] + a[i][0];
17    }
18    
19    for(int j = 1;j<M;j++)
20    {
21        b[0][j] = b[0][j-1] + a[0][j];
22    }
23    
24   for(int i = 1;i<N;i++)
25   {
26       for(int j  = 1;j<N;j++)
27       {
28           b[i][j] = (b[i-1][j] > b[i][j-1] ? b[i][j-1]:b[i-1][j])+a[i][j];
29       }
30   }
31    
32    printf("長和寬為%d,%d的網(wǎng)格,最小路徑和為%d\n",N,M,b[N-1][M-1]);
33     
34     return 0;
35 }

5.最長上升子序列

一個數(shù)的序列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)。

你的任務(wù),就是對于給定的序列,求出最長上升子序列的長度。文章來源地址http://www.zghlxwxcb.cn/news/detail-722934.html

1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define N 7
 5 
 6 int main() 
 7 {
 8    int max = 0;
 9    int a[N],dp[N];
10    printf("輸入一個數(shù)組\n");
11    for(int i = 1;i<=N;i++)
12    {
13        scanf("%d",&a[i]);
14    }
15    
16    for(int i = 0;i<N;i++)
17    {
18        dp[i] = 1;
19    }
20    
21    for(int i = 1;i<=N;i++)
22    {
23        for(int j = i-1;j>0;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 }

6.最接近的三數(shù)之和(力扣16題)

1 #include <iostream>
 2 #include <vector>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 class node{
 7 public:
 8     int threesun(vector<int>& nums,int target){
 9         int ans = nums[0] + nums[1] + nums[2];
10         sort(nums.begin(),nums.end());
11         for(int i = 0;i<nums.size();i++){
12             int l = i + 1,r = nums.size() - 1;
13             while(l<r){
14                 int sum = nums[i] + nums[l] + nums[r];
15                 if(sum == target) return sum;
16                 if(abs(sum-target) < abs(ans-target)) ans = sum;
17                 if(sum < target) l++;
18                 else r--;
19             }
20         }
21         return ans;
22     }
23 };
24 
25 int main() 
26 {
27     node n;
28     vector<int> cur = {-1,2,1,-4};
29     cout << n.threesun(cur,1) << endl;
30     
31     return 0;
32 }

到了這里,關(guān)于C/C++ 動態(tài)規(guī)劃面試算法題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【手撕算法|動態(tài)規(guī)劃系列No.2】leetcode面試題 08.01. 三步問題

    【手撕算法|動態(tài)規(guī)劃系列No.2】leetcode面試題 08.01. 三步問題

    個人主頁:平行線也會相交 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學習過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月12日
    瀏覽(19)
  • 【面試經(jīng)典150 | 動態(tài)規(guī)劃】零錢兌換

    【面試經(jīng)典150 | 動態(tài)規(guī)劃】零錢兌換

    【動態(tài)規(guī)劃】【數(shù)組】 322. 零錢兌換 定義狀態(tài) dp[i] 表示湊成總金額的最少硬幣個數(shù)。 狀態(tài)轉(zhuǎn)移 從小到大枚舉要湊成的金額 i ,如果當前的金額可以使用面額數(shù)組中的某個面額 coin 湊成總金額的一部分,則可以更新 d p [ i ] = m i n ( d p [ i ] , d p [ i ? c o i n ] + 1 ) dp[i] = min(dp[i

    2024年04月16日
    瀏覽(27)
  • 【leetcode刷題之路】面試經(jīng)典150題(8)——位運算+數(shù)學+一維動態(tài)規(guī)劃+多維動態(tài)規(guī)劃

    20 位運算 20.1 【位運算】二進制求和 題目地址:https://leetcode.cn/problems/add-binary/description/?envType=study-plan-v2envId=top-interview-150 ??按位逆序運算。 20.2 【位運算】顛倒二進制位 題目地址:https://leetcode.cn/problems/reverse-bits/description/?envType=study-plan-v2envId=top-interview-150 ??詳見代碼

    2024年04月16日
    瀏覽(40)
  • 【面試經(jīng)典150 | 動態(tài)規(guī)劃】交錯字符串

    【面試經(jīng)典150 | 動態(tài)規(guī)劃】交錯字符串

    本專欄專注于分析與講解【面試經(jīng)典150】算法,兩到三天更新一篇文章,歡迎催更…… 專欄內(nèi)容以分析題目為主,并附帶一些對于本題涉及到的數(shù)據(jù)結(jié)構(gòu)等內(nèi)容進行回顧與總結(jié),文章結(jié)構(gòu)大致如下,部分內(nèi)容會有增刪: Tag:介紹本題牽涉到的知識點、數(shù)據(jù)結(jié)構(gòu); 題目來源:

    2024年04月15日
    瀏覽(31)
  • LeetCode 面試打卡 4: 動態(tài)規(guī)劃 - DataWhale 導學

    動態(tài)規(guī)劃代碼實現(xiàn)需要注意的問題 數(shù)組 dp 的初始化大小不正確 ,需要根據(jù)題目中所給的數(shù)據(jù)確定好dp數(shù)組的大小。一般為[m,n]即可 數(shù)組 dp 的初始化邏輯有誤 :根據(jù)題目條件,初始化dp數(shù)組 狀態(tài)轉(zhuǎn)移方程不正確 :根據(jù)題目中的變量設(shè)定狀態(tài)轉(zhuǎn)移方程。 121. 買賣股票的最佳時

    2024年04月24日
    瀏覽(33)
  • 【算法】動態(tài)規(guī)劃 ⑧ ( 動態(tài)規(guī)劃特點 )

    【算法】動態(tài)規(guī)劃 ⑧ ( 動態(tài)規(guī)劃特點 )

    求解類型 : 動態(tài)規(guī)劃 必須是求 最值 , 可行性 , 方案數(shù) , 三者之一 , 如果求其它內(nèi)容 , 則不能使用動態(tài)規(guī)劃算法 ; 求最值 : 最大值 , 最小值 等 ; 大規(guī)模問題的結(jié)果 由 小規(guī)模問題 的計算結(jié)果 取最大值 大規(guī)模問題的結(jié)果 由 小規(guī)模問題 的計算結(jié)果 取最小值 可行性 : 是否可行

    2023年04月08日
    瀏覽(22)
  • 【LeetCode: 面試題 17.24. 最大子矩陣 | 動態(tài)規(guī)劃 】

    【LeetCode: 面試題 17.24. 最大子矩陣 | 動態(tài)規(guī)劃 】

    ?? 算法題 ?? ?? 算法刷題專欄 | 面試必備算法 | 面試高頻算法 ?? ?? 越難的東西,越要努力堅持,因為它具有很高的價值,算法就是這樣? ?? 作者簡介:碩風和煒,CSDN-Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者??,保研|國家獎學金|高中學習JAVA|大學完善JAVA開發(fā)技術(shù)棧|面試刷題|面經(jīng)八股文

    2024年02月06日
    瀏覽(31)
  • 【算法 - 動態(tài)規(guī)劃】原來寫出動態(tài)規(guī)劃如此簡單!

    【算法 - 動態(tài)規(guī)劃】原來寫出動態(tài)規(guī)劃如此簡單!

    從本篇開始,我們就正式開始進入 動態(tài)規(guī)劃 系列文章的學習。 本文先來練習兩道通過 建立緩存表 優(yōu)化解題過程的題目,對如何將 遞歸函數(shù) 修改成 動態(tài)規(guī)劃 的流程有個基本的熟悉。 用最簡單的想法完成題目要求的 遞歸 函數(shù); 定義明確 遞歸函數(shù) 的功能?。?! 分析是否存

    2024年02月21日
    瀏覽(29)
  • 60題學會動態(tài)規(guī)劃系列:動態(tài)規(guī)劃算法第三講

    60題學會動態(tài)規(guī)劃系列:動態(tài)規(guī)劃算法第三講

    簡單多狀態(tài)問題 文章目錄 一.按摩師 二.打家劫舍系列 三.刪除并獲得點數(shù) 四.粉刷房子 力扣鏈接:力扣 一個有名的按摩師會收到源源不斷的預約請求,每個預約都可以選擇接或不接。在每次預約服務(wù)之間要有休息時間,因此她不能接受相鄰的預約。給定一個預約請求序列,

    2024年02月08日
    瀏覽(24)
  • 【算法】動態(tài)規(guī)劃 ① ( 動態(tài)規(guī)劃簡介 | 自底向上的動態(tài)規(guī)劃示例 | 自頂向下的動態(tài)規(guī)劃示例 )

    【算法】動態(tài)規(guī)劃 ① ( 動態(tài)規(guī)劃簡介 | 自底向上的動態(tài)規(guī)劃示例 | 自頂向下的動態(tài)規(guī)劃示例 )

    動態(tài)規(guī)劃 , 英文名稱 Dynamic Programming , 簡稱 DP , 不是具體的某種算法 , 是一種算法思想 ; 具體的算法都有具體的步驟 , 如 : 二分法 , 其 有固定的解決步驟 , 先取一個中心點 , 判斷解在左邊還是右邊 , 然后在一邊再取一個中心點 , 再進行判定 , 該算法有具體的步驟 ; 動態(tài)規(guī)劃

    2024年01月16日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包