From ad7247dd700bfddec594280f15eea02fa750f12b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E8=8B=B1=E6=9D=B0?= <327782001@qq.com> Date: Mon, 10 Jul 2023 09:10:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=9C=80=E6=8E=A5=E8=BF=91=E7=9A=84?= =?UTF-8?q?=E4=B8=89=E6=95=B0=E4=B9=8B=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../day04/problem_solving_07.py" | 36 +++++++++++++++ .../problem_solving_06.py" | 45 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 "01-\346\225\260\347\273\204/day04/problem_solving_07.py" create mode 100644 "02-\351\223\276\350\241\250/problem_solving_06.py" diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_07.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_07.py" new file mode 100644 index 0000000..c0f8f76 --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_07.py" @@ -0,0 +1,36 @@ +""" +最接近的三数之和 +""" +import heapq +from typing import List + + +class Solution: + def threeSumClosest(self, nums: List[int], target: int) -> int: + """ + 思路:最关键的是找出最接近的数 + :param nums: + :param target: + :return: + """ + nums.sort() + ans = nums[0] + nums[1] + nums[2] + for i in range(len(nums)): + left = i + 1 + right = len(nums) - 1 + while left < right: + total = nums[i] + nums[left] + nums[right] + if abs(target - total) < abs(target - ans): + ans = total + if total > target: + right -= 1 + elif total < target: + left += 1 + else: + return total + return ans + + +if __name__ == '__main__': + result = Solution().threeSumClosest([-1, 2, 1, -4], 1) + print(result) diff --git "a/02-\351\223\276\350\241\250/problem_solving_06.py" "b/02-\351\223\276\350\241\250/problem_solving_06.py" new file mode 100644 index 0000000..d29f3aa --- /dev/null +++ "b/02-\351\223\276\350\241\250/problem_solving_06.py" @@ -0,0 +1,45 @@ +""" +相交链表 +""" +from typing import List, Optional + + +class ListNode: + def __init__(self, val=0, next=None): + self.val = val + self.next = next + + +class Solution: + def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]: + """ + 思路:如果存在交点,则肯定在两个链表分别遍历对方时相交 + :param headA: + :param headB: + :return: + """ + if not headA or not headB: + return None + nodeA, nodeB = headA, headB + while nodeA != nodeB: + nodeA = nodeA.next if nodeA else headB + nodeB = nodeB.next if nodeB else headA + return nodeA + + +if __name__ == '__main__': + l1 = ListNode(4) + l1.next = ListNode(1) + l1.next.next = ListNode(8) + l1.next.next.next = ListNode(4) + l1.next.next.next.next = ListNode(5) + # l1.next.next.next.next.next = ListNode(9) + # l1.next.next.next.next.next.next = ListNode(9) + l2 = ListNode(5) + l2.next = ListNode(6) + l2.next.next = ListNode(1) + l2.next.next.next = ListNode(8) + l2.next.next.next.next = ListNode(4) + l2.next.next.next.next.next = ListNode(5) + result = Solution().getIntersectionNode(l1, l2) + print(result) -- GitLab