美文网首页
2019-11-03

2019-11-03

作者: Jiawei_84a5 | 来源:发表于2019-11-03 16:56 被阅读0次

-1

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

// 如果nums1>nums2,返回true;否则返回false
func compare(nums1, nums2 []int) bool {
    i := 0
    for ; i < len(nums1) && i < len(nums2); i++ {
        if nums1[i] > nums2[i] {
            return true
        } else if nums2[i] > nums1[i] {
            return false
        }
    }
    if i == len(nums1) {
        return false
    }
    return true
}

/*
思路: 2*greedy + 1*DP
子问题1:找到数组中由k个数组成的最大数的组合(不改变先后顺序)
    getMax(nums []int, k int) []int {}
子问题2:将长度为i和k-i的两个最大值组合进行合并(不改变先后顺序)
    mergeMax(max1, max2 []int) []int {}
子问题3:获取子问题2中所有合并所得结果的最大组合
    dpMax(max1, max2 []int) []int {}
*/
func getMax(nums []int, k int) []int {
    size := len(nums)
    res := make([]int, k)
    // j代表res的长度,不是index
    j := 0
    for i := 0; i < size; i++ {
        for j > 0 && nums[i] > res[j-1] && size-i > k-j {
            j--
        }
        if j < k {
            res[j] = nums[i]
            j++
        }
    }
    return res
}

func mergeMax(max1, max2 []int, k int) []int {
    res := make([]int, k)
    i1, i2 := 0, 0
    n1, n2 := len(max1), len(max2)
    for i := 0; i < k; i++ {
        if i1 == n1 {
            res[i] = max2[i2]
            i2++
            continue
        }
        if i2 == n2 {
            res[i] = max1[i1]
            i1++
            continue
        }
        //if max1[i1] > max2[i2] {
        if compare(max1[i1:], max2[i2:]) {
            res[i] = max1[i1]
            i1++
        } else {
            res[i] = max2[i2]
            i2++
        }
    }
    return res
}

func dpMax(max1, max2 []int, k int) []int {
    for i := 0; i < k; i++ {
        if max1[i] > max2[i] {
            return max1
        } else if max2[i] > max1[i] {
            return max2
        }
    }
    return max1
}

func maxNumber(nums1 []int, nums2 []int, k int) []int {
    n1, n2 := len(nums1), len(nums2)
    if n2 < n1 {
        return maxNumber(nums2, nums1, k)
    }
    iMax := min(n1, k)
    res := make([]int, k)
    for i := 0; i <= iMax; i++ {
        if k-i <= n2 {
            res = dpMax(res, mergeMax(getMax(nums1, i), getMax(nums2, k-i), k), k)
        }
    }
    return res
}

Missing Number

func missingNumber(nums []int) int {
    total := 0
    for _, v := range nums {
        total += v
    }
    l := len(nums)
    sum := l * (l + 1) / 2
    return sum - total
}

Find Difference

func findTheDifference(s string, t string) byte {

    m := make(map[int32]int, 256)

    var i int32
    for i = 0; i < 256; i++ {
        m[i] = 0
    }

    for _, v := range s {
        m[v]++
    }
    for _, v := range t {
        m[v]--
        if m[v] < 0 {
            return byte(v)
        }
    }
    return 0
}

相关文章

  • 2019-11-04

    2019-11-03 2019-11-02 2019-11-03 日精进打卡 姓名:彭新 宁波蓝天白云供应链管理有...

  • flutter_redux的入门级使用

    title: flutter_reduxdate: 2019-11-03 20:48:18tags:- flutt...

  • 小帅的Scalers Talk第五轮新概念朗读持续力训练Day1

    练习材料: [Day 1864 2019-11-03] Lesson24 It could beworse I e...

  • 2019-11-04

    2019-11-03 【日精进打卡第 589 天 【知~学习】 《六项精进》大纲 4 遍共 2212 遍 《大学》...

  • 七叶一枝花

    七叶一枝花 2019-11-03食功效-抗癌中药大全 https://www.shigongxiao.com 本品...

  • 2020-02-21

    重新下载数据:2019-11-03 11:30 H: 18, V: 6反射率数据:MOD09温度数据:MOD11_...

  • 我愿意~

    【成长日志】:2019-11-03 星期日 【学习方法】:系统读经第1086天。 雨宝:147累积法; 阳宝:1...

  • 2019-11-03

    2019-11-02 2019-11-03 日精进打卡 姓名:彭新 宁波蓝天白云供应链管理有限公司 【日精进打卡第...

  • 2019-11-03

    2019-11-03 姓名:符振华(379期 反省三组) 公司:深圳蔚蓝时代商业管理有限公司-上海第一分公司 【日...

  • 课外活动拓展 践行幸福教育

    王瑞丽名班主任工作室—————2019-11-03 —————王瑞丽 19:50 8:30相约星期日,《小学家校沟...

网友评论

      本文标题:2019-11-03

      本文链接:https://www.haomeiwen.com/subject/ceclbctx.html