1. 程式人生 > >【Keep】2019校招第二批-Java/資料/演算法工程師(平板支撐、各位數之和、收集沙子)

【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:]))