随手写

求两个递增数组的交集元素

func IntersectionOfTwoSortedArray(a,b []int) []int {
    var res []int
    var i,j = 0,0
    aLen,bLen := len(a),len(b)

    for i < aLen && j < bLen {
        if a[i] == b[j] {
            res = append(res,a[i])
            i++
            j++
        } else if a[i] < b[j] {
            i++
        } else  {
            j++
        }
    }
    return res
}

小马过河

// 定义一个节点结构体
type point struct {
    i,j int
}
// 定义一个方向变量,用来表示小马下一步可以去的几个方向点
var dirs  = [4] point{
    {1,-2},{2,-1},{2,1},{1,2},
}
// 为point结构体实现移动一步的方法
func (p point) move(dir point) point {
    return point{p.i+dir.i,p.j+dir.j}
}
// 为point结构体实现一个 "在一个二维数组范围内判断某一个点p是否溢出(越界)" 的方法
func (p point) overFlow(temp [][]int) (bool){
    // 检查行是否越界
    if p.i < 0 || p.i >=len(temp) {
        return true
    }
    // 检查列是否越界
    if p.j < 0 || p.j >= len(temp[p.i]) {
        return true
    }
    return false
}

// 过河函数,N*M的过河矩阵

func CrossTheRiver(riverMatrix [][]int) int {

    var min int
    min = 99999
    for i:=0;i<len(riverMatrix[0]) ;i++  {
        realMin := minOf4Tree(point{0,i},riverMatrix)
        if  realMin < min {
            min = realMin
        }
    }
    return min
}

// 因为每一个点都可以去到四个点(如果小马可以后退的话就是8个点了),所以我这里伪造一个四叉树的概念😂,求四叉树的最小路径和
func minOf4Tree(p point,m [][]int) int {
    if over := p.overFlow(m);!over {
        var min1,min2,min3,min4 int
        min1 = 99999
        min2 = 99999
        min3 = 99999
        min4 = 99999
        if over1,over2,over3,over4 := p.move(dirs[0]).overFlow(m),p.move(dirs[1]).overFlow(m),p.move(dirs[2]).overFlow(m),p.move(dirs[3]).overFlow(m); over1 && over2 && over3 && over4 {
            return m[p.i][p.j]

        }

        if over1,over2,over3,over4 := p.move(dirs[0]).overFlow(m),p.move(dirs[1]).overFlow(m),p.move(dirs[2]).overFlow(m),p.move(dirs[3]).overFlow(m); !over1 && over2 && over3 && over4 {
            return m[p.i][p.j]+minOf4Tree(p.move(dirs[0]),m)

        }

        if over1,over2,over3,over4 := p.move(dirs[0]).overFlow(m),p.move(dirs[1]).overFlow(m),p.move(dirs[2]).overFlow(m),p.move(dirs[3]).overFlow(m); over1 && !over2 && over3 && over4 {
            return m[p.i][p.j]+minOf4Tree(p.move(dirs[1]),m)

        }
        if over1,over2,over3,over4 := p.move(dirs[0]).overFlow(m),p.move(dirs[1]).overFlow(m),p.move(dirs[2]).overFlow(m),p.move(dirs[3]).overFlow(m); over1 && over2 && !over3 && over4 {
            return m[p.i][p.j]+minOf4Tree(p.move(dirs[2]),m)

        }
        if over1,over2,over3,over4 := p.move(dirs[0]).overFlow(m),p.move(dirs[1]).overFlow(m),p.move(dirs[2]).overFlow(m),p.move(dirs[3]).overFlow(m); over1 && over2 && over3 && !over4 {
            return m[p.i][p.j]+minOf4Tree(p.move(dirs[3]),m)

        }

        min1 = minOf4Tree(p.move(dirs[0]),m)
        min2 = minOf4Tree(p.move(dirs[1]),m)
        min3 = minOf4Tree(p.move(dirs[2]),m)
        min4 = minOf4Tree(p.move(dirs[3]),m)
        if min1 > min2 {
            min1 = min2
        }
        if min3 > min4 {
            min3 = min4
        }
        if min1 > min3 {
            min1 = min3
        }
        if min1 != 99999 {
            return m[p.i][p.j]+min1
        } else {
            return m[p.i][p.j]
        }


    }
    return 99999
}

斗牛

// 5张牌为一手牌,定义一手牌结构体
type hands [5] int
// 将T字符和花牌进行牌点值的转换
func (h *hands) transfer2SingleChar()  {
    for i:=0;i<5 ;i++  {
        if h[i] == 84/*'T'*/ || h[i] == 74/*'J'*/ || h[i] == 81/*'Q'*/ || h[i] == 75/*'K'*/ {
            h[i] = 10
        }
        if h[i] == 65/*'A'*/ {
            h[i] = 1 // 设A的值为1
        }
    }
}
// 把5张牌分成两部分,第一部分表示是否含有牛、第二部分是剩余的两张副牌的和对10的模值
// 如果第一部分返回true 说明有牛,如果第二部分返回 0 说明是牛牛
//
func (h *hands) cutTwoPart() (bool,int)  {
    total := h[0]+h[1]+h[2]+h[3]+h[4]
    if total%10 == 0 {
        return true,0   // 牛牛
    }

    for i:=0; i<5; i++ {
        for j:=i+1;j<5;j++ {
            fupai:= h[i]+h[j]
            if (total-fupai)%10 == 0 {
                return true,fupai%10
            }
        }
    }
    return false,-1 // 当没有牛时,第二个参数可以随便返回,反正我们不关心
}
// 如果两手牌都没有牛就比较大小
func compareWithoutNiu(h1,h2 hands) int {
    sort.Ints(h1[0:])
    sort.Ints(h2[0:])
    for i:=4;i>=0;i-- { // 从最大的牌开始比较
        if h1[i]>h2[i] {
            return 1
        } else if h1[i]<h2[i] {
            return -1
        } else {
            continue
        }
    }
    return 0    // 表示相等
}

func Niu(h1,h2 hands) int {
    // 首先对输入牌点进行转换
    h1.transfer2SingleChar()
    h2.transfer2SingleChar()
    // 判断是否有牛和副牌之和
    niu1,fu1 := h1.cutTwoPart()
    niu2,fu2 := h2.cutTwoPart()
    // 比较大小
    // 如果都有牛
    if niu1 && niu2 {
        if fu1==0 && fu2==0 { // 都是牛牛
            return 0
        }
        if fu1==0 {
            return 1
        }
        if fu2==0 {
            return -1
        }
        if fu1 > fu2 {
            return 1
        } else if fu1 < fu2 {
            return  -1
        } else {
            return 0
        }
    }
    // 1有牛 2没牛
    if niu1 && !niu2 {
        return 1
    }
    // 1没牛 2有牛
    if !niu1 && niu2 {
        return -1
    }


    // 如果没有牛,进行常规比较
    return compareWithoutNiu(h1,h2)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容

  • 我出身平凡,是宫女和农民的孩子,我爹爹四十出头才娶到我娘,为此格外珍惜娘亲,娘亲以前是贵妃手底下的人,后来贵妃因为...
    b1346b6ab220阅读 171评论 0 1
  • 我平时很喜欢看书。书对我来说,就像乳汁之于幼儿,是一种天生的眷恋。 从小读到大,养成了一些自己的读书习惯和方法。特...
    尘里微光阅读 307评论 0 7
  • 自从接触知乎和简书,感觉自己都变得不同了!知乎让我脑洞大开,同时也能get很多技能。而简书分分钟能让我变得文艺起来...
    水桶做的水瓶座阅读 628评论 0 0
  • 陪我老公在一个冰天雪地的地方出差。在酒店里昏昏噩噩一天,总算感觉没什么时差了,于是今天中午出门走走。 漫山遍野的白...
    尘里微光阅读 279评论 0 1
  • 很喜欢这套书,《不要随便嘲笑我》也是一个很有现实意义的故事。一只长相奇特的鸭嘴兽受尽了其他动物的嘲笑,最后寻找到了...
    艺心和沐宜阅读 225评论 0 1