这里对题目的类型做了整理,目前只做了数组和链表,持续更新中.......
目录
数组
数组中重复的数字
构建乘积数组
二维数组中的查找
链表
链表中环的入口结点
删除链表中重复的结点
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
此题的思路是使用字典记录数组中的数字,遍历数组依次存入字典,在存入时判断该数字在字典中是否存在,是返回不是继续。
class Solution:
# 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
# 函数返回True/False
def duplicate(self, numbers, duplication):
# write code here
a = {}
for i in range(len(numbers)):
if (str(numbers[i]) not in a) :
a[str(numbers[i])] = 1
else:
duplication[0] = numbers[i]
return True
return False
题目描述
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
解题思路,借用牛客网上的图,将连乘分为两步,下三角和上三角
class Solution:
def multiply(self, A):
# write code here
B = [1]*len(A)
for i in range(1,len(A)):
B[i] = B[i-1]*A[i-1]
tem = 1
for i in range(len(A)-2,-1,-1):
tem *= A[i+1]
B[i] *= tem
return B
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:首先与每一行最右边的数比较,大于该数行+1,小于该数列-1
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if len(array)==0 or len(array[0])==0:
return False
col = len(array[0])-1
i = 0
while(i=0):
if array[i][col] == target:
return True
elif array[i][col] > target:
col = col-1
else:
i = i+1
return False
题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
解题思路:使用快慢指针
class Solution:
def EntryNodeOfLoop(self, pHead):
# write code here
if pHead == None and pHead.next == None:
return pHead
fast = slow = pHead
while(fast and fast.next):
slow = slow.next
fast = fast.next.next
if fast == slow:
fast = pHead
while(fast!=slow):
fast = fast.next
slow = slow.next
return fast
return None
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
class Solution:
def deleteDuplication(self, pHead):
# write code here
pos = pHead
ret = ListNode(-1)
tmp = ret
flag = False
while(pos and pos.next):
if(pos.val==pos.next.val):
pos.next = pos.next.next
flag = True
else:
if flag:
flag = False
else:
tmp.next = ListNode(pos.val)
tmp = tmp.next
pos =pos.next
if pos and flag==False:
tmp.next = ListNode(pos.val)
return ret.next