1.子数组最大累加和问题
"""
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
"""
def maxsumofSubarray(arr):
arr = sorted(arr,reverse=False)
new_arr = arr[1:]
return sum(new_arr)
arr = [1, -2, 3, 5, -2, 6, -1]
maxsumofSubarray(arr)
new_arr = []
for i in arr:
if i>0:
new_arr.append(i)
sum(new_arr)
2.求平方根
"""
实现函数 int sqrt(int x).
计算并返回x的平方根(向下取整)
前提:import math
向上取整:math.ceil(x)
向下取整:math.floor(x)
取整数部分:math.trunc(x)
四舍五入:round(x)
"""
def sqrt( x ):
import math
return math.floor(x**0.5)
sqrt(5)
3.合并有序链表
"""
将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。
"""
def mergeTwoLists(a,b):
newlist = []
for i in a:
newlist.append(i)
for j in b:
newlist.append(j)
return newlist
a = {1,2}
b = {3,4}
mergeTwoLists(a,b)
4.求缺失数字
"""
从0,1,2,...,n这n+1个数中选择n个数,找出这n个数中缺失的那个数,要求O(n)尽可能小。
"""
def solve( a ):
miss = sum(list(range(max(a)+1)))-sum(a)
return miss
a = [0,1,2,3,4,5,7]
print(solve( a ))
a1 = [0,2,3]
print(solve( a1 ))
5.链表的奇偶重排
"""
给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。
"""
def oddEvenList( head ):
new_list = []
new_list1 = []
new_list2 = []
head = sorted(head,reverse=False)
for i in head:
if i%2!=0:
new_list1.append(i)
else:
new_list2.append(i)
for p in new_list1:
new_list.append(p)
for q in new_list2:
new_list.append(q)
return new_list
head = [1,2,3,4,5,6]
oddEvenList( head )
6.求数组中未出现的最小正整数
"""
给定一个无序数组arr,找到数组中未出现的最小正整数
例如arr = [-1, 2, 3, 4]。返回1
arr = [1, 2, 3, 4]。返回5
"""
def minNumberdisappered( arr ):
new_arr = []
for i in arr:
if i+1 not in arr and i+1>0:
new_arr.append(i+1)
if i-1 not in arr and i-1>0:
new_arr.append(i-1)
return min(new_arr)
arr = [-1, 2, 3, 4]
minNumberdisappered( arr )
arr1 = [1, 2, 3, 4]
minNumberdisappered( arr1 )
7.删除链表中重复出现的元素
"""
给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1→2→3→3→4→4→5, 返回1→2→5.
给出的链表为o 1→1→1→2→3, 返回2→3.
"""
def deleteDuplicates( head ):
new_arr = []
for i in head:
if head.count(i)==1:
new_arr.append(i)
return new_arr
head = [1,2,3,3,4,4,5]
deleteDuplicates( head )
8.反转字符串
"""
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
"""
def solve( str ):
new_str = ""
for i in range(len(str)-1,-1,-1):
new_str = new_str+str[i]
return new_str
str = "abcd"
solve( str )
9.合并有序链表
"""
将两个有序的链表合并为一个新链表,要求新的链表是通过
拼接两个链表的节点来生成的,且合并后新链表依然有序。
"""
def mergeTwoLists( list1 , list2 ):
new_list = []
for i in list1:
new_list.append(i)
for j in list2:
new_list.append(j)
new_list = sorted(new_list,reverse=False)
return new_list
list1 = [2]
list2 = [1]
mergeTwoLists( list1 , list2 )
10.反转数字
"""
将给出的32位整数x翻转。例1:x=123,返回321,例2:x=-123,返回-321
你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^{31}, 2^{31} − 1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。
"""
def reverse( x ):
if x>=0:
new_str = ""
x = '%s' %x
for i in range(len(x)-1,-1,-1):
new_str = new_str+x[i]
else:
new_str = "-"
x = '%s' %abs(x)
for i in range(len(x)-1,-1,-1):
new_str = new_str+x[i]
return new_str
x = 1357924680
reverse( x )
特别注明:本文属于牛客答题Python学习笔记,不以盈利为目的,纯手工码字不容易,若整理的笔记中,对您有所助益,麻烦点个赞或者收藏,万分感谢!如有构成侵权的地方,请联系作者删除,谢谢合作!