leetcode_1029

淳属虚构 · · 658 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang:

思路:还是照抄我的题解。

这题题意很明显是贪心了,那么以什么作为尺度呢?
毫无疑问的,应该是一个人去A点和去B点的花费之差
简单来说,我们看[1,1000],那么这个人应该去A点,因为会便宜999元
再来看[10,20],[1,1000],那么第二个人应该去A点,第一个人去B点。因为第一个人去A去B最多便宜10元,第二个人去A去B则可能便宜999元,这就是贪心在这一题的尺度了。

代码如下:

type intS [][]int
func (s intS) Len() int           { return len(s) }
func (s intS) Less(i, j int) bool { return s[i][2] > s[j][2] }
func (s intS) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }

func twoCitySchedCost(costs [][]int) int {
    if len(costs)<=1 {
        return 0
    }
    for i:=0;i<len(costs);i++{
        costs[i]=append(costs[i], abs(costs[i][0]-costs[i][1]))
    }
    sort.Sort(intS(costs))
    toA,toB,sum:=0,0,0
    for i:=0;i<len(costs);i++{
        if toA==len(costs)/2{
            sum+=costs[i][1]
            continue
        }
        if toB==len(costs)/2 {
            sum+=costs[i][0]
            continue
        }
        if costs[i][0]>costs[i][1] {
            sum+=costs[i][1]
            toB++
        }else{
            sum+=costs[i][0]
            toA++
        }
    }
    return sum
}
func abs(i int) int {
    if i<0 {
        i=-i
    }
    return i
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:淳属虚构

查看原文:leetcode_1029

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

658 次点击  
加入收藏 微博
下一篇:leetcode_1030
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传