From 546d3b601a2be997855a0d9da2c5af567ebbfaa5 Mon Sep 17 00:00:00 2001 From: Bird Date: Thu, 28 Sep 2023 22:13:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(1356=20=E6=95=B0=E5=AD=97=E4=BA=8C?= =?UTF-8?q?=E8=BF=9B=E5=88=B61=E6=8E=92=E5=BA=8F):=20=E4=BD=BF=E7=94=A8Go?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E6=8E=92=E5=BA=8F=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... ¹æ®æ•°å­—二进制下1的数目排åº.md | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/problems/1356.æ ¹æ®æ•°å­—二进制下1的数目排åº.md b/problems/1356.æ ¹æ®æ•°å­—二进制下1的数目排åº.md index cc7a7007..c2455cf0 100644 --- a/problems/1356.æ ¹æ®æ•°å­—二进制下1的数目排åº.md +++ b/problems/1356.æ ¹æ®æ•°å­—二进制下1的数目排åº.md @@ -171,36 +171,29 @@ class Solution: ```go func sortByBits(arr []int) []int { - var tmp int - for i := 0; i < len(arr); i++ { - for j := i+1; j < len(arr); j++ { - // 冒泡排åºçš„æ‰‹æ³•,但是排åºçš„规则从比大å°å˜æˆäº†æ¯”ä½è¿ç®—1的个数 - if isCmp(arr[i], arr[j]) { - tmp = arr[i] - arr[i] = arr[j] - arr[j] = tmp - } - } + // 是å¦arr[i]<=arr[j] + // 先比较1的数é‡ï¼ŒåŽæ¯”较值本身 + cmp := func(i, j int) bool { + c1, c2 := bitCount(arr[i]), bitCount(arr[j]) + if c1 == c2 { + return arr[i] <= arr[j] + } + return c1 <= c2 } + + // 调用库函数 + // ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯å¾…排åºåˆ‡ç‰‡ï¼Œç¬¬äºŒä¸ªæ˜¯ç¬¬i使˜¯å¦å°äºŽç¬¬jä½çš„函数 + sort.Slice(arr, cmp) + return arr } -func isCmp(a, b int) bool { - bitA := bitCount(a) - bitB := bitCount(b) - if bitA == bitB { - return a > b - } else { - return bitA > bitB - } -} - -func bitCount(n int) int { - count := 0 - for n != 0 { - n &= (n-1) // 清除最低ä½çš„1 +func bitCount(num int) (count int) { + for num != 0 { + num &= num-1 // æ¯æ¬¡è¿ç®—将最å³ä¾§çš„1å˜æˆ0 count++ } + return count } ```