62,614
社区成员
发帖
与我相关
我的任务
分享
public static int getSeriesMinNoSort(List<Integer> list) {
int max = Collections.max(list);
if (list.get(0) != 1) {
return 0;
}
for (int i = 0; i < list.size(); i++) {
if (Math.abs(list.get(i)) - 1 < list.size()) {
list.set(Math.abs(list.get(i)) - 1, -list.get(Math.abs(list.get(i)) - 1));
}
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > 0) {
return i;
}
}
return max;
}
public static int test(List<Integer> list) {
int thisSize = list.size();
if (thisSize == 0)
return 0;
int max = Collections.max(list);
int mid = thisSize / 2;
if (list.get(mid) - list.get(mid - 1) != 1)
return list.get(mid - 1);
int start = 0;
int end = thisSize - 1;
while (start <= end) {
mid = (end - start) / 2 + start;
if (? < list.get(mid)) {
end = mid - 1;
} else if (? > list.get(mid)) {
start = mid + 1;
} else {
return list.get(mid);
}
}
return max;
}
?问号的地方应该怎么表达?
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
public class Test{
public static void main(String[] args){
List<Integer> list1 = Arrays.asList(2, 4, 6, 8, 9);
List<Integer> list2 = Arrays.asList(1, 2, 3, 4, 5);//如果全部连续且返回list的最大值5
List<Integer> list3 = Arrays.asList(1, 2, 3, 4, 7); //返回4
List<Integer> list4 = Arrays.asList(1, 2, 6, 8, 9);//返回2
List<Integer> list5 = Arrays.asList(1, 2, 3, 4, 5, 6, 8, 9, 12, 45, 200, 456);//返回6
System.out.println(find_breakpoint(list1));
System.out.println(find_breakpoint(list2));
System.out.println(find_breakpoint(list3));
System.out.println(find_breakpoint(list4));
System.out.println(find_breakpoint(list5));
}
public static int find_breakpoint(List<Integer> li)
{
if(li.size()==0)
return -1;
else
{
int start=0;
int end=li.size()-1;
if(li.get(start)!=1)
return 0;
else if((end+1)==li.get(end))
return li.get(end);
else
{
int mid=0;
while(start<=end)
{
mid=(start+end)/2;
if((mid+1)==li.get(mid))
{
if((mid+2)<li.get(mid+1))
return li.get(mid);
start=mid+1;
}
else if((mid+1)<li.get(mid))
{
if((mid)==li.get(mid-1))
return li.get(mid);
end=mid-1;
}
}
return -1;
}
}
}
}
结果:
0
5
4
6
6public static int test(List<Integer> list) {
int thisSize = list.size();
if (thisSize == 0)
return 0;
int max = Collections.max(list);
int mid = thisSize / 2;
if (list.get(mid) - list.get(mid - 1) != 1)
return list.get(mid - 1);
int start = 0;
int end = thisSize - 1;
while (start <= end) {
//这里要怎么表达?
mid = (end - start) / 2 + start;
if (? < list.get(mid)) {
end = mid - 1;
} else if (? > list.get(mid)) {
start = mid + 1;
} else {
return list.get(mid);
}
}
return max;
}
for (int i = 1; i < thisSize; i++) {
if (list.get(i) - list.get(i - 1) != 1) {
return list.get(i - 1);
}
}