盛最多水的容器
示例:
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
输入: [1,8,6,2,5,4,8,3,7]
输出: 49
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
left = 0
right = len(height)-1
max_area = 0
while left != right:
#若左边高度比右边高度高,取高度低的作为y值算出面积,高度低的往前迈一步,继续寻找高度更高 的
if height[left] > height[right]:
y = height[right]
# x值需要不断的变化
x = right - left
right -= 1
else:
y = height[left]
x = right - left
left += 1
new_area = x * y
if new_area > max_area:
max_area = new_area
return max_area
删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例2:
输入: 1->1->1->2->3
输出: 2->3
代码
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None:
return
# 虚拟头节点 + 双指针
newHead = ListNode(0)
newHead.next = head
pre = newHead
cur = newHead.next
while cur:
if cur.next and cur.val == cur.next.val:
#如果重复元素有很多个连着,需要走到重复元素的最后一个
while cur and cur.next and cur.val == cur.next.val:
cur = cur.next
#重复元素的后一个元素付给当前pre的下一个元素
pre.next = cur.next
#让cur重新指向链表下一个元素
cur = cur.next
else:
pre = pre.next
cur = cur.next
#最后不能返回head,因为【1,1,2,3】->【2,3】,head一直都指着链表的第一个元素
return newHead.next