Open dushaoshuai opened 1 year ago
for i := 0; i < 100; i++ { if i%7 == 0 { // do something. } }
runners := []runner{ new(runner), new(runner), new(runner), } for i, task := range tasks { runner := runners[i%len(runners] runner.AddTask(task) }
例如,在从 0 到 9 的范围内 wrap around:
flowchart LR 0 -- +1 --> 1 -- +1 --> 2 -- +1 --> 3 -- +1 --> 4 -- +1 --> 5 -- +1 --> 6 -- +1 --> 7 -- +1 --> 8 -- +1 --> 9 -- +1 --> 0 0 -- -1 --> 9 -- -1 --> 8 -- -1 --> 7 -- -1 --> 6 -- -1 --> 5 -- -1 --> 4 -- -1 --> 3 -- -1 --> 2 -- -1 --> 1 -- -1 --> 0
仅针对这种情况,公式为 (v + 1) % (9 - 0 + 1) 和 ((v - 1) + (9 - 0 + 1)) % (9 - 0 + 1)。
(v + 1) % (9 - 0 + 1)
((v - 1) + (9 - 0 + 1)) % (9 - 0 + 1)
将适用面扩大一下,设当前值为 v,变动为 delta, wrap around 范围为 [rangeStart, rangeEnd],则:
(v - rangeStart + delta) % (rangeEnd - rangeStart + 1) + rangeStart
(v - rangeStart + delta - delta(rangeEnd - rangeStart + 1)) % (rangeEnd - rangeStart + 1) + rangeStart
(v - rangeStart + delta(rangeStart -rangeEnd)) % (rangeEnd - rangeStart + 1) + rangeStart
主要是用数组实现一个环形结构,将数组的首尾连接起来。
https://leetcode.com/explore/learn/card/queue-stack/228/first-in-first-out-data-structure/1395/
Do something every nth time
Assign tasks evenly
wrap around
例如,在从 0 到 9 的范围内 wrap around:
仅针对这种情况,公式为
(v + 1) % (9 - 0 + 1)
和((v - 1) + (9 - 0 + 1)) % (9 - 0 + 1)
。将适用面扩大一下,设当前值为 v,变动为 delta, wrap around 范围为 [rangeStart, rangeEnd],则:
(v - rangeStart + delta) % (rangeEnd - rangeStart + 1) + rangeStart
(v - rangeStart + delta - delta(rangeEnd - rangeStart + 1)) % (rangeEnd - rangeStart + 1) + rangeStart
,简化后为(v - rangeStart + delta(rangeStart -rangeEnd)) % (rangeEnd - rangeStart + 1) + rangeStart
implement a Circular Queue
主要是用数组实现一个环形结构,将数组的首尾连接起来。
https://leetcode.com/explore/learn/card/queue-stack/228/first-in-first-out-data-structure/1395/