您的位置:首页 > 其它

题目:区间最小数

2015-09-01 23:54 429 查看

给定一个整数数组(下标由 0 到 n-1,其中 n 表示数组的规模),以及一个查询列表。每一个查询列表有两个整数 [start, end]。 对于每个查询,计算出数组中从下标 start 到 end 之间的数的最小值,并返回在结果列表中。

您在真实的面试中是否遇到过这个题?

Yes

样例

对于数组 [1,2,7,8,5], 查询 [(1,2),(0,4),(2,4)],返回 [2,1,5]

注意

在做此题前,建议先完成以下三道题 线段树的构造, 线段树的查询 及 线段树的修改。

挑战

每次查询在O(logN)的时间内完成

标签 Expand

相关题目 Expand

解题思路:
常规解法,暴力搜索,没有达到O(logN)的时间复杂度。
/**
* Definition of Interval:
* public classs Interval {
*     int start, end;
*     Interval(int start, int end) {
*         this.start = start;
*         this.end = end;
*     }
*/
public class Solution {
/**
*@param A, queries: Given an integer array and an query list
*@return: The result list
*/
public ArrayList<Integer> intervalMinNumber(int[] A,
ArrayList<Interval> queries) {
// write your code here
ArrayList<Integer> res = new ArrayList<>();
if(A.length==0||null==A) return res;
for(Interval query:queries){
int tmp = searchMin(A, query.start, query.end);
res.add(tmp);
}
return res;
}
public  int searchMin(int[] A,int s,int e){
int min = Integer.MAX_VALUE;
for(int i=s;i<=e;i++){
if(A[i]<min){
min = A[i];
}
}
return min;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: