某次笔试,但是由于笔试时间冲突,只得快速解决问题,没来得及考虑到性能优化,当时只过了小部分的测试用例,再思考效率影响的地方,重写一下。#-*-coding:utf-8-*-#author:DYBOY#time:2019-9-2012:41:32#desc:求给出数组中一定长区间的和最小,输出最小和的值importsysdefmysum(arr,start,num):returnsum(arr[start:start+num])#第二种方法,求出每段的和,然后比较获得最小和值deflist_segament_sum(arr,num):sum_arr=[sum(arr[0:num])]foriinrange(num,len(arr)):sum_arr.append(sum_arr[i-num]+arr[i]-arr[i-num])returnmin(sum_arr)if__name__=='__main__':line1=input()n,m=(line1.strip()).split()m=int(m)line2=input()line2=list(map(int,line2.strip().split()))min_sum=99999#记录最小和值foriinrange(len(line2)-m):temp_sum=mysum(line2,i,m)iftemp_sum<min_sum:min_sum=temp_sumprint(min_sum)
今天室友面试了,居然挂到了ByteDance的二面,其中考了一个大整数相乘,那么我就尝试借助Python再来写一遍吧!实现思路很简单,平时我们咋计算乘法的,就按照公式计算就好了,程序中就是要考虑好边界条件与此同时,结合一下编程语言的特性,也会使得代码更加精简。#-*-coding:utf-8-*-#author:DYBOY#time:2019-9-2121:53:03#desc:大数相乘#字符串分割为listdefstr_split(strs):str_arr=[]forcharinstrs:str_arr.append(char)returnstr_arr#大数相加defbig_add(a_str,b_str):aa=str_split(a_str)bb=str_split(b_str)sum_str=''c=0whilelen(aa)orlen(bb)orc:try:a=int(aa.pop())except:a=0try:b=int(bb.pop())except:b=0c+=a+bsum_str=str(c%10)+sum_strc=c>9returnsum_str#大数相乘之大数*个位数defsingle_mutipule(a_str,b_char):aa=str_split(a_str)b=int(b_char)sum_str=''c=0whilelen(aa)orc:try:a=int(aa.pop())except:a=0mu=a*b+csum_str=str(mu%10)+sum_strifmu>9:c=int((str(mu))[:-1])else:c=0returnsum_str#大数相乘defmutipule(a_str,b_str):aa=str_split(a_str)bb=str_split(b_str)sums_arr=[]sum_str=''foridx,binenumerate(bb):a_b1=single_mutipule(aa,b)+idx*'0'sums_arr.append(a_b1)forsinsums_arr:sum_str=big_add(sum_str,s)returnsum_strif__name__=='__main__':s1='4174468421068499's2='99861646849'print(mutipule(s1,s2))虽然网上很多大神写了一些特别漂亮的代码,但是一串儿的循环嵌套,数组取值,脑内循环,太猛了此方法将部分计算过程拆分为函数,相信对于大家的理解更有帮助另外补充一句,python的int类型是无限精度的,所以python不需要实现大整数相乘…