1. 程式人生 > >來自牛客網的一道題

來自牛客網的一道題

題目:給定一個正整數陣列,它的第 i 個元素是比特幣第 i 天的價格。如果你最多隻允許完成一筆交易(即買入和賣出一次),設計一個演算法來計算你所能獲取的最大利潤。注意你不能在買入比特幣前賣出。

題目非常簡單,基本上看完就有思路了,但是具體轉化為程式碼的時候就體現出來差距了……

#include<bits/stdc++.h>
 
using namespace std;
 
  
 
intmain() {
 
    intn, mi = INT_MAX, maxProfit = 0;
 
    while(cin >> n) {
 
        maxProfit = max(n - mi, maxProfit);
 
        mi = min(n, mi);
 
    }
 
    cout << maxProfit;
 
    return0;
 
}

沒有對比就沒有傷害,以下是我的程式碼。。。不但程式碼更長,邏輯更亂,巢狀層數還賊多。。。

#include<stdio.h>
#include<vector>
using namespace std;
class Solution {
    public :
    int solve(vector<int> &nums) {
        if(nums.size() < 2) return 0;
        int min_all = nums[0];
        int max_now = nums[0];
        int d_max = 0;
        int d_now = 0;
        for(int i=1; i<nums.size(); i++) {
            int n = nums[i];
            if(n < min_all) {
                max_now = min_all = n;
                d_now = 0;
            } else if(n > max_now) {
                d_now += n-max_now;
                max_now = n;
                if(d_now > d_max) {d_max = d_now;}
            } else {
                 
            }
        }
        return d_max;
    }
};
 
int main(void) {
    vector<int> nums;
    int n;
    while(scanf("%d", &n) == 1) {
        nums.push_back(n);
    }
    int result = Solution().solve(nums);
    printf("%d", result);
}

相關推薦

來自一道

題目:給定一個正整數陣列,它的第 i 個元素是比特幣第 i 天的價格。如果你最多隻允許完成一筆交易(即買入和賣出一次),設計一個演算法來計算你所能獲取的最大利潤。注意你不能在買入比特幣前賣出。 題目非常簡單,基本上看完就有思路了,但是具體轉化為程式碼的時候就體現出來差距了…

集系列(四)

目錄   1.高優先順序的執行緒比低優先順序的執行緒執行得更快。() 2.下列哪些語句關於 java 記憶體回收的說明是正確的? 3.Java的跨平臺特性是指它的原始碼可以在多個平臺執行。 4.關於多執行緒 5. 假設 a&nb

集系列(三)

目錄 1.關於Integer的一個問題 2.關於泛型的一道題 3.關於Integer型別超過128時的一道題 4.以下哪一個不是賦值符號? 5.關於try/catch/finally 6.關於for迴圈的執行順序問題 7.下面程式碼的輸出結果是什麼? 8.多執行緒

集系列(二)

目錄 1.在開發中使用泛型取代非泛型的資料型別(比如用ArrayList取代ArrayList),程式的執行時效能會變得更好。() 2.關於異常丟擲 3.list是一個ArrayList的物件,哪個選項的程式碼填到//todo delete處,可以在Iterator遍歷的過程中正確並

集系列(一)

1.java基本型別的預設值和取值範圍  int      0        -2^31—-2^31-1 short   0 &

:數串

今天在牛客網刷題遇到數串問題:         剛開始自己思路是取出每個數的第一位存入num_head陣列,用log10()函式求出每個數的位數存入len陣列(最後合成最大數時作為10的冪),依次找到num_head中最大到最小的數,以此來判斷每個數

day18

1.檢視本機的 IP 配置、子網掩碼、閘道器等資訊,可使用下列哪個命令?( D ) A.ping B.telnet C.trace D.ipconfig 2.下列程式碼中的錯誤是( D ) (1) public class Test (2) { (3) public s

day17

1.指明介面所用接線器的形狀和尺寸、引線數目和排列、固定和鎖定裝置等是物理層的_ 。 A.機械特性 B.電氣特性 C.功能特性 D.規程特性 2.在TCP/IP協議族的層次中,解決計算機之間通訊問題是在( B ) A.網路介面層 B.網際層 C.傳輸層 D.應用層 解析: 網路層點

day16

1.採用全雙工通訊方式,資料傳輸的方向性結構為 ( A )。 A.可以在兩個方向上同時傳輸 B.只能在一個方向上傳輸 C.可以在兩個方向上傳輸,但不能同時進行 D.以上均不對 解析: TCP提供全雙工通訊,允許通訊雙方的應用程序在任何時候都能傳送資料。 2.下面協議中 , 用於電子郵件

day15

1.下列哪些地址可用於 Internet 通訊 ?( D ) A.10.3.5.2 B.172.19.22.33 C.192.168.48.59 D.180.58.3.25 解析: A類地址中的私有地址和保留地址: ①10.0.0.0到10.255. 255.255 是私有地址(所謂的私有地

day13

1.只要給網站使用了CDN就可以防禦ARP掛馬攻擊了() A.是 B.不是 解析: CDN的全稱是Content Delivery Network,即內容分發網路。其基本思路是儘可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各處放置節點伺服

day12

1.調變解調器(MODEM)的主要功能是_C 。 A.實現PPP協議 B.串/並轉換 C.模擬訊號與數字訊號的轉換 D.曼徹斯特編碼 解析: 調變解調器是一種 計算機硬體,它能把計算機的 數字訊號翻譯成可沿普通 電話線傳送的 模擬訊號,而這些模擬訊號又可被線路另一端的另一個調變解調器接收,並

day11

1.負責電子郵件傳輸的應用層協議是 ( A ) 。 A.SMTP B.PPP C.IP D.FTP 解析: SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協議。 PPP是資料鏈路層協議。 IP是網路層協議。 FTP是檔案傳輸協議,用於實現互動式檔案傳輸功

day10

1.無分類IP地址中,網路字首越短,本地地址塊包含的地址數越多。( A ) A.正確 B.錯誤 2.完成路徑選擇功能是在 OSI 模型的 ( C ) 。 A.物理層 B.資料鏈路層 C.網路層 D.運輸層 解析: 網路層主要任務是通過路由演算法,為分組通過通訊子網選擇最適當的路徑。

day9

1.兩個主機在通訊時並不區分哪一個是請求方還是服務提供方,這種工作模式稱為 ( B )。 A.Client/Server模式 B.Peer to Peer模式 C.CSMA/CD模式 D.Browser/Server模式 解析: AD選項是客戶伺服器模式,B點對點是對等模式,C選項CSDN/

day8

1.當IP地址不夠分配的時候,對於IP地址的分配,恰當的做法是( A ) A.動態IP地址 B.靜態IP地址 C.只給部分使用者分配,限制其他使用者的使用 D.申請足夠的IP地址 解析: 動態分配IP地址 如果網路中有很多臺計算機,且又不是所有的計算機都同時使用,那麼不妨採用動態分配IP地址

day7

1.設有定義int a=3,b=4,c=5; 則以下的表示式中,值為false的是 ( D ) A.a < b && b < c B.a <= b C.a < ( b + c ) D.! ( a < b ) 2.頻分複用:所有使用者在同樣的時間佔

day6

1.下列選項中,用於在定義子類時宣告父類名的關鍵字是:( C ) A.interface B.package C.extends D.class 解析: A是介面 B是包 D是類 2.將域名轉換為IP地址是由( C )伺服器完成? A.WINS B.DHCP C.DNS D.IIS 解析:

】Python3之functools.cmp_to_key()學習

牛客網原題: 連結:https://www.nowcoder.com/questionTerminal/a6a656249f404eb498d16b2f8eaa2c60來源:牛客網設有n個正整數,將他們連線成一排,組成一個最大的多位整數。 如:n=3時,3個整數13,312,343,連成的最大整數為3433

】一次難忘的編程教訓

最小 應該 結果 uid == break 怎麽辦 切分 sum 昨天刷這樣一道編程題: --------------------------------------------------------------------------------------------