-
题目名称:查找点在自然区间的坐标
定义:实数轴上的一个区间由左右两个端点,假设区间是左闭右开的,例如区间
[0,1)
给定一个有序的不重合非负整数区间列表range_list
:[[0,1)
,[3,4)
] 该非负整数区间列表将实数轴分割成了这些区间列表range_list_nature_ext
: [(-∞,0)
,[0,1)
,[1,3)
,[3,4)
,[4,+∞)
] 我们称range_list_nature_ext
为由range_list
扩展的自然区间
问题:写一个查找算法,对于给定非负整数区间列表
range_list
,查找一个非负整数
p
落在了range_list_nature_ext
的那个区间,返回那个区间的在range_list_nature_ext
里的下标,我们称这个下标为非负整数p
在rage_list
里的自然坐标
。输入描述:
第一行输入要查找的非负整数
p
,以及区间列表个数N
,用空格分开
第二行到第N+1
行输入非负整数区间列表的每个区间,这些区间列表不重叠,按在实数轴上从左到右的顺序挨个输入,区间的两个坐标用空格分开输出描述:
输出一行,包含非负整数
p
的自然坐标输入样例:
12 2 0 10 15 20
输出样例:
2
主函数后续再补上
/**
*@param: N = vector.size();
*@param: P为需要确定区间位置的值;
*@param: vector 为给定的区间列表;
*/
public static int solution(int P, int N, ArrayList<ArrayList<Integer>> vector){
int result = 0;
// TODO: 请在此编写代码
ArrayList<Integer> arr = new ArrayList<>();
//如果数组为:{[2,5), [9, 23), [24, 50)}
//那它的自然数组为:{[-∞, 2), [2, 5), [5, 9), [9, 23), [23, 24), [24, 50),[50, +∞)}
//arr为{2, 5, 9, 23, 24, 50}
for(int i = 0; i < N; i ++){
for(int j = 0; j < 2; j ++){//区间列表为[a, b],固定为2个数
arr.add(vector.get(i).get(j));//将区间列表的每一个数拿出来放到数组arr中
}
}
if(p < arr.get(0)){
result = 0;
}else{
result = 1;//此处判断是从下标为1开始的
for(int m = 0; m < arr.size(); m ++){//在数组中循环
if(P >= arr.get(m) && P < arr.get(m + 1)){
//arr固定为升序数组,循环判断p值在arr中的位置,
//每循环一次,下标加一
break;//找到位置后跳出循环
}
result ++;
}
}
return result;
}
待更新…