在給定的n位數字,刪除其中的k位數字( k < n),使得最後的n-k爲數字爲最大值(原次序不變)算法
考慮到是要移出數字,咱們使用鏈表設計此算法較爲方便,鏈表能夠直接移出某個位置的元素設計
使用貪心算法,每一步都要達到最優code
從最高位開始,如果下一位比上一位大,則比上一位的數字移出,結束以後再次從最高位開始blog
例如 16489657 刪除4個數字
首先比較1和6 刪除1 獲得 6489657
以後,再次比較 6和4 日後推 可獲得 689657
以此類推 刪除4個數字以後 可獲得 9657ci
這裏會有個特殊狀況,當一個從大大小的整數輸入的時候,咱們得從末尾刪除數字才能獲得最大值rem
例如 98765 刪除5 能夠獲得最大值 9876get
Scanner scanner = new Scanner(System.in); System.out.println("請輸入整數:"); String s = scanner.nextLine(); System.out.println("刪除數字的個數:"); int n = scanner.nextInt(); scanner.close(); int a[] = new int[s.length()]; for(int i=0;i<s.length();i++){ char temp =s.charAt(i); a[i] = temp -'0';//不減去‘0’則會得到Ascii碼 } LinkedList<Integer> linkedList = new LinkedList<Integer>(); for(int i=0;i<a.length;i++){ linkedList.add(a[i]); } int flag =0; while(flag<n){ for(int i=0;i<linkedList.size()-1;i++){ if(linkedList.get(i)<linkedList.get(i+1)){ linkedList.remove(i);//使用鏈表移出元素 flag++; break;//結束本次循環,跳轉到while循環中 } //考慮到特殊狀況,當遍歷徹底部數字都不知足條件,從末尾刪除數字 if(i==linkedList.size()-2){ linkedList.removeLast(); flag++; } } } System.out.print("截取的"+n+"個數字後的最小值爲"); for(int i=0;i<linkedList.size();i++){ System.out.print(linkedList.get(i)); }