​ ​ ​


杂记


幸运舍友,可以免面试去实习。弄得我忐忑了一下,对方的建议廖雪峰的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

关闭
支付宝打赏 微信打赏
```
```