| 1234567891011121314151617181920212223 | 
							- func totalHammingDistanceSlow(nums []int) (dist int) {
 
- 	n := len(nums)
 
- 	for i := 0; i < n-1; i++ {
 
- 		for j := i + 1; j < n; j++ {
 
- 			dist += bits.OnesCount32(uint32(nums[i] ^ nums[j]))
 
- 		}
 
- 	}
 
- 	return
 
- }
 
- func totalHammingDistance(nums []int) (dist int) {
 
- 	n := len(nums)
 
- 	for b := 1 << 31; 1 <= b; b >>= 1 {
 
- 		k := 0
 
- 		for _, i := range nums {
 
- 			if b&i == 0 {
 
- 				k++
 
- 			}
 
- 		}
 
- 		dist += k * (n - k) // At pos b, k 0s and n-k 1s inc k*(n-k) dist
 
- 	}
 
- 	return
 
- }
 
 
  |