問題描述:已知乙個已經從小到大排序的陣列,這個陣列中的乙個平台就是連續的一串值相同的元素,並且這一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。編寫乙個程式,接收乙個陣列,把這個陣列中最長的平台找出來。在上面的例子中3.3.3就是該陣列中最長的平台。
我的思路:用distance變數表示平台的長度,從陣列target中的第i個數開始,比較target[i]與target[i+distance],如果相等,就distance++;如果不等,就將i+=distance.這樣迴圈下去,知道i+distance==陣列長度為止。這樣的演算法的時間複雜度是o(n),而且一般情況只會執行少於n的次數。**如下:
1 #include 2#define max 100034
void max_platform(int *target,int
len);56
intmain()7;
9int len=sizeof(test)/sizeof(int
);
10max_platform(test,len);
11return0;
12}1314
void max_platform(int *target,int
len)15;
18 result[0]=1;19
inti,j;
20int count=0;21
for(i=0;i+distance2229
//列印出最長的平台
30for(i=0;i)
3139
}40 printf("
\n\ncount:%d\n
",count);
41 }
我還在資料上查到另外一種技巧(思路與我的思路很類似):l是平台長度,從第i個數開始,迴圈比較target[i]與target[i-l]是否相等。如果相等,則l++;如果不等,則繼續迴圈。**如下:
1for(int i=1;i)
2
2023年4月1 2日學習記錄
一 設計模式 1,享元模式 享元模式 英語 flyweight pattern 是一種軟體設計模式。它使用共享物件,用來盡可能減少記憶體使用量以及分享資訊給盡可能多的相似物件 它適合用於當大量物件只是重複因而導致無法令人接受的使用大量記憶體。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部資...
等值數目 2023年12月26日
問題描述 已知兩個整數陣列f與g,它們的元素都已經從小到大排列好,而且兩個陣列中的元素都各不相同。例如,f中有1,3,4,7,9,而g中有3,5,7,8,10。試編寫程式算出這兩個陣列之間有多少組相同的元素。就這個例子而言,f 1 與g 0 是一組,f 3 與g 2 是一組。我的思路 關鍵點還是 元...
求質數 2023年12月29日
昨天太忙,沒有時間做乙個題,先記著,明天來補。問題描述很簡單,就是求n之內的所有質數並且列印出來。思路 求質數有很多方法,我這裡用一種比較高效的方法。我一步一步地說明方法。1.比如判斷乙個數num是否為質數,那麼就用num去對 i i從2開始 直到根號num 取模,如果都不能整除就說明num是質數。...