【Keep】2019校招第二批-Java/数据/算法工程师(平板支撑、各位数之和、收集沙子)

在这里插入图片描述
在这里插入图片描述

这题没想到快捷方法,就用普通方法做了,先查询是否在数组中,如果在就返回index,不在就添加,再返回index。
值得注意的是python的input().split的使用。

s,m = [k for k in input().split()]	#s保存一个带有,的str类型,m也是一个str类型
#m=22
#s='21,23,25,26'

a = [int(n) for n in s.split(',')]
if int(m) in a:
    print(a.index(int(m)))
else:
    a.append(int(m))
    a.sort()
    print(a.index(int(m)))

AC了。

在这里插入图片描述
在这里插入图片描述

这题一开始不会,在同学的帮助下做出来了,首先各个位数之和,3位数的话,最大和是999,也就是9*3=27,所以如果输入s>27,那么一定就凑不出来,没有这个整数,所以输出-1的条件是s>9*d。然后,要保证位数,第一位要排除0,最小从1开始。核心思想是要让后面位尽可能从大的数取起,所以高位数就可以放小的数字,让大的数字往后放。

s,d = [int(n) for n in input().split()]
#s,d = 26,4#8,4 #11,4
if s>9*d or s<0 or d<1:
    print(-1)

elif d==1:
    print(s)
else:
    if s-9*(d-1)>0:	#判断最高位的数字,如果s>9*(d-1),说明后面几位都要放99....,最高位放s-9*(d-1)
        ans = s-9*(d-1)
    else:
        ans = 1 #不让最高位放0吧..
    s = s - ans
    d = d-1
    k = d
    for i in range(k):
        if s-9*(d-1)>=0:
            ans = ans *10+(s-9*(d-1))
            s = 9 * (d - 1)	#s是剩余的量

        else:
            ans = ans*10
        d -= 1	#每次都移动一位

    print(ans+s)		#比如s,d=8,4输出1007的情况,加上s(7),	如果是第一种情况s-9*(d-1)>=0,比如26对应的1799,最后s=0,ans+s也是对的。

当时没AC,结束后改了好半天,应该是对的了。
在这里插入图片描述
在这里插入图片描述

这题类似leetcode第11题,水容器,不太一样,还没做出来,先贴一个错误的程序,之后补上。
(以下是错误的)

def maxArea(height):
    maxarea,l,r = 0,0,len(height)-1
    while l<r:
        maxarea = max(maxarea,min(height[l],height[r])*(r-l)-sum(height[l:r]))
        if height[l]<height[r] :
            l+=1
        else:
            r-=1
    return maxarea
"""
def maxArea(height):
    L, R, width, res = 0, len(height) - 1, len(height) - 1, 0
    l,r = L,R
    for w in range(width, 0, -1):
        if height[L] < height[R]:
            if res>height[L] * w-sum(height[L:R]):
                r = R
            res, L = max(res, height[L] * w-sum(height[L:R])), L + 1
        else:
            if res>height[R] * w-sum(height[L:R]):
                l = L
            res, R = max(res, height[R] * w-sum(height[L:R])), R - 1
    return res
 

#h =  [1,8,6,2,5,4,8,3,7]
h = [0,2,0,3,1,2,0,2,1,4,2,1]   
print(maxArea(h))
print(maxArea(h[:]))
#print(maxArea(h[9:]))  

猜你喜欢

转载自blog.csdn.net/eqiang8848/article/details/82899846
今日推荐