跳转至

03 Counting Bits — Interview English Script (C++)

Source aligned with: docs/18_Bit_Manipulation/03_Counting_Bits.md

Quick links: Source Solution · Chapter Script Index · Global Index

1) 30-second problem restatement script

English line Traditional Chinese meaning (short) Interview stage
Let me restate Counting Bits. 我先重述 Counting Bits。 Restatement
Given n, we return array ans of length n plus one. 給定 n,要回傳長度 n+1 的陣列 ans。 Restatement
ans[i] is number of one bits in i for all zero to n. ans[i] 代表 i 的 1 位元數,i 從 0 到 n。 Restatement
We should do better than calling popcount for each number. 不能每個數都獨立 popcount 那麼慢。 Restatement
I will use dynamic programming relation on bits. 我會用位元關係做動態規劃。 Restatement
Formula is dp[i] equals dp[i shifted right one] plus low bit. 公式是 dp[i]=dp[i>>1]+(i&1)。 Restatement

2) Clarifying questions (5 lines)

English line Traditional Chinese meaning (short) Interview stage
Is n non-negative and reasonably bounded? n 是否為非負且在合理範圍? Clarify
Do you expect O(n) time overall? 是否預期整體 O(n) 時間? Clarify
Is O(n) output array space acceptable? O(n) 輸出陣列空間是否可接受? Clarify
Can I use either shift formula or offset formula? 我可用 shift 公式或 offset 公式嗎? Clarify
Should ans[0] explicitly be zero? ans[0] 是否要明確設為 0? Clarify

3) Approach discussion

Brute force (3 lines)

English line Traditional Chinese meaning (short) Interview stage
Brute force runs hammingWeight for each i from zero to n. 暴力法是對 0..n 每個 i 都跑 hammingWeight。 Approach
That leads to about O(n log n) bit work in practice. 實務位元工作量約 O(n log n)。 Approach
We can do linear DP by reusing previous answers. 我們可重用前面結果做到線性 DP。 Approach

Optimized approach (5 lines)

English line Traditional Chinese meaning (short) Interview stage
Create dp array size n plus one with dp[0] equals zero. 建立 dp 長度 n+1,dp[0]=0。 Approach
For i from one to n, compute dp[i] from smaller index. i 從 1 到 n,由較小索引推得 dp[i]。 Approach
Right shift removes least significant bit, so dp[i>>1] already known. 右移會去掉最低位,因此 dp[i>>1] 已知。 Approach
Add i and one to include removed low bit when it is one. 再加上 i&1 補回被去掉的最低位。 Approach
This gives O(n) time and O(n) space. 這樣可達 O(n) 時間與 O(n) 空間。 Approach

4) Coding-and-speaking script (line-by-line, in coding order)

English line Traditional Chinese meaning (short) Interview stage
I initialize vector dp with n plus one zeros. 我初始化長度 n+1 的 dp 全 0。 Coding
dp[0] stays zero by definition. dp[0] 依定義就是 0。 Coding
I loop i from one to n. 我把 i 從 1 迴圈到 n。 Coding
Compute half as i shifted right one. 先算 half=i>>1。 Coding
Compute low as i and one. 再算 low=i&1。 Coding
Set dp[i] to dp[half] plus low. 設 dp[i]=dp[half]+low。 Coding
After loop, return dp. 迴圈後回傳 dp。 Coding

5) Dry-run script using one sample input

English line Traditional Chinese meaning (short) Interview stage
Let me dry-run n equals five. 我用 n=5 手跑。 Dry-run
dp[0] is zero. dp[0]=0。 Dry-run
i one gives dp[1]=dp[0]+1 equals one. i=1,dp[1]=dp[0]+1=1。 Dry-run
i two gives dp[2]=dp[1]+0 equals one. i=2,dp[2]=dp[1]+0=1。 Dry-run
i three gives dp[3]=dp[1]+1 equals two. i=3,dp[3]=dp[1]+1=2。 Dry-run
i four gives dp[4]=dp[2]+0 equals one. i=4,dp[4]=dp[2]+0=1。 Dry-run
i five gives dp[5]=dp[2]+1 equals two. i=5,dp[5]=dp[2]+1=2。 Dry-run
Final array is [0,1,1,2,1,2]. 最終陣列是 [0,1,1,2,1,2]。 Dry-run

6) Edge/corner test script (at least 4 cases)

English line Traditional Chinese meaning (short) Interview stage
Case one: n equals zero. 案例一:n=0。 Edge test
Case two: n equals one. 案例二:n=1。 Edge test
Case three: powers of two boundaries like 7 to 8 transition. 案例三:2 的冪邊界如 7 到 8 轉換。 Edge test
Case four: larger n for performance sanity. 案例四:較大 n 的效能檢查。 Edge test
Case five: random spot checks against popcount. 案例五:隨機點位與 popcount 對照。 Edge test

7) Complexity script

Short version (2 lines)

English line Traditional Chinese meaning (short) Interview stage
Time complexity is O(n). 時間複雜度是 O(n)。 Complexity
Space complexity is O(n) for output array. 空間複雜度是 O(n)(輸出陣列)。 Complexity

Full version (4 lines)

English line Traditional Chinese meaning (short) Interview stage
We compute each dp[i] once from O(1) operations. 每個 dp[i] 只計算一次且是 O(1) 操作。 Complexity
There are n values from one to n. 需計算的值有 n 個(1 到 n)。 Complexity
So runtime is linear O(n). 因此時間是線性 O(n)。 Complexity
DP array of size n plus one dominates memory usage. 記憶體主要是長度 n+1 的 DP 陣列。 Complexity

8) If stuck rescue lines (10 lines)

English line Traditional Chinese meaning (short) Interview stage
Let me derive relation from binary right shift. 我先從二進位右移推導關係式。 If stuck
i shifted right one removes the last bit. i>>1 會移除最後一位。 If stuck
The removed bit is exactly i and one. 被移除那位正是 i&1。 If stuck
So count(i) equals count(i>>1) plus i&1. 所以 count(i)=count(i>>1)+(i&1)。 If stuck
This means we can fill dp left to right. 代表可由左到右填 dp。 If stuck
Base case dp[0] is zero. 基底 dp[0]=0。 If stuck
Let me check i equals five quickly. 我快速驗證 i=5。 If stuck
five is one-zero-one so answer should be two. 5 是 101,所以答案應是 2。 If stuck
Formula gives dp[2]+1 which is two. 公式給 dp[2]+1=2。 If stuck
Great, recurrence is confirmed. 很好,遞推式已確認。 If stuck

9) Final wrap-up lines (5 lines)

English line Traditional Chinese meaning (short) Interview stage
I solved it with linear DP on bit relation. 我用位元關係的線性 DP 解題。 Wrap-up
Recurrence dp[i]=dp[i>>1]+(i&1) is the key. 關鍵遞推是 dp[i]=dp[i>>1]+(i&1)。 Wrap-up
It avoids repeated full popcount calls. 這可避免重複完整 popcount。 Wrap-up
Complexity is O(n) time and O(n) space. 複雜度是 O(n) 時間、O(n) 空間。 Wrap-up
This is the standard accepted interview approach. 這是面試常見標準解法。 Wrap-up

10) Ultra-short cheat sheet (20 lines total)

English line Traditional Chinese meaning (short) Interview stage
Goal: output bit counts for all values zero..n. 目標:輸出 0..n 每個數的 1 位元數。 Cheat sheet
Use DP array size n+1. 用長度 n+1 的 DP 陣列。 Cheat sheet
Base dp[0]=0. 基底 dp[0]=0。 Cheat sheet
For i in 1..n. i 從 1 到 n。 Cheat sheet
dp[i]=dp[i>>1]+(i&1). dp[i]=dp[i>>1]+(i&1)。 Cheat sheet
i>>1 drops last bit. i>>1 會去掉末位。 Cheat sheet
i&1 tells if dropped bit is one. i&1 告訴末位是否為 1。 Cheat sheet
Return dp. 回傳 dp。 Cheat sheet
Example n=2 => [0,1,1]. 範例 n=2 => [0,1,1]。 Cheat sheet
Example n=5 => [0,1,1,2,1,2]. 範例 n=5 => [0,1,1,2,1,2]。 Cheat sheet
Time O(n). 時間 O(n)。 Cheat sheet
Space O(n). 空間 O(n)。 Cheat sheet
Common bug: wrong loop start at 0 causing self-reference confusion. 常見錯誤:從 0 開始導致遞推混亂。 Cheat sheet
Common bug: forgetting parentheses in bit ops. 常見錯誤:位運算括號漏寫。 Cheat sheet
Offset formula is equivalent alternative. offset 公式是等價替代。 Cheat sheet
Validate power-of-two boundaries. 驗證 2 的冪邊界。 Cheat sheet
Output itself costs O(n) memory. 輸出本身就需 O(n) 記憶體。 Cheat sheet
Keep explanation recurrence-first. 解釋時先講遞推最清楚。 Cheat sheet
No heavy bit tricks needed beyond shift and and. 只需 shift 與 and,無需複雜技巧。 Cheat sheet
Clean and interview-friendly solution. 解法乾淨且面試友善。 Cheat sheet

Quality check

  • Consistency with source solution: ✅ DP with shift/LSB relation.
  • Constraint alignment: ✅ O(n) target achieved.
  • Language simplicity: ✅ Structured spoken format.