zoukankan      html  css  js  c++  java
  • [Swift]LeetCode593. 有效的正方形 | Valid Square

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10450189.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given the coordinates of four points in 2D space, return whether the four points could construct a square.

    The coordinate (x,y) of a point is represented by an integer array with two integers.

    Example:

    Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
    Output: True 

    Note:

    1. All the input integers are in the range [-10000, 10000].
    2. A valid square has four equal sides with positive length and four equal angles (90-degree angles).
    3. Input points have no order.

    给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。

    一个点的坐标(x,y)由一个有两个整数的整数数组表示。

    示例:

    输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
    输出: True 

    注意:

    1. 所有输入整数都在 [-10000,10000] 范围内。
    2. 一个有效的正方形有四个等长的正长和四个等角(90度角)。
    3. 输入点没有顺序。

    Runtime: 8 ms
    Memory Usage: 19.2 MB
     1 class Solution {
     2     func validSquare(_ p1: [Int], _ p2: [Int], _ p3: [Int], _ p4: [Int]) -> Bool {
     3         var s:Set<Int> = [d(p1, p2), d(p1, p3), d(p1, p4), d(p2, p3), d(p2, p4), d(p3, p4)]
     4         return !s.contains(0) && s.count == 2
     5     }
     6     
     7     func d(_ p1:[Int],_ p2:[Int]) -> Int
     8     {
     9          return (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1])        
    10     }
    11 }

    12ms

     1 class Solution {
     2     func validSquare(_ p1: [Int], _ p2: [Int], _ p3: [Int], _ p4: [Int]) -> Bool {
     3         var dict = [Int: Int]()
     4         let distances = [dist(p1, p2), dist(p1, p3), dist(p1, p4), dist(p2, p3), dist(p2, p4), dist(p3, p4)]
     5         var maxDist = -1
     6         for dist in distances {
     7             maxDist = max(maxDist, dist)
     8             dict[dist] = dict[dist, default: 0] + 1
     9         }
    10         if (dict[maxDist] == 2 && dict.count == 2) {
    11             return true
    12         }
    13         return false
    14     }
    15     
    16     func dist(_ p1: [Int], _ p2: [Int]) -> Int {
    17         return (p1[0]-p2[0]) * (p1[0]-p2[0]) + (p1[1]-p2[1]) * (p1[1]-p2[1])
    18     }
    19 }

    16ms

     1 import Foundation
     2 
     3 class Solution {
     4     func validSquare(_ p1: [Int], _ p2: [Int], _ p3: [Int], _ p4: [Int]) -> Bool {       
     5         let points : [[Int]] = [p1,p2,p3,p4]
     6         var totalsum = 0
     7         var sums : [Double] = []
     8         
     9         if Set(points).count != points.count {
    10             return false
    11         }
    12         
    13         func get_distance(_ d1:[Int],_ d2: [Int]) -> Double {
    14             let dist = sqrt(pow((Double(d1[0])-Double(d2[0])),2)+pow((Double(d1[1])-Double(d2[1])),2))
    15             return dist
    16         }
    17         
    18         for i in Range(0...points.count - 1) {
    19             if i == points.count - 1 {
    20                 break
    21             }
    22             for j in Range(i+1...points.count - 1) {
    23                 let d = get_distance(points[i],points[j])
    24                 sums.append(d)
    25             }
    26         }
    27         if Set(sums).count == 2 {
    28             return true
    29         } else {
    30             return false
    31         }
    32     }
    33 }

    20ms

     1 class Solution {
     2     func validSquare(_ p1: [Int], _ p2: [Int], _ p3: [Int], _ p4: [Int]) -> Bool {
     3         
     4         var distanceArray: [Int] = []
     5         
     6         distanceArray.append(distanceBetween(p1: p1, p2: p2))
     7         distanceArray.append(distanceBetween(p1: p1, p2: p3))
     8         distanceArray.append(distanceBetween(p1: p1, p2: p4))
     9         distanceArray.append(distanceBetween(p1: p2, p2: p3))
    10         distanceArray.append(distanceBetween(p1: p2, p2: p4))
    11         distanceArray.append(distanceBetween(p1: p3, p2: p4))
    12         
    13         distanceArray.sort()
    14         
    15         if distanceArray[0] > 0
    16             , distanceArray[0] == distanceArray[1]
    17             , distanceArray[1] == distanceArray[2]
    18             , distanceArray[2] == distanceArray[3]
    19             , distanceArray[4] == distanceArray[5] {
    20             return true
    21         } else {
    22             return false
    23         }
    24     }
    25     
    26     private func distanceBetween(p1: [Int], p2: [Int]) -> Int {
    27         let deltaX = p2.first! - p1.first!
    28         let deltaY = p2.last! - p1.last!
    29         return deltaX * deltaX + deltaY * deltaY
    30     }
    31 }
  • 相关阅读:
    使用MAVEN打JAR,直接使用
    回溯法最优装载问题(java)
    js-object引用示例
    网页自适应布局方案
    ajax的工作原理
    通过SublimeCodeIntel设置JavaScript自动补全
    sublime的Package Control的安装及使用
    Opencv 简单视频播放器
    OpenCV_复制一个或多个ROI图像区域
    OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
  • 原文地址:https://www.cnblogs.com/strengthen/p/10450189.html
Copyright © 2011-2022 走看看