使用 Collections.binarySearch() 查找排序数组中元素的最后位置
Find Last Position of Element in Sorted Array using Collections.binarySearch()
我可以先使用 Collections.binarySearch 找到,但如何找到元素的最后位置。提前谢谢你:)
List < String > nums = new ArrayList < String > ();
nums.add("A/tea");
nums.add("C/see");
nums.add("C/sEa");
nums.add("C/SEa");
nums.add("C/clock");
nums.add("aep");
Collections.sort(nums,String.CASE_INSENSITIVE_ORDER);
System.out.println(nums);
int pos = Collections.binarySearch(nums,"C/SEA",String.CASE_INSENSITIVE_ORDER);
尝试这样的事情:
public static <T> int findLast(List<T> list, T search, Comparator<T> comp) {
int pos = Collections.binarySearch(list, search, comp);
if (pos >= 0) {
while (pos+1 < list.size()
&& comp.compare(search, list.get(pos+1)) == 0) {
++pos;
}
}
return pos;
}
我可以先使用 Collections.binarySearch 找到,但如何找到元素的最后位置。提前谢谢你:)
List < String > nums = new ArrayList < String > ();
nums.add("A/tea");
nums.add("C/see");
nums.add("C/sEa");
nums.add("C/SEa");
nums.add("C/clock");
nums.add("aep");
Collections.sort(nums,String.CASE_INSENSITIVE_ORDER);
System.out.println(nums);
int pos = Collections.binarySearch(nums,"C/SEA",String.CASE_INSENSITIVE_ORDER);
尝试这样的事情:
public static <T> int findLast(List<T> list, T search, Comparator<T> comp) {
int pos = Collections.binarySearch(list, search, comp);
if (pos >= 0) {
while (pos+1 < list.size()
&& comp.compare(search, list.get(pos+1)) == 0) {
++pos;
}
}
return pos;
}