Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb5ed682

Browse files
committed
add new files
1 parent8a6920f commitb5ed682

File tree

5 files changed

+116
-0
lines changed

5 files changed

+116
-0
lines changed

‎507. Perfect Number.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
/**
4+
如果num有约数d,则它必有约数num/d
5+
看到变态的解法:
6+
根据题目给的范围可知,范围内的完美数只有:6, 28, 496, 8128, 33550336,枚举就行了
7+
*/
8+
funccheckPerfectNumber(numint)bool {
9+
ifnum<=0 {
10+
returnfalse
11+
}
12+
sum:=0
13+
fori:=1;i*i<=num;i++ {
14+
ifnum%i==0 {
15+
sum+=i
16+
ifi*i!=num {
17+
sum+=num/i
18+
}
19+
}
20+
}
21+
returnsum-num==num
22+
}

‎523. Continuous Subarray Sum.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package main
2+
3+
/**
4+
遍历整个数组,依次加当前数组元素并将相加和求余k,求余结果只有0~k-1这k中情况,将求余结果存入Hash Table中。如果遍历到当前位置求余结果已经在Hash Table中,表明从上一求余结果相同的位置到当前位置的子数组相加和是k的倍数,否则将求余结果存入Hash Table
5+
*/
6+
funccheckSubarraySum(nums []int,kint)bool {
7+
m:=make(map[int]int)
8+
m[0]=-1
9+
sum:=0
10+
fori:=0;i<len(nums);i++ {
11+
sum+=nums[i]
12+
ifk!=0 {
13+
sum%=k
14+
}
15+
prev,ok:=m[sum]
16+
ifok {
17+
ifi-prev>1 {
18+
returntrue
19+
}
20+
}else {
21+
m[sum]=i
22+
}
23+
}
24+
returnfalse
25+
}

‎525. Contiguous Array.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package main
2+
3+
/**
4+
把所有为0的数字都替换成-1,定义一个变量sum = 0,然后我们让这个变量与数组中的每个元素逐个相加,用map记录每次相加的结果及其下标,如果在后面得到某个结果(记该结果的下标为b)是map里面已经存在的值(记该值的下标为a),那么证明sum在a~b这个范围内相加的结果为0,也就是这个范围中0与1的数量相同,然后通过下标相减得到这个范围长度。接下来我们不断更新这种范围长度的最大值便可。
5+
*/
6+
funcfindMaxLength(nums []int)int {
7+
fori:=0;i<len(nums);i++ {
8+
ifnums[i]==0 {
9+
nums[i]=-1
10+
}
11+
}
12+
ret,sum:=0,0
13+
m:=make(map[int]int)
14+
m[0]=-1
15+
fori:=0;i<len(nums);i++ {
16+
sum+=nums[i]
17+
ifv,ok:=m[sum];ok {
18+
ret=max(ret,i-v)
19+
}else {
20+
m[sum]=i
21+
}
22+
}
23+
returnret
24+
}
25+
funcmax(x,yint)int {
26+
ifx>y {
27+
returnx
28+
}
29+
returny
30+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package main
2+
3+
funcsingleNonDuplicate(nums []int)int {
4+
ret:=0
5+
fori:=0;i<len(nums);i++ {
6+
ret^=nums[i]
7+
}
8+
returnret
9+
}

‎554. Brick Wall.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package main
2+
3+
/**
4+
我们可以拿砖缝左侧砖块的总长度来标记每个砖缝,这样遍历每一行的砖块将所有砖缝位置计数后存入Hash Table中,最终遍历Hash Table找出同一纵向位置砖缝最多的地方即可。墙的总行数减同一纵向位置的最大砖缝数即是最少需要凿穿的砖块数
5+
*/
6+
7+
funcleastBricks(wall [][]int)int {
8+
m:=make(map[int]int)
9+
maxend:=0
10+
fori:=0;i<len(wall);i++ {
11+
sum:=0
12+
forj:=0;j+1<len(wall[i]);j++ {
13+
sum+=wall[i][j]
14+
ifv,ok:=m[sum];ok {
15+
m[sum]=v+1
16+
}else {
17+
m[sum]=1
18+
}
19+
maxend=max(maxend,m[sum])
20+
}
21+
}
22+
returnlen(wall)-maxend
23+
}
24+
25+
funcmax(x,yint)int {
26+
ifx>y {
27+
returnx
28+
}
29+
returny
30+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp