字符串和整数(使用链表的解决方法)

对一字符串,以‘-’分隔,编程输出所有的整数中去掉最大值、最小值后剩下的整数的个数。注意最大值与最小值可能有多个

样例输入3,3,5,3,6,9,7,9

样例输出: 3

 

该题的解题思路:首先,要先把字符串转换为String数组,然后可利用链表ArrayList将数组中每一个数添加至链表中,然后利用for循环比较大小,

将最大值与最小值找出来,再用remove方法去除与最大值最小值相同的数。

其中有很重要的一点,在利用remove方法去除最大值与最小值时,因为是在遍历的同时删除数据,所以ArrayList的总长也会发生变化,所以此时可以利用for循环倒序删除。

解题:

 

import java.util.ArrayList;

public class Demo1 {

    public static void main(String[] args) {
        String num = "3,3,5,3,6,9,7,9";
        method(num);
        
    }
    
    public static void method(String str){
        String[] strs = str.split(",");
        ArrayList<Integer> arr = new ArrayList<Integer>();
        
        for(int i = 0; i < strs.length; i++){    //将数据添加至链表
            arr.add(Integer.parseInt(strs[i]));
        }
        
        int max = arr.get(0);
        for(int i = 0; i < arr.size(); i++){    //计算出最大值
            if(max < arr.get(i)){
                max = arr.get(i);
            }
        }
        
        int min = arr.get(0);
        for(int i = 0; i < arr.size(); i++){    //计算出最小值
            if(min > arr.get(i)){
                min = arr.get(i);
            }
        }
        
        for(int i = arr.size()-1; i >= 0; i--){        //将最大值与最小值从链表中去掉,该处倒序删除为重点.
            if(arr.get(i) == max || arr.get(i) == min){
                arr.remove(arr.get(i));
            }
        }
        
        System.out.println("剩余的个数为:" + arr.size());
    }
    

}

在解题时,一开始想要通过数组解决,但在转换为string数组之后在比较max和min时出现了无法比较问题,现在已了解什么情况,还有ArrayList应用不熟练,要多联系.

原文地址:https://www.cnblogs.com/shenhx666/p/8000218.html