每日一題之 面試題 幸運巧克力(字首和 hash)

2021-08-30 18:02:22 字數 955 閱讀 1516

題目描述

思路:注意到每個元素都是 x >= 0, 所以該陣列的字首和是遞增的。要找到連續的子串行之和等於k 即找到 sum[i] - sum[j] = k 且 0 <= j < i , 兩重for迴圈會超時,注意到字首和是遞增的,那麼將上式改寫成 sum[i] - k = sum[j] ,這時候只要將字首和對映成下標,這樣只需要一重for迴圈,也就是遍歷sum[i]的時候,只要檢視mp[sum[i] - k] 是否存在,如果存在就存在一組解,且起點是 j+1 終點是 i。

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+7;

typedef

long

long llint;

llint a[maxn]

;llint sum[maxn]

;map

int>mp;

intmain()

else

sum[i]

= sum[i-1]

+ a[i]

; mp[sum[i]

]= i;}if

(sum[n]

< k)

else

}else

if(sum[i]

== k)}}

cout << l <<

" "<< r << endl;

}return0;

}

每日一題 分巧克力

分巧克力 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi wi的方格組成的長方形。為了公平起見,小明需要從這n塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 形狀是正方形,邊長是整數 大小相同 例如一塊 6 5 的巧克力可以...

每日小記之面試寶典(面試題)

所有團隊成員都在單個主幹分支上進行開發。發布時,先考慮使用標籤 tag,如果打標籤不能滿足要求,則從主幹建立發布分支。bug在主幹上修復,然後挑選時機發布到 發布分支上 master 分支中包含的是可以部署到生產環境中的 這一點和 github flow 是相同的 develop 分支中包含的是下個...

一題多解 面試題

最近在其他論壇上看到幾個的面試題,這些天,qq群內的人都在討論怎麼解答才最簡單,下面列出題目 檔案a 檔案b a b c a b c b c a b c a c b a c a b a a a 1 1 1 b b b 2 2 2 c c c 3 3 3 要求合併2個檔案如下 a b c a b c ...