diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_01.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_01.py" new file mode 100644 index 0000000000000000000000000000000000000000..7dce7234d8dee52d50d1cb8f07c16a2715a50458 --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_01.py" @@ -0,0 +1,29 @@ +""" +盛最多水的容器 +""" +from typing import List + + +class Solution: + def maxArea(self, height: List[int]) -> int: + """ + 双指针 + :param height: + :return: + """ + max_area = 0 + left = 0 + right = len(height) - 1 + while left < right: + area = (right - left) * min(height[left], height[right]) + max_area = max(max_area, area) + if height[left] < height[right]: + left += 1 + else: + right -= 1 + return max_area + + +if __name__ == '__main__': + result = Solution().maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]) + print(result) diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_02_01.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_02_01.py" new file mode 100644 index 0000000000000000000000000000000000000000..94059dc860ef40c34319a30a6869a5b66e569e08 --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_02_01.py" @@ -0,0 +1,22 @@ +""" +K 件物品的最大和 +""" +from typing import List + + +class Solution: + def kItemsWithMaximumSum(self, numOnes: int, numZeros: int, numNegOnes: int, k: int) -> int: + if k <= numOnes: + return k + elif numOnes < k <= (numOnes + numZeros): + return numOnes + elif (numOnes + numZeros) < k <= (numOnes + numZeros + numNegOnes): + return numOnes - (k - numOnes - numZeros) + else: + return numOnes - numNegOnes + return result + + +if __name__ == '__main__': + result = Solution().kItemsWithMaximumSum(3, 2, 0, 2) + print(result) diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_02_02.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_02_02.py" new file mode 100644 index 0000000000000000000000000000000000000000..42a7ea98283c420ad6d361bb684f69a2dbf9c095 --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_02_02.py" @@ -0,0 +1,14 @@ +""" +K 件物品的最大和 +""" +from typing import List + + +class Solution: + def kItemsWithMaximumSum(self, numOnes: int, numZeros: int, numNegOnes: int, k: int) -> int: + return numOnes - (k - numOnes + numZeros) if k > (numOnes + numZeros) else min(numOnes, k) + + +if __name__ == '__main__': + result = Solution().kItemsWithMaximumSum(3, 2, 0, 2) + print(result) diff --git "a/01-\346\225\260\347\273\204/day04/problem_solving_03.py" "b/01-\346\225\260\347\273\204/day04/problem_solving_03.py" new file mode 100644 index 0000000000000000000000000000000000000000..3c458bb174a654391f33efb5850b72ec6d6e451b --- /dev/null +++ "b/01-\346\225\260\347\273\204/day04/problem_solving_03.py" @@ -0,0 +1,36 @@ +""" +三数之和 +""" +from typing import List + + +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + nums.sort() + res = [] + for i in range(len(nums) - 2): + if nums[i] > 0: + break + if i > 0 and nums[i] == nums[i - 1]: + continue + left, right = i + 1, len(nums) - 1 + while left < right: + total = nums[i] + nums[left] + nums[right] + if total < 0: + left += 1 + elif total > 0: + right -= 1 + else: + res.append([nums[i], nums[left], nums[right]]) + while left < right and nums[left] == nums[left + 1]: + left += 1 + while left < right and nums[right] == nums[right - 1]: + right -= 1 + left += 1 + right -= 1 + return res + + +if __name__ == '__main__': + result = Solution().threeSum([-1, 0, 1, 2, -1, -4]) + print(result)