1. 程式人生 > >統計天數java版和c版

統計天數java版和c版

題目背景 統計天數

題目描述 炎熱的夏日,KC非常的不爽。他寧可忍受北極的寒冷,也不願忍受廈門的夏天。最近,他開始研究天氣的變化。他希望用研究的結果預測未來的天氣。

經歷千辛萬苦,他收集了連續N(1<=N<=10^7)天的最高氣溫資料。

現在,他想知道最高氣溫一直上升的最長連續天數。

輸入輸出格式 輸入格式: *1行:一個整數N。1<=N<=10^7

*2行:N個空格隔開的整數,表示連續N天的最高氣溫。0<=最高氣溫<=10^9。

輸出格式: *1行:一個整數,表示最高氣溫一直上升的最長連續天數。

輸入輸出樣例 輸入樣例#1: 10 1 2 3 2 4 5 6 8 5 9 輸出樣例#1: 5

這道題不難,不過我卡了很久。開始使用的是java,結果直接給我爆記憶體了,是真的很氣,又是縮程式碼也沒有用,後來轉換成c就過了。 這個告訴我,c語言的效率是真的高,而java在效能方面差了不是一點兩點。

思路: 一開始我是建立了兩個陣列,一個數組存值,另一個數組存的是當前天數的溫度是否大於前一天,如果是,則1,不是則0.設定一個全域性sum儲存最長升溫天數和中間值a1儲存當前的升溫天數。 過程: 遍歷第二個陣列,遇到0就判斷當前a1是否大於sum是則覆蓋。 注意起始0的天也算升溫天數中的一天。

後來爆記憶體了。就取消了存0 1的陣列。 再後來又爆記憶體了,又取消了儲存資料的陣列。 結果又爆了,心態也爆炸了。 後來想想也許是語言的問題,果然,換了C分分鐘AC,而且自認為是暴力中最簡單的答案了。

直接擼程式碼:java版:

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        int sum = 0,a1,a2=-1,temp=0, num = scanner.nextInt();
        for(int i=0;i<num;i++){
            a1 = scanner.nextInt();
            if(a1>a2){
                temp++;
            }else{
                if(temp>sum){
                    sum=temp;
                }
                temp=1;
            }
            a2=a1;
        }
        System.out.print(sum);
        return;
    }
}

c語言版:

#include <stdio.h>

int main()
{
        int sum = 0,a1,a2=-1,temp=0, num ;
		scanf("%d",&num);
        for(int i=0;i<num;i++){
            scanf("%d",&a1);
            if(a1>a2){
                temp++;
            }else{
                if(temp>sum){
                    sum=temp;
                }
                temp=1;
            }
            a2=a1;
        }
        printf("%d\n",sum);
        return 0;
}