当前位置:   article > 正文

面试中算法(删去n个数字后的最小值)

面试中算法(删去n个数字后的最小值)

 有一个整数,从该整数中去掉n个数字,要求剩下的数字形成的新整数尽可能小。

分析:使用栈的特性,在遍历原整数的数字时,让所有数字一个一个入栈,当某个数字需要被删除时,(即栈顶数字>当前数字时,栈顶数字出栈(相当于删除))让该数字出栈。最后,程序把栈中的元素转化为字符串类型的结果。

如果整数num=541270936,n=3。如图所示:

 

  1. # 以遍历数字作为外循环,以n作为内循环
  2. def remove_n_digits2(num,n):
  3. #新整数长度=原整数长度-n
  4. nlen=len(num)-n
  5. #创建一个栈
  6. stack=[]
  7. for i in range(len(num)):
  8. #当前数字
  9. curr=num[i]
  10. #当栈顶数字>当前数字时,栈顶数字出栈(相当于删除)
  11. while len(stack)>0 and stack[len(stack)-1]>curr and n>0:
  12. stack.pop()
  13. n-=1
  14. # 如果遇到数字0,栈为空,0不入栈
  15. if '0'==curr and len(stack)==0:
  16. nlen-=1
  17. if nlen<=0:
  18. return '0'
  19. continue
  20. #遍历当前数字入栈
  21. stack.append(curr)
  22. #找到栈中第一个非零数字的位置
  23. if nlen<=0:
  24. return '0'
  25. return ''.join(stack)
  26. if __name__ == '__main__':
  27. print(remove_n_digits2('18939477', 2)) # 139477
  28. print(remove_n_digits2('39', 2)) # 0
  29. print(remove_n_digits2('60800', 1)) # 800
  30. print(remove_n_digits2('701312', 3)) # 11
  31. print(remove_n_digits2('541270936', 3)) # 120936

时间复杂度是O(n)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/556566
推荐阅读
相关标签
  

闽ICP备14008679号