750. Number Of Corner Rectangles

Le texte du problème est traduit du russe pour la langue sélectionnée. Le code reste inchangé.

Дан указатель на начало односвязного списка и два целых числа left и right, где left <= right. Необходимо перевернуть узлы списка, начиная с позиции left и заканчивая позицией right, и вернуть измененный список.

Exemple:

Input: grid = [[1,0,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[1,0,1,0,1]]

Output: 1

C# solution

correspondant/original
public class Solution {
    public int CountCornerRectangles(int[][] grid) {
        int count = 0;
        for (int i = 0; i < grid.Length; i++) {
            for (int j = i + 1; j < grid.Length; j++) {
                int numPairs = 0;
                for (int k = 0; k < grid[0].Length; k++) {
                    if (grid[i][k] == 1 && grid[j][k] == 1) {
                        numPairs++;
                    }
                }
                if (numPairs > 1) {
                    count += numPairs * (numPairs - 1) / 2;
                }
            }
        }
        return count;
    }
}

C++ solution

brouillon automatique, à relire avant soumission
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int CountCornerRectangles(int[][] grid) {
        int count = 0;
        for (int i = 0; i < grid.size(); i++) {
            for (int j = i + 1; j < grid.size(); j++) {
                int numPairs = 0;
                for (int k = 0; k < grid[0].size(); k++) {
                    if (grid[i][k] == 1 && grid[j][k] == 1) {
                        numPairs++;
                    }
                }
                if (numPairs > 1) {
                    count += numPairs * (numPairs - 1) / 2;
                }
            }
        }
        return count;
    }
}

Java solution

correspondant/original
public class Solution {
    public int countCornerRectangles(int[][] grid) {
        int count = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = i + 1; j < grid.length; j++) {
                int numPairs = 0;
                for (int k = 0; k < grid[0].length; k++) {
                    if (grid[i][k] == 1 && grid[j][k] == 1) {
                        numPairs++;
                    }
                }
                if (numPairs > 1) {
                    count += numPairs * (numPairs - 1) / 2;
                }
            }
        }
        return count;
    }
}

JavaScript solution

correspondant/original
var countCornerRectangles = function(grid) {
    let count = 0;
    for (let i = 0; i < grid.length; i++) {
        for (let j = i + 1; j < grid.length; j++) {
            let numPairs = 0;
            for (let k = 0; k < grid[0].length; k++) {
                if (grid[i][k] === 1 && grid[j][k] === 1) {
                    numPairs++;
                }
            }
            if (numPairs > 1) {
                count += numPairs * (numPairs - 1) / 2;
            }
        }
    }
    return count;
};

Python solution

correspondant/original
def countCornerRectangles(grid):
    count = 0
    for i in range(len(grid)):
        for j in range(i + 1, len(grid)):
            num_pairs = 0
            for k in range(len(grid[0])):
                if grid[i][k] == 1 and grid[j][k] == 1:
                    num_pairs += 1
            if num_pairs > 1:
                count += num_pairs * (num_pairs - 1) // 2
    return count

Go solution

correspondant/original
package main

func countCornerRectangles(grid [][]int) int {
    count := 0
    for i := 0; i < len(grid); i++ {
        for j := i + 1; j < len(grid); j++ {
            numPairs := 0
            for k := 0; k < len(grid[0]); k++ {
                if grid[i][k] == 1 && grid[j][k] == 1 {
                    numPairs++
                }
            }
            if numPairs > 1 {
                count += numPairs * (numPairs - 1) / 2
            }
        }
    }
    return count
}

Algorithm

Пройдите по chaîneм матрицы. Для каждой пары строк, find все столбцы, где оба значения равны 1.

Подсчитайте количество таких столбцов. Если их больше одного, то они образуют прямоугольники.

Для каждой пары строк добавьте количество возможных прямоугольников в общий счетчик.

😎

Vacancies for this task

offres actives with overlapping task tags are affichés.

Toutes les offres
Il n'y a pas encore d'offres actives.