Time:O(30n) = O(n) Space:O(1) C++ class Solution { public: int totalHammingDistance(vector<int>& nums) { int ans = 0; int mask = 1; for (int i = 0; i < 30; ++i) { const int onesCount = count_if(begin(nums), end(nums), [&mask](int num) { return num & mask; }); const int zerosCount = nums.size() - onesCount; ans += onesCount * zerosCount; mask <<= 1; } return ans; } }; JAVA class Solution { public int totalHammingDistance(int[] nums) { int ans = 0; int mask = 1; for (int i = 0; i < 30; ++i) { final int onesCount = getCount(nums, mask); final int zerosCount = nums.length - onesCount; ans += onesCount * zerosCount; mask <<= 1; } return ans; } private int getCount(int[] nums, int mask) { int count = 0; for (final int num : nums) if ((num & mask) > 0) ++count; return count; } }