2022-02-03:有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离。 给你一个 2D 网格,其中各个格子内的值要么是 0,要么是

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-02-03:有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离。 给你一个 2D 网格,其中各个格子内的值要么是 0,要么是相关的知识,希望对你有一定的参考价值。

2022-02-03:最佳的碰头地点。
有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离。
给你一个 2D 网格,其中各个格子内的值要么是 0,要么是 1。
1 表示某个人的家所处的位置。这里,我们将使用 曼哈顿距离 来计算,其中 distance(p1, p2) = |p2.x - p1.x| + |p2.y - p1.y|。
力扣296。

答案2022-02-03:

求行最优,求列最优。最优行和最优列确定一个点,这个点就是需要返回的值。
时间复杂度:O(N^2)。
空间复杂度:O(N)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
    grid := [][]int
        1, 0, 0, 0, 1,
        0, 0, 0, 0, 0,
        0, 0, 1, 0, 0,
    
    ret := minTotalDistance(grid)
    fmt.Println(ret)


func minTotalDistance(grid [][]int) int 
    N := len(grid)
    M := len(grid[0])
    iOnes := make([]int, N)
    jOnes := make([]int, M)
    for i := 0; i < N; i++ 
        for j := 0; j < M; j++ 
            if grid[i][j] == 1 
                iOnes[i]++
                jOnes[j]++
            
        
    
    total := 0
    i := 0
    j := N - 1
    iRest := 0
    jRest := 0
    for i < j 
        if iOnes[i]+iRest <= iOnes[j]+jRest 
            total += iOnes[i] + iRest
            iRest += iOnes[i]
            i++
         else 
            total += iOnes[j] + jRest
            jRest += iOnes[j]
            j--
        
    
    i = 0
    j = M - 1
    iRest = 0
    jRest = 0
    for i < j 
        if jOnes[i]+iRest <= jOnes[j]+jRest 
            total += jOnes[i] + iRest
            iRest += jOnes[i]
            i++
         else 
            total += jOnes[j] + jRest
            jRest += jOnes[j]
            j--
        
    
    return total


执行结果如下:


左神java代码

以上是关于2022-02-03:有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离。 给你一个 2D 网格,其中各个格子内的值要么是 0,要么是的主要内容,如果未能解决你的问题,请参考以下文章

Java中的队列

作业2.对于以上推荐的人或博文进行浏览后,对于你的启示收获和心得是什么?

Python可变长参数

题解 CF6D CF6D Lizards and Basements 2

经典博弈案例 "囚徒困境” 分析

数据结构实验之队列一:排队买饭