在给定的n位数字,删除其中的k位数字( k < n),使得最后的n-k为数字为最大值(原次序不变)

  1. 考虑到是要移出数字,我们使用链表设计此算法较为方便,链表可以直接移出某个位置的元素

  2. 使用贪心算法,每一步都要达到最优

  3. 从最高位开始,若是下一位比上一位大,则比上一位的数字移出,结束之后再次从最高位开始

例如 16489657 删除4个数字
首先比较1和6 删除1 得到 6489657
之后,再次比较 6和4 往后推 可得到 689657
以此类推 删除4个数字之后 可得到 9657

  1. Scanner scanner = new Scanner(System.in);
  2. System.out.println("请输入整数:");
  3. String s = scanner.nextLine();
  4. System.out.println("删除数字的个数:");
  5. int n = scanner.nextInt();
  6. scanner.close();
  7. int a[] = new int[s.length()];
  8. for(int i=0;i<s.length();i++){
  9. char temp =s.charAt(i);
  10. a[i] = temp -'0';//不减去‘0’则会获得Ascii码
  11. }
  12. LinkedList<Integer> linkedList = new LinkedList<Integer>();
  13. for(int i=0;i<a.length;i++){
  14. linkedList.add(a[i]);
  15. }
  16. int flag =0;
  17. while(flag<n){
  18. for(int i=0;i<linkedList.size();i++){
  19. if(linkedList.get(i)<linkedList.get(i+1)){
  20. linkedList.remove(i);//使用链表移出元素
  21. flag++;
  22. break;//结束本次循环,跳转到while循环中
  23. }
  24. }
  25. }
  26. System.out.print("截取的"+n+"个数字后的最大值为");
  27. for(int i=0;i<linkedList.size();i++){
  28. System.out.print(linkedList.get(i));
  29. }

版权声明:本文为kexing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kexing/p/9792605.html