<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2049字,需瀏覽 5分鐘

           ·

          2021-12-18 11:19

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

          今天和大家聊的問題叫做?凸多邊形,我們先來看題面:
          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è)且不超過 10,000。
          坐標(biāo)范圍為 -10,000 到 10,000。
          你可以假定給定的點(diǎn)形成的多邊形均為簡(jiǎn)單多邊形(簡(jiǎn)單多邊形的定義)。換句話說,保
          每個(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:
          ????????????????# 說明異號(hào), 說明有個(gè)角大于180度
          ????????????????if?cur * flag < 0:
          ????????????????????return?False
          ????????????????else:
          ????????????????????flag = cur
          ????????return?True


          好了,今天的文章就到這里,如果覺得有所收獲,請(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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水蜜桃精品 | 亚洲黄色电影 | 大大鸡吧轻轻操在线视频 | 亚洲男人的天堂在线观看 | 天天摸天天看天天看天天摸 |