2015-08-22 4 views
0

Дано списка массива и сортируетНайти меньше или равно X из дублированного отсортированного списка

ArrayList<Integer> list1 = new ArrayList<>(); 
list1.add(1); 
list1.add(4); 
list1.add(15); 
list1.add(16); 
list1.add(3); 
list1.add(3); 
list1.add(8); 
System.out.println(list1); // [1, 4, 15, 16, 3, 3, 8] 
Collections.sort(list1,3); 
System.out.println(list1); // [1, 3, 3, 4, 8, 15, 16] 

To find larger или равно в отсортированном дублируются список, скажем, «3»

int index = Collections.binarySearch(list1, 3); 
ArrayList<Integer> list2 = new ArrayList<> (list1.subList(index < 0 ? - index - 1 : index, list1.size()));  

которые дают нам

[3,3,4,8,15,16] 

Но как это сделать для меньшего или равного случая? Вот что я пробовал.

ArrayList<Integer> list3 = new ArrayList<> (list1.subList(0, index < 0 ? - index - 1 : index + 1)); 

, какой выход

[1, 3] 

ожидается выход

[1, 3, 3] 
+0

Вы хотите, чтобы найти все дубликаты, которые больше определенного числа? (3 в вашем примере) – c0der

+0

@OferYuval, мое плохое, оно должно быть меньше или равно 3. – karfai

+0

Можете ли вы сделать сортировку и найти дубликаты при добавлении номеров в список? Или вам нужен список после того, как все номера были добавлены к нему? – c0der

ответ

1

Вы можете использовать indexOf и lastIndexOf методы https://docs.oracle.com/javase/8/docs/api/java/util/List.html. Пример

List<Integer> list1 = new ArrayList<>(); 
    list1.add(1); 
    list1.add(4); 
    list1.add(15); 
    list1.add(16); 
    list1.add(3); 
    list1.add(3); 
    list1.add(8); 

    System.out.println(list1); // [1, 4, 15, 16, 3, 3, 8] 
    Collections.sort(list1); 
    System.out.println(list1); // [1, 3, 3, 4, 8, 15, 16] 

    //For equals or larger than 3 
    int index = list1.indexOf(3); 
    List<Integer> list2 = index > -1 ? list1.subList(index, list1.size()) : new ArrayList<>(); 
    System.out.println(list2); // [3, 3, 4, 8, 15, 16] 

    //For equals or smaller than 3 
    index = list1.lastIndexOf(3); 
    List<Integer> list3 = index > -1 ? list1.subList(0, index + 1) : new ArrayList<>(); 
    System.out.println(list3); // [1, 3, 3] 
+0

Другое предложение - использование сокращенного метода: 'ArrayList list3 = new ArrayList <> (list1.subList (0, index <0? - index - 1: list1.lastIndexOf (list1.get (index)) + 1)) ; '. Однако этот ответ не читается. – karfai

+0

Обновлен ответ с проверкой на отсутствие намеченного X в списке. –

Смежные вопросы