幸运舍友,可以免面试去实习。弄得我忐忑了一下,对方的建议廖雪峰的python教程看到程序调试那,
今天也慌张的加速到那了。然后试了几个SQL语句,感觉还记得点。然后练练程序题,选了通过率最低的一个。
也是废了半天老大劲,描述如下
###题目描述
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
###输入描述:
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量
cnt 1 ≤ cnt < length(number)。
输出描述:
输出保留下来的结果。
第一个是自己运行了n次,终于有个70或者80的通过率,思路是我从左向右找出前len-k位 ,最大的数,把这个数前的cut掉,
对后面的数进行同样的操作. 借鉴三查出个bug,就是我不断的提最大忘了控制,然后改下,并借鉴优化一下得到90通过,最后通过是最后一个
,但运行时间有点长,max和index函数的原因.
别人的思路,2和3,删掉左起下降的项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| def findlnum(l,k): i=l.index(max(l[0:k+1])) return l[i:len(l)],k-i n=int(input()) k=int(input()) l,re=[],0 K=len(l)-k while n>0: l.insert(0,n%10) n=n//10 if len(l)> K: nums = nums[:K] while l!=[]: (l,k)=findlnum(l,k) re=re*10+l[0] l=l[1:len(l)] print(re) #####%80 n=int(input()) k=int(input()) l,re=[],0 while n>0: l.insert(0,n%10) n=n//10 while k>0: for i in range(len(l)): if l[i]<l[i+1]: l.pop(i) k-=1 break for i in range(len(l)): re=re*10+l[i] print(re) ##%70 nums = list(input()) cnt = int(input()) n, j, i= len(nums), cnt, 0 while j > 0 and i < n-1: if nums[i]>= nums[i+1]: i += 1 else: nums.pop(i) j -= 1 n -= 1 i = i-1 if i > 0 else 0 if j > 0: nums = nums[:-j] print(''.join(nums)) 运行时间:59ms 占用内存:3700k def findlnum(l,k): i=l.index(max(l[0:k+1])) return l[i:len(l)],k-i l=list(input()) k=int(input()) re=[] K=len(l)-k while l!=[]: (l,k)=findlnum(l,k) if k==0: re.extend(l) break re.append(l[0]) l=l[1:len(l)] re=re[0:K] print(''.join(re)) 运行时间:606ms 占用内存:4016k def findlnum(l,k): i=l.index(max(l[0:k+1])) return l[i:len(l)],k-i l=list(input()) k=int(input()) re,j=[],0 K=len(l)-k while l!=[] and j<K: (l,k)=findlnum(l,k) if k==0: re.extend(l) break re.append(l[0]) l=l[1:len(l)] j+=1 print(''.join(re)) 运行时间:403ms 占用内存:4908k
|