統計天數java版和c版
阿新 • • 發佈:2018-12-19
題目背景 統計天數
題目描述 炎熱的夏日,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;
}