Ən yaxşı görüş nöqtəsi LeetCode Həlli

Çətinlik səviyyəsi Ağır
Tez-tez soruşulur Amazon Bloomberg Expedia Facebook google microsoft Snapchat cuqquldamaqBaxılıb 26

Problem bəyanat

The Ən yaxşı görüş nöqtəsi LeetCode Həlli ikili grid verilir deyir grid ölçüdə m x n harada 1 Bir dostumuzun evini təyin, geri qayıtmaq istəyirik minimal ümumi səyahət məsafəsi harada ümumi səyahət məsafəsi dostların evləri ilə görüş yeri arasındakı məsafələrin cəmidir.

The ümumi səyahət məsafəsi cəmi kimi hesablanır Manhetten məsafəsi nöqtələr arasında.

Ən yaxşı görüş nöqtəsi LeetCode HəlliPin

Manhetten məsafəsi: kimi hesablanmış məsafə iki vektor arasındakı mütləq fərqlərin cəmi. yəni (x1,y1) və (x2,y2) nöqtələri arasındakı Manhetten məsafəsi belə hesablana bilər:

D= | x1-x2| + |y1-y2|

Yuxarıdakı misalda:

Input:

 grid = [[1,0,0,0,1],[0,0,0,0,0],[0,0,1,0,0]]

Çıxış:

 6

Explanation:

Given are three friends located at positions (0,0), (0,4), and (2,2).
The point (0,2) is an appropriate meeting point because the total travel distance is minimal i.e.  2 + 2 + 2 = 6.
Hence, we return 6.

Başqa bir misal:

Input:

 grid = [[1,1]]

Çıxış:

 1

Həll yanaşması

Konsepsiya

Median koordinatlarda (midx,midy) yerləşən nöqtə, burada midx x-koordinat dəyərlərinin vektorunun medianı, midy isə y-koordinat qiymətlərinin vektorunun medianıdır. minimal Total səyahət məsafəsi.

sübut

Best Meeting Point LeetCode SolutionPin

Budur, qrafikdə,

Qoy a,b,c,d,e beş yer nöqtəsi və x cəmi səyahət məsafəsinin nöqtəsi olsun Məqsədimiz bütün nöqtələrdən x, yəni D-ə qədər olan məsafənin minimum olduğu yeri tapmaqdır.

1-ci hal: x (0,0) nöqtəsində yatsın D1= a+b+c+d+e

2-ci hal: a (a-ya ən yaxın) nöqtəsindən əvvəl x yatsın D2= (ax)+(bx)+(cx)+(dx)+(məs) D2= a+b+c+d+e – 5*x D2= D1 -5*x => D2

3-cü hal : e (e-yə ən yaxın) nöqtəsindən sonra x yatsın D3= (xa)+(xb)+(xc)+(xd)+(xe) D3= 5*x- a+b+c+d+e D3= 5*x – D1 [ Burada x 3-cü halda >>> x 2-ci halda] => D3>D2 [ 3-cü halda>2-ci halda ümumi səyahət məsafəsi]

4-cü hal: c nöqtəsindən sonra x yatsın (median nöqtəsi) D4= (ca)+(cb)+(cc)+(dc)+(ec) D4= a+b+c+d+e – 5*c D4 = a+b+d+e-4*c => D4 Case2]

Aydındır ki, yuxarıdakı 4 halı nəzərə alsaq, bütün nöqtələrdən mediana qədər ümumi məsafənin minimum olduğunu deyə bilərik.

Buna görə Median nöqtə minimum səyahət məsafəsinin nöqtəsidir.

Yanaşma

  1. Vektorda '1' olan bütün mövqelərin x-koordinatlarını toplayın xkoordinatları.
  2. Vektorda '1' olan bütün mövqelərin y-koordinatlarını toplayın ykoordinatları.
  3. Bir vektor yaradın bütün mövqelərin cütü '1' fərqlərlə.
  4. Cür xkoordinatları və ykoordinatları.
  5. Medianı tapın  orta in xkoordinatları  orta yəlaqələndirir [median = sıralanmış massivdə orta element, orta elementlərin ilk indeksini nəzərə alın]
  6. Aradan keçin fərqlər və hər bir nöqtə yeri vasitəsilə Manhetten məsafəsini in mediana əlavə edin ümumi_səyahət_məsafəsi
  7. Qayıtmaq ümumi_səyahət_məsafəsi.

Kodu

Ən yaxşı görüş nöqtəsi üçün C++ Həlli LeetCode Həll

class Solution {
public:
    int minTotalDistance(vector<vector<int>>& grid) {
        vector<int>xcoordinates;
        vector<int>ycoordinates;
        //store pair of coordinate points
        vector<pair<int,int>>distpoints;
        
        // store all x-coordinates and y-coordinates in separate vectors O(nm)
        for(int i=0;i<grid.size();i++){
            for(int j=0;j<grid[i].size();j++){
                if(grid[i][j]==1)
                {
                    xcoordinates.push_back(i);
                    ycoordinates.push_back(j);
                    distpoints.push_back({i,j});
                }
            }
        }
      
        //sort both vectors O(nlogn)
        sort(xcoordinates.begin(),xcoordinates.end());
        sort(ycoordinates.begin(),ycoordinates.end());
        
        //find mid element in both vectors  [Median coordinates]
        int index=0;
        int midx=0;
        int midy=0;
        if (xcoordinates.size()%2==0)
            index=xcoordinates.size()/2-1;
        else
            index=xcoordinates.size()/2;
        
        midx= xcoordinates[index];
        midy=ycoordinates[index];
        
        //Find manhatten distance O(n)
        int total_travel_distance=0;
        for(int i=0;i<xcoordinates.size();i++){
            total_travel_distance+=abs(distpoints[i].first-midx)+abs(distpoints[i].second-midy);
        
        }
        return total_travel_distance;
    }
};

Ən yaxşı görüş nöqtəsi üçün Python Həlli LeetCode Həll

class Solution(object):
    def minTotalDistance(self, grid):
        colvals = []
        rowvals = []
        
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1:
                    colvals.append(j)
                    rowvals.append(i)
        colvals.sort()
        rowvals.sort()
        
        result = 0
        total_travel_distance = (rowvals[len(rowvals)//2], colvals[len(colvals)//2])
        
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1:
                    result += abs(i-total_travel_distance[0]) + abs(j-total_travel_distance[1])
        return result

Ən yaxşı görüş nöqtəsi LeetCode həlli üçün mürəkkəbliklər:

Zamanın mürəkkəbliyi: O(mn), m və n şəbəkədəki sətir və sütunların nömrələridir.

Kosmik Mürəkkəblik : O(p) , p=tordakı '1-lərin sayı

Referans: https://en.wikipedia.org/wiki/Taxicab_geometry

https://www.chessprogramming.org/Manhattan-Distance

Şərh yaz

Translate »