一條語句計算所有遞增序列的結果

2021-05-24 07:37:51 字數 1007 閱讀 9425

1.遞增序列的概念:

一串數的序列,相領兩個數之間的差值是固定的,則此數列遞增序列,如:

1,2,3,4,5,6,7,8,9,10(差1) 1,3,5,7,9,11(差2)

大家一般都會了解,它的規律是第1個數與倒數第1個數的和,與第二個數與倒數第二個數的和是一樣的。這樣可以有這樣的計算方法:

(begin + end ) * ( end - begin ) / 2 就會計算出它的所有數值的總和。

但以上情況是在數值總數量為偶數是有效的,如果是奇數,則需要加入未計算的數值:

( (begin + end ) * ( end -begin ) ) / 2 + ( begin + ( end - begin ) / 2 + 1 ),這裡的第二個括號之中就是未加入的數值。

以上算式為了簡單表示,沒有加入對數列起點和結果是否在計算範圍之中的考慮,如果起點和結束點都在計算範圍,長度應+1,如果結束點不在計算範圍,和值應-1,如下:

( ( begin + end - 1 ) * ( end -begin ) 或

( ( begin + end ) * ( end - begin + 1 )

這裡乙個數列和計算普通方法:

begin是起點,end是結束點,space是間隔:

static ulong serialnumsum2( ulong begin, ulong end, ulong space )

return sum;}

這裡是使用簡算方法實現的方法,並且經過簡化只使用一條語句來完成:

#define aligned_end( begin, end, space ) ( end - ( ( end - begin ) % space ) )//計算對齊值

static ulong serialnumsum( ulong begin, ulong end, ulong space )

可以用以下方法測試一下,結果都是正確的:

for( int i = 0; i < 100; i ++ )}}

關於計算所有連續子串行的最大和

以下是在關於計算所有連續子串行的最大和問題中最暴力的方法 def lagerset sum arr res arr 0 sum res for i in range 1,len arr if sum 0 sum sum arr i else sum arr i if sum res res sum ...

同一條語句hive和impala查詢結果不一致

今天跑py程式,第一次資料錯亂,字段對應不上 分析原因 測試單獨執行,測試單獨上傳檔案,測試hdfs客戶端上傳檔案 最後發現,多次寫入錯誤資料,導致該錶的元資料出現混亂,即使是hive的內部表,drop掉表後,重新上傳檔案到hive的相同表名,使用hive查詢沒問題,一旦使用impala查詢依舊有莫...

一條sql 語句的優化

第二個版本 一條sql搞定,使用巢狀查詢,費時2 3分鐘 select a.indexid,c.title,c.createdtime,c.intro,d.picurl,e.src,e.size,e.info from mms content index a,mms index node b,mms...