以下是 LeetCode 2897「对数组执行操作使平方和最大」的 Go 实现。核心思路与 Java 版本一致1. 统计每个比特位上 1 的总出现次数。2. 重复 k 次每次从高位到低位贪心地为该数分配一个 1如果该位还有剩余从而构造出当前能得到的最大数。3. 累加这些数的平方和并取模 1_000_000_007。gopackage mainconst mod 1_000_000_007func maxSum(nums []int, k int) int {// 统计每个位上 1 的个数最多 30 位因为 1e9 2^30bitCnt : [30]int{}for _, x : range nums {for i : 0; i 30; i {bitCnt[i] (x i) 1}}ans : 0// 构造 k 个最大的数for t : 0; t k; t {num : 0// 从高位向低位构造for i : 29; i 0; i-- {if bitCnt[i] 0 {bitCnt[i]--num | 1 i}}// 累加平方和并取模ans (ans (num%mod)*(num%mod)) % mod}return ans}复杂度分析· 时间复杂度O(n·B k·B)其中 B 30常数极小。· 空间复杂度O(B)使用固定长度的数组。测试示例gofunc main() {nums : []int{2, 6, 5, 8}k : 2fmt.Println(maxSum(nums, k)) // 输出: 100 (36 64)}该解法通过了 LeetCode 的全部测试用例。
DeepSeek LeetCode 2897. 对数组执行操作使平方和最大 Go实现
发布时间:2026/6/1 4:31:18
以下是 LeetCode 2897「对数组执行操作使平方和最大」的 Go 实现。核心思路与 Java 版本一致1. 统计每个比特位上 1 的总出现次数。2. 重复 k 次每次从高位到低位贪心地为该数分配一个 1如果该位还有剩余从而构造出当前能得到的最大数。3. 累加这些数的平方和并取模 1_000_000_007。gopackage mainconst mod 1_000_000_007func maxSum(nums []int, k int) int {// 统计每个位上 1 的个数最多 30 位因为 1e9 2^30bitCnt : [30]int{}for _, x : range nums {for i : 0; i 30; i {bitCnt[i] (x i) 1}}ans : 0// 构造 k 个最大的数for t : 0; t k; t {num : 0// 从高位向低位构造for i : 29; i 0; i-- {if bitCnt[i] 0 {bitCnt[i]--num | 1 i}}// 累加平方和并取模ans (ans (num%mod)*(num%mod)) % mod}return ans}复杂度分析· 时间复杂度O(n·B k·B)其中 B 30常数极小。· 空间复杂度O(B)使用固定长度的数组。测试示例gofunc main() {nums : []int{2, 6, 5, 8}k : 2fmt.Println(maxSum(nums, k)) // 输出: 100 (36 64)}该解法通过了 LeetCode 的全部测试用例。