Skip to content

Commit 57590df

Browse files
committed
add new files
1 parent 9e50a6b commit 57590df

5 files changed

+165
-0
lines changed

474. Ones and Zeroes.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package main
2+
3+
func findMaxForm(strs []string, m int, n int) int {
4+
dp := make([][]int, m+1)
5+
for k, _ := range dp {
6+
dp[k] = make([]int, n+1)
7+
}
8+
for _, v := range strs {
9+
c0, c1 := 0, 0
10+
for i := 0; i < len(v); i++ {
11+
if v[i] == '1' {
12+
c1++
13+
} else {
14+
c0++
15+
}
16+
}
17+
if c0 > m || c1 > n {
18+
continue
19+
}
20+
for i := m; i >= c0; i-- {
21+
for j := n; j >= c1; j-- {
22+
dp[i][j] = max(dp[i][j], dp[i-c0][j-c1]+1)
23+
}
24+
}
25+
}
26+
return dp[m][n]
27+
}
28+
29+
func max(x, y int) int {
30+
if x > y {
31+
return x
32+
}
33+
return y
34+
}

491. Increasing Subsequences.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package main
2+
3+
var res [][]int
4+
5+
func isUsed(nums []int, start, index int) bool {
6+
for i := start; i < index; i++ {
7+
if nums[i] == nums[index] {
8+
return true
9+
}
10+
}
11+
return false
12+
}
13+
14+
func findSubsequences(nums []int) [][]int {
15+
res = [][]int{}
16+
dfs(nums, 0, []int{})
17+
return res
18+
19+
}
20+
21+
func dfs(nums []int, start int, tmp []int) {
22+
if len(tmp) > 1 {
23+
res = append(res, tmp)
24+
}
25+
if start == len(nums) {
26+
return
27+
}
28+
for i := start; i < len(nums); i++ {
29+
if len(tmp) > 0 && nums[i] < tmp[len(tmp)-1] {
30+
continue
31+
}
32+
if i > start && isUsed(nums, start, i) {
33+
continue
34+
}
35+
tmp = append(tmp, nums[i])
36+
dfs(nums, i+1, tmp)
37+
tmp = tmp[:len(tmp)-1]
38+
}
39+
}

496. Next Greater Element I.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+
nums1 是nums2的子集,因此find方法可以找到nums1中的每个元素在nums2中的位置
5+
*/
6+
func nextGreaterElement(nums1 []int, nums2 []int) []int {
7+
ret := make([]int, len(nums1))
8+
for i := 0; i < len(nums1); i++ {
9+
index := find(nums2, nums1[i])
10+
for j := index; j < len(nums2); j++ {
11+
if nums2[j] > nums1[i] {
12+
ret[i] = nums2[j]
13+
break
14+
}
15+
}
16+
if ret[i] == 0 {
17+
ret[i] = -1
18+
}
19+
}
20+
return ret
21+
}
22+
23+
func find(A []int, a int) int {
24+
for i := 0; i < len(A); i++ {
25+
if A[i] == a {
26+
return i
27+
}
28+
}
29+
return -1
30+
}

498. Diagonal Traverse.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package main
2+
3+
func findDiagonalOrder(matrix [][]int) []int {
4+
if len(matrix) == 0 {
5+
return []int{}
6+
}
7+
r, c := 0, 0
8+
m, n := len(matrix), len(matrix[0])
9+
ret := make([]int, m*n)
10+
for i := 0; i < m*n; i++ {
11+
ret[i] = matrix[r][c]
12+
if (r+c)%2 == 0 {
13+
if c == n-1 {
14+
r++
15+
} else if r == 0 {
16+
c++
17+
} else {
18+
r--
19+
c++
20+
}
21+
} else {
22+
if r == m-1 {
23+
c++
24+
} else if c == 0 {
25+
r++
26+
} else {
27+
r++
28+
c--
29+
}
30+
}
31+
}
32+
return ret
33+
}

503. Next Greater Element II.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
/**
4+
把nums复制两倍,保证从任何一个位置开始,后面包含完整的数据
5+
*/
6+
7+
func nextGreaterElements(nums []int) []int {
8+
l := len(nums)
9+
l2 := 2 * l
10+
ret := make([]int, l)
11+
index := make([]int, l2)
12+
for i := l; i < l2; i++ {
13+
index[i] = i - l
14+
}
15+
cur := l
16+
for i := l - 1; i >= 0; i-- {
17+
for cur < l2 && nums[index[cur]] <= nums[i] {
18+
cur++
19+
}
20+
if cur == l2 {
21+
ret[i] = -1
22+
} else {
23+
ret[i] = nums[index[cur]]
24+
}
25+
cur--
26+
index[cur] = i
27+
}
28+
return ret
29+
}

0 commit comments

Comments
 (0)