Блог пользователя saint_coder

Автор saint_coder, история, 5 лет назад, По-английски

I thought of a solution but I have a doubt if my solution will work.

Please tell your solution of solving it, also a little analysis of the time complexity(if you have time)

Here's the Problem:

Given two arrays of integers A and B of size N each, where each pair (A[i], B[i]) for represents a unique point (x, y) in the 2D Cartesian plane.

Find and return the number of unordered quadruplet (i, j, k, l) such that (A[i], B[i]), (A[j], B[j]), (A[k], B[k]) and (A[l], B[l]) form a rectangle with the rectangle having all the sides parallel to either x-axis or y-axis.

Input Format The first argument given is the integer array A. The second argument given is the integer array 8.

Output Format Return the number of unordered quadruplets that form a rectangle.

Constraints

1<=N<=2000

1<=A[i],B[i]<=10^9

For Example:

Input 1: A=[1,1,2,2] B=[1,2,1,2]

Output 1: 1

Input 2: A=[1,1,2,2,3,3] B=[1,2,1,2,1,2]

Output 2: 3

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
5 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

A simple solution that, maybe, is too slow is: you use 2 loops to check any pair of points, and if the 2 points dont share the same X or the same Y then you search if among the points there are the other 2 vertices(looking for opposite vertices) (if A=(2,5) and B=(3,7) you are searching for (3,5) and (2,7). If you use a set you can search in O(logN) , the total complexity is O(N^2logN).Remember that you are counting the same rectangle 4 times.

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Okay great! I get it. It can be reduced to O(N^2) if we use a hashmap with customized hash function to store pair of points. Cool! Thanks for your solution. :D

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    unordered quadruplet means counting 4 or 4! ???

    • »
      »
      »
      5 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Let's suppose the rectangle has vertices ABCD, and the 2 loops are i=0 to n-1 and j=0 to n-1 ( if i==j the has the same X so the algorithm doesn't search other vertices). The 4 possibilites are: i=A and j=C i=B and j=D i=C and j=A i=D and j=B If you want to partially fix this problem you can simply run i form 0 to n and j from i+1 to n in this way you will count the same rectangle 2 times.