給定乙個整數陣列 a ,考慮 a 的所有非空子序列。
對於任意序列 s ,設 s 的寬度是 s 的最大元素和最小元素的差。
返回 a 的所有子串行的寬度之和。
由於答案可能非常大,請返回答案模 10^9+7。
示例:
輸入:[2,1,3]
輸出:6
解釋:子串行為 [1],[2],[3],[2,1],[2,3],[1,3],[2,1,3] 。
相應的寬度是 0,0,0,1,1,2,2 。
這些寬度之和是 6 。
1 <= a.length <= 20000
1 <= a[i] <= 20000
思路分
析:\color思路分析:
思路分析
:由題意可知子串行的寬度只與序列中的最小值、最大值有關,並且 子串行的寬度 == 兩端最值之差,「序列」和順序無關,因此為了推出數學公式,我們可以對陣列進行排序處理。
假設現在有乙個子串行a[i, i + 1, i + 2, ... j]
,由於進行了遞增排序,所以最小值為 a[i] 和最大值為a[j] ,如果我們把子序列中的某個元素移除(除兩端最值以外),這個子串行的寬度並不會改變。(因為子串行的寬度 == 兩端最值之差)那麼我們固定a[i],a[j]後,能夠產生多少個寬度為a[j] - a[i]
的子串行呢?
由於a[i] ~ a[j]中間一共有 ((j - 1) - (i + 1)) + 1 = j - i + 1個元素,每個元素都可以選擇放入序列或者不放入序列2種情況,所以一共有 2j-i+1中情況,也就是說以a[i]、a[j]為兩端為最值的子串行一共有2j-i+1個,所有的寬度綜合為 2j-i+1 * (a[j] - a[i])。
所以整個陣列的子串行寬度總和為:
進行化簡:
現在就非常好求解了吧,只涉及到2的冪運算。
LeetCode 891 子串行寬度之和
給定乙個整數陣列a,考慮a的所有非空子序列。對於任意序列 s 設 s 的寬度是 s 的最大元素和最小元素的差。返回 a 的所有子串行的寬度之和。由於答案可能非常大,請返回答案模 10 9 7。示例 輸入 2,1,3 輸出 6 解釋 子串行為 1 2 3 2,1 2,3 1,3 2,1,3 相應的寬度...
CSS 父元素寬度自適應子元素寬度之和
直接新增 width max content 宣告就 ok,之前太單純了。最近碰見這樣乙個需求,要讓橫向排列設定 x 方向的滾動條滾動檢視,原本當直接建立乙個 ifc inline,float 什麼的 就解決了,搞了半天發現搞不定 ifc 也是不能父元素寬度自適應子元素寬度之和的,因為會換行。最後用...
leetcode 判斷子串行
給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...