【白話經典演算法系列之十三】隨機生成和為s的n個正整數——投影法
隨機生成和為s的n個正整數有很多種解法。下面講解一種比較高效且比較有趣味性的解法——投影法。
以生成和為20的4個數為例,可以先生成隨機生成0到20之間的三個數字再排序,假設得到了4,7,18。然後在x-y數軸上畫出這三個數,如下圖:
然後將這些數值投影到y軸上,可得下圖:
由圖很容易看出ab,bc,cd,de這四段的長度和肯定為20。因此ab,bc,cd,de這四段的長度即和為20的4個數,這4個數分別為4,3,11,2。
這種方法只要隨機生成n - 1個不同數,然後排序後計算兩兩差值就可以得到和為s的n個正整數,因此效率還是比較高的。下面
隨機生成和為S的N個正整數 投影法
分類 白話經典演算法系列 windows程式設計 2013 01 04 13 46 2459人閱讀收藏 舉報白話經典演算法 和為s的n個正整數 投影法隨機三趣題 白話經典演算法系列之十三 隨機生成和為s的n個正整數 投影法 隨機生成和為s的n個正整數有很多種解法。下面講解一種比較高效且比較有趣味性的...
隨機生成和為S的N個正整數 投影法
以生成和為20的4個數為例,可以先生成隨機生成0到20之間的三個數字再排序,假設得到了4,7,18。然後在x y數軸上畫出這三個數,如下圖 然後將這些數值投影到y軸上,可得下圖 由圖很容易看出ab,bc,cd,de這四段的長度和肯定為20。因此ab,bc,cd,de這四段的長度即和為20的4個數,這...
和為s的正整數序列
from typing import list deffindcontinuoussequence target int list list int i 1 滑動視窗的左邊界 j 1 滑動視窗的右邊界 sum 0 滑動視窗中數字的和 res while i target 2 ifsum target...