邓心一 6 éve
szülő
commit
977fa9989b

+ 55 - 2
medium/491.increasing-subsequences.go

@@ -1,3 +1,56 @@
-func findSubsequences(nums []int) [][]int {
-    
+type none struct{}
+
+func findSubsequencesDP(nums []int) (ans [][]int) {
+	dp := make([][]int, 0)
+	set := make(map[string]none)
+	for _, i := range nums {
+		for _, a := range dp {
+			if a[len(a)-1] <= i {
+				arr := append(a, i)
+				key := arr2str(arr)
+				if _, ok := set[key]; !ok {
+					dp = append(dp, arr)
+					ans = append(ans, arr)
+					set[key] = none{}
+				}
+			}
+		}
+		key := arr2str([]int{i})
+		if _, ok := set[key]; !ok {
+			dp = append(dp, []int{i})
+			set[key] = none{}
+		}
+	}
+	return
+}
+
+func arr2str(arr []int) string {
+	var sb strings.Builder
+	for _, i := range arr {
+		sb.WriteString(strconv.Itoa(i))
+		sb.WriteRune(',')
+	}
+	return sb.String()
+}
+
+func findSubsequencesDFS(nums []int) (ans [][]int) {
+	dfs(nums, len(nums), 0, make([]int, 0), &ans)
+	return
+}
+
+func dfs(nums []int, n int, s int, cur []int, ans *[][]int) {
+	set := make(map[int]bool)
+	for i := s; i < n; i++ {
+		if l := len(cur); l != 0 && nums[i] < cur[l-1] {
+			continue
+		} else if _, ok := set[nums[i]]; ok {
+			continue
+		}
+		set[nums[i]] = true
+		nxt := append(cur, nums[i])
+		if 2 <= len(nxt) {
+			*ans = append(*ans, nxt)
+		}
+		dfs(nums, n, i+1, nxt, ans)
+	}
 }

+ 15 - 0
medium/494.target-sum.go

@@ -0,0 +1,15 @@
+func findTargetSumWays(nums []int, S int) (ans int) {
+	dfs(nums, len(nums), 0, 0, S, &ans)
+	return
+}
+
+func dfs(nums []int, n int, i int, sum int, S int, ans *int) {
+	if i == n {
+		if sum == S {
+			(*ans)++
+		}
+		return
+	}
+	dfs(nums, n, i+1, sum+nums[i], S, ans)
+	dfs(nums, n, i+1, sum-nums[i], S, ans)
+}

+ 16 - 0
medium/495.teemo-attacking.go

@@ -0,0 +1,16 @@
+func findPoisonedDuration(timeSeries []int, duration int) (sum int) {
+	n := len(timeSeries)
+	if n == 0 {
+		return
+	}
+	for i := 1; i < n; i++ {
+		gap := timeSeries[i] - timeSeries[i-1]
+		if duration <= gap {
+			sum += duration
+		} else {
+			sum += gap
+		}
+	}
+	sum += duration
+	return
+}