有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在ArrayList中查找整数对的数目

最近遇到黑客挑战,在给定数组中找到int对。 使用ArrayList作为一种方法。 有人能纠正这段代码中的错误吗

错误:线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:10,大小:9

在爪哇。util。ArrayList。rangeCheck(ArrayList.java:653)

在爪哇。util。ArrayList。删除(ArrayList.java:492)

在解决方案。main(Solution.java:32)

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int c[] = new int[n];
        for(int c_i=0; c_i < n; c_i++){
            c[c_i] = in.nextInt();
        }
        int count=0;

        Arrays.sort(c);

        ArrayList<Integer> ch = new ArrayList<>();

        for(int c_i=0; c_i < n; c_i++){
           ch.add(c[c_i]);
        }

        for(int i=0;i<ch.size();i++){
            int a = ch.get(i);
            int b=ch.indexOf(a);
            if(b<0)
                continue;
            else{ 
                ch.remove(a);
                ch.remove(b);
                count++;
                for (int j=0;j<ch.size()-2;j++){
                    ch.add(j,ch.get(j+2));

                }
            }
            System.out.println(count);
        }

    }

编辑了上述方法,并发现b将给出a的索引,始终只删除一个元素,因此现在尝试了这样的方法,即无论发生什么情况都删除第一个元素,然后搜索匹配的pair元素,直到arrayList为空

while(ch.size()!=0){
        int a = ch.get(0);
        ch.remove(0);
        int b = ch.indexOf(a);
        if(b<0){

            for (int j=0;j<ch.size()-1;j++)
                ch.add(j,ch.get(j+1));
            continue; 
            }
        else{ 

            ch.remove(b);
            count++;
            for (int j=0;j<ch.size()-2;j++)
                ch.add(j,ch.get(j+2));
            }
     }



Error: Terminated due to timeout

共 (2) 个答案

  1. # 1 楼答案

    int a = ch.get(i);
    

    这将检索位置i处的值

    ch.remove(a);
    

    这将删除存储在索引a处的值。值a可能大于ArrayList大小

    这就是你错的地方。试着评论一下,也许会有用

  2. # 2 楼答案

    //if some one needs a different approach to find total number of pairs in a arraylist.    
    int pair=0;
                List<Integer> list = new ArrayList<Integer>();//your input
    
    
    
        Set<Integer> uniqueSet = new HashSet<Integer>(list);
            for (Integer temp : uniqueSet) {
                System.out.println(temp + ": " + Collections.frequency(list, temp));
    
    
    
                if(Collections.frequency(list, temp)==2|| Collections.frequency(list, temp)>2)
                {
         int t=Collections.frequency(list, temp)/2;
         pair=pair+t;
                }
    
    
            }
            return pair;