1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?LeetCode刷題實(shí)戰(zhàn)469:凸多邊形

        共 2049字,需瀏覽 5分鐘

         ·

        2021-12-18 11:19

        算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問(wèn)題叫做?凸多邊形,我們先來(lái)看題面:
        https://leetcode-cn.com/problems/convex-polygon/

        Given a list of points that form a polygon when joined sequentially, find if this polygon is convex (Convex polygon definition).

        Note:

        There are at least 3 and at most 10,000 points.

        Coordinates are in the range -10,000 to 10,000.

        You may assume the polygon formed by given points is always a simple polygon (Simple polygon definition). In other words, we ensure that exactly two edges intersect at each vertex, and that edges otherwise don't intersect each other.



        給定一個(gè)按順序連接的多邊形的頂點(diǎn),判斷該多邊形是否為凸多邊形。(凸多邊形的定義)

        注:
        頂點(diǎn)個(gè)數(shù)至少為 3 個(gè)且不超過(guò) 10,000。
        坐標(biāo)范圍為 -10,000 到 10,000。
        你可以假定給定的點(diǎn)形成的多邊形均為簡(jiǎn)單多邊形(簡(jiǎn)單多邊形的定義)。換句話說(shuō),保
        每個(gè)頂點(diǎn)處恰好是兩條邊的匯合點(diǎn),并且這些邊 互不相交 。

        示例? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

        示例 1:
        [[0,0],[0,1],[1,1],[1,0]]

        輸出:True
        解釋:
        示例 2:
        [[0,0],[0,10],[10,10],[10,0],[5,5]]

        輸出:False

        解釋:


        解題

        叉乘判斷

        設(shè)A(x1,y1),B(x2,y2),C(x3,y3)則三角形兩邊的矢量分別是:

        AB=(x2-x1,y2-y1), AC=(x3-x1,y3-y1)

        則AB和AC的叉積為:(2*2的行列式) 值為:(x2-x1)*(y3-y1) - (y2-y1)*(x3-x1)

        利用右手法則進(jìn)行判斷:

        如果AB*AC>0,則三角形ABC是逆時(shí)針的

        如果AB*AC<0,則三角形ABC是順時(shí)針的

        因?yàn)椴恢理旤c(diǎn)是順時(shí)針輸入,還是逆時(shí)針輸入,所以要記錄符號(hào),后面點(diǎn)叉乘如果一樣就是凸多邊形。

        class?Solution:
        ????def?isConvex(self, points: List[List[int]])?-> bool:
        ????????def?cal_cross_product(A, B, C):
        ????????????AB = [B[0] - A[0], B[1] - A[1]]
        ????????????AC = [C[0] - A[0], C[1] - A[1]]
        ????????????return?AB[0] * AC[1] - AB[1] * AC[0]

        ????????flag = 0
        ????????n = len(points)
        ????????for?i in?range(n):
        ????????????# cur > 0 表示points是按逆時(shí)針輸出的;cur < 0,順時(shí)針
        ????????????cur = cal_cross_product(points[i], points[(i + 1) % n], points[(i + 2) % n])
        ????????????if?cur != 0:
        ????????????????# 說(shuō)明異號(hào), 說(shuō)明有個(gè)角大于180度
        ????????????????if?cur * flag < 0:
        ????????????????????return?False
        ????????????????else:
        ????????????????????flag = cur
        ????????return?True


        好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

        上期推文:

        LeetCode1-460題匯總,希望對(duì)你有點(diǎn)幫助!

        LeetCode刷題實(shí)戰(zhàn)461:漢明距離

        LeetCode刷題實(shí)戰(zhàn)462:最少移動(dòng)次數(shù)使數(shù)組元素相等 II

        LeetCode刷題實(shí)戰(zhàn)463:島嶼的周長(zhǎng)

        LeetCode刷題實(shí)戰(zhàn)464:我能贏嗎

        LeetCode刷題實(shí)戰(zhàn)465:最優(yōu)賬單平衡

        LeetCode刷題實(shí)戰(zhàn)466:統(tǒng)計(jì)重復(fù)個(gè)數(shù)

        LeetCode刷題實(shí)戰(zhàn)467:環(huán)繞字符串中唯一的子字符串

        LeetCode刷題實(shí)戰(zhàn)468:驗(yàn)證IP地址



        瀏覽 67
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            青春草视频在线观看 | 两性伦刺激小说 | aaaaaa免费视频 | 操淫在线 | 娇妻被两黑人按摩韩国电影 | 国产妍妍女王chinese 国产又黄的a级鬼片色鬼投胎 | 日逼导航 | 色婷婷2 肏大屄网 | 色欲天香综合 | 甜性涩爱bd中文字幕 |