算法(三十二)

本文提供两个实用的Java编程案例,一是如何从List<String>中移除特定前缀的字符串,二是如何在O(n)时间复杂度下找出整数数组中的第一个间断数,通过具体代码实现展示了算法设计与数据结构的应用。

1、有一个List<String> list =new ArrayList<String>(); 需要你写一个函数,可以将这个list中以"1_"开头的字符串删掉。

public ArrayList<String> fun(list){
    String str = "";
    int[] flag = new Int[list.size]{0};
    for(int i=0; i<list.size(); i++){
        str = list.get(i);
        if(str.charAt(0) == "1" &&str.charAt(1) == "_"){
                flag[i] =1;
        }
    }
    for(int i=0; i<list.size(); i++){
        if(flag[i] == 1){
            list.remove(list.get(i));
        }
    }
    return list;
}

2、有一个整数数组 7,4,2,9,3,6,11,10

求:第一个间断的数 5。(间断数:比如上一个例子中出现了2,3,4,6,7,9,10,11),那么5就是第一个间断数

时间复杂度为O(n^2)

public int fun(int[] arr){

          int min = arr[0];
          int len = arr.length;

          for(int i=0; i<len; i++){
                     if(min>arr[i]) min = arr[i];
          }

          for(int i=0; i<len; i++){

                     for(int j=0; j<len; i++){
                                if(arr[j] == min){

                                       min++;
                                       break;
                                }
                    }

                    if(i == len){

                              break;

                    }
          }

          return min;

时间复杂度为O(n)

public int fun(int[] arr){

          int min = arr[0];
          int len = arr.length;

          HashSet<Integer> set = new HashSet<>();

          for(int i=0; i<len; i++){
                     if(min>arr[i]) min = arr[i];
          }

          for(int i=0; i<len; i++){
                    set.add(arr[i]) ;
          }

          for(int i=0; i<len; i++){ 
                    if(set.contains(min)){

                             min++;
                    }else{

                            break;

                    }
          }

          return min;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值