Skip to content

Commit

Permalink
贪心算法求最大值
Browse files Browse the repository at this point in the history
  • Loading branch information
yezihack committed Dec 6, 2019
1 parent b8b74c7 commit 7de5964
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 2 deletions.
40 changes: 39 additions & 1 deletion 11.串结构/02.BF算法.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ BF算法,即简单匹配算法,也称暴力算法(brute-force)
*/
package main

import "fmt"
import (
"fmt"
)

//s是主串, t子串
//返回子串出现在主串的位置,如果未匹配到则返回-1
Expand All @@ -32,6 +34,42 @@ func BFSearch(s, t string) int {
}
return -1
}

//BF算法Brute Force暴力匹配算法,又叫朴素匹配算法
func BF(s, t string) int {
n, m := 0, 0 //申请二个指针, n是s主串的指针, m是t模式串的指针
for n < len(s) && m < len(t) {
if s[n] == t[m] { //判断指针位置的字符是否相等,如果相等则指针向前移动
n ++
m ++
} else {//否则主串位置回到上次匹配位置的前一位, 子串位置回到0位置,
n = n - m + 1
m = 0
}
}
if m >= len(t) {//m指针移动大于等于子串长度,说明匹配成功
return n-len(t) //返回n指针减去子串t的长度就是匹配子串的开始位置
}
return -1 //否则匹配不成功
}

func Bfs(s, t string) int {
n, m := 0, 0
for n < len(s) && m < len(t) {
if s[n] == t[m] {
n ++
m ++
} else {
n = n - m + 1
m = 0
}
}
if m >= len(t) {
return n - len(t)
}
return -1
}
func main() {
fmt.Println(BFSearch("aabbcc", "abb"))
fmt.Println(BFS("aabbcc", "abb"))
}
2 changes: 2 additions & 0 deletions 11.串结构/04.Trie树.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package main
//Trie树,一种多叉树, 也称前缀树,字典树.
11 changes: 10 additions & 1 deletion 11.串结构/char_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package main

import "testing"
import (
"github.com/yezihack/algo/00.src"
"testing"
)

func TestBFSearch(t *testing.T) {
tests := []struct {
Expand Down Expand Up @@ -36,3 +39,9 @@ func TestBFSearch(t *testing.T) {
}
}
}

func TestBFS(t *testing.T) {
src.Asset(1, t, 2, Bfs("abcdefg", "cde"))
src.Asset(2, t, 0, Bfs("abcdefg", "abc"))
src.Asset(3, t, 5, Bfs("abcdefg", "fg"))
}
39 changes: 39 additions & 0 deletions 21.贪心思想/01.求最大值.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package _1_贪心思想

import (
"strconv"
)

//问题描述: 给你一个整数 n,使得从 n 中删除 k 个数字之后的数字最大。

//如果 1432219 整数, 删除3个数, 得到4329最大值

//使用贪心算法求得,时间复杂度O(n*m)
func GetMaxNumber(n, count int) int {
//先将数字转整形数组
s := strconv.Itoa(int(n))
b := make([]int, len(s))
for k, v := range s {//转换成数字数组
b[k], _ = strconv.Atoi(string(v))
}
for i := 0; i < count; i ++ {
min := b[0]
k := 0
for key, v := range b {
if v < min {//查找最小值
min = v//最小值
k = key //记录下标
}
}
if k >= 0 {
b = append(b[:k], b[k+1:]...)//最小值从下标中删除掉
}
}
//数字数组转换成整数
result := ""
for i := 0; i < len(b); i++ {
result += strconv.Itoa(b[i])
}
v, _ := strconv.Atoi(result)
return v
}
13 changes: 13 additions & 0 deletions 21.贪心思想/test_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package _1_贪心思想

import (
"github.com/yezihack/algo/00.src"
"testing"
)

func TestGetMaxNumber(t *testing.T) {
src.Asset(1, t, 4329, GetMaxNumber(1432219, 3))
src.Asset(2, t, 439, GetMaxNumber(1432219, 4))
src.Asset(3, t, 49, GetMaxNumber(1432219, 5))
src.Asset(4, t, 21, GetMaxNumber(111121, 4))
}

0 comments on commit 7de5964

Please sign in to comment.