593. Valid Square

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:
All the input integers are in the range [-10000, 10000].
A valid square has four equal sides with positive length and four equal angles (90-degree angles).
Input points have no order.

Solution:

思路:
判斷四個(gè)角是否是直角,但即便四個(gè)角都是直角,也不能說(shuō)明一定就是正方形,還有可能是矩形。還得判斷各邊是否相等。
其實(shí)可以?xún)H通過(guò)邊的關(guān)系的來(lái)判斷是否是正方形,根據(jù)初中幾何的知識(shí)我們知道正方形的四條邊相等,兩條對(duì)角線相等,滿(mǎn)足這兩個(gè)條件的四邊形一定是正方形。

我們只需要對(duì)四個(gè)點(diǎn),兩兩之間算距離,如果計(jì)算出某兩個(gè)點(diǎn)之間距離為0,說(shuō)明兩點(diǎn)重合了,直接返回false,如果不為0,那么我們就建立距離和其出現(xiàn)次數(shù)之間的映射,最后如果我們只得到了兩個(gè)不同的距離長(zhǎng)度,那么就說(shuō)明是正方形了.

Time Complexity: O() Space Complexity: O()

Solution Code:

class Solution {
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        long[] lengths = {dist(p1, p2), dist(p2, p3), dist(p3, p4),
                          dist(p4, p1), dist(p1, p3), dist(p2, p4)}; // all 6 sides

        long max = 0, nonMax = 0;
        for(long len : lengths) {
            max = Math.max(max, len);
        }
        
        int count = 0;
        for(int i = 0; i < lengths.length; i++) {
            if(lengths[i] == max) count++;
            else nonMax = lengths[i]; // non diagonal side.
        }
        
        if(count != 2) return false; // diagonals lengths have to be same.
        for(long len : lengths) {
            if(len != max && len != nonMax) return false; // sides have to be same length
        }
        return true;
    }
    
    private long dist(int[] p1, int[] p2) {
        return (long)Math.pow(p1[0] - p2[0], 2) + (long)Math.pow(p1[1] - p2[1], 2);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容