120
题目描述:
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
示例:
解答:
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
for i in range(len(triangle) - 1, 0, -1):
for j in range(i):
triangle[i - 1][j] += min(triangle[i][j], triangle[i][j + 1])
return triangle[0][0]
147
题目描述;
对链表进行插入排序。
从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。
每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
示例:
解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def insertionSortList(self, head: ListNode) -> ListNode:
if(head==None or head.next==None):
return head
else:
h=ListNode()
h.next=head
## 增设一个头指针,使得操作一致。
p=head.next
head.next=None
## 第一个节点不用排序,和后面的节点断开;p指向未排序链表的第一个节点
s=h
st=h.next
## 利用插入法进行链表排序。增设两个指针,s和st。
## st指向要与p进行比较的节点,s指向st的前一个节点
while(p!=None):
if(p.val<s.val):
s=h
st=h.next ## 利用上次排序的结果;以减少比较次数
while(st!=None and p.val>st.val):
s=st
st=st.next
## 已经找到位置,进行插入
s.next=p
p=p.next
s.next.next=st
s=s.next
return h.next
219
题目描述:
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
示例:
解答:
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
'''
超时了
for i in range(len(nums)-1):
for j in range(i+1,len(nums)):
if nums[i]==nums[j]:
if j-i<=k:
return True
return False
'''
#首先是判断是存在num[i]==num[j],存在的情况下才判断|i-j|<=k
nums_len=len(nums)
if nums_len<=1:
return False
nums_dict={}
for i in range(nums_len):
if nums[i] in nums_dict:
if i-nums_dict[nums[i]]<=k:
return True
nums_dict[nums[i]]=i
return False
977
题目描述:
给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例:
解答:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
for i in range(len(nums)):
nums[i]=nums[i]*nums[i]
return sorted(nums)
1550
题目描述:
给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回true;否则,返回false。
示例:
解答:
class Solution:
def threeConsecutiveOdds(self, arr: List[int]) -> bool:
cnt=0
for i in arr:
if i%2==1:
cnt+=1
if cnt==3:
return True
else:
cnt=0
return False