750. Number Of Corner Rectangles

LeetCode medium оригинал: C# #array #csharp #leetcode #linked-list #matrix #medium #string #two-pointers

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

Пример:

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# решение

сопоставлено/оригинал
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++ решение

auto-draft, проверить перед отправкой
#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 решение

сопоставлено/оригинал
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 решение

сопоставлено/оригинал
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 решение

сопоставлено/оригинал
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 решение

сопоставлено/оригинал
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

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

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

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

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.