首页 > 试题广场 >

设计一函数,求整数区间[a,b]和[c,d]的交集。

[问答题]
设计一函数,求整数区间[a,b][c,d]的交集。
public class Solution{
public int[] rangeOfOveride(int a, int b, int c, int d) {
int begin = Math.max(a, c);
int end = Math.min(b, d);
int[] range = new int[2];
if(begin > end) return null;
else {
range[0] = begin;
range[1] = end;
}
return range;
}
}
发表于 2017-08-23 15:08:29 回复(38)
比较a和c,大的作为交集的开始,比较b和d,小的作为交集的结束,如果开始比结束还要大,那就说明没交集,否则返回交集就行了
发表于 2018-01-05 01:14:48 回复(2)
function jiaoji(arr1,arr2){
    let arr3 = []
    arr1.forEach( val => {
        if(arr2.includes(val)){
            arr3.push(val)    
        }
    })
    return arr3
}

发表于 2018-01-04 21:12:12 回复(1)

发表于 2018-04-26 18:21:19 回复(9)
s = list(set(range(a,b+1))&set(range(c,d+1)))
print s


编辑于 2017-09-03 12:00:46 回复(3)
1.对两个数组区间进行排序, 2.判断是否有交集,对第一个数组进行遍历,对第二个数组进行遍历,依次判断第一个数组的每个元素是否与第二个数组的相等,相等则输出到新数组
发表于 2017-09-09 16:14:15 回复(4)
判断是否输入错误、无交集和有4种交集的情况
发表于 2017-08-25 11:05:38 回复(0)
很简单,直接找区间[max(a,c),min(b,d)]
vector<int> fun(int a,int b,int c,int d){
    vector<int> v;
    v.pushback(max(a,c));
    v.pushback(min(b,d));
    return v;
}
发表于 2017-08-23 14:28:56 回复(5)
Top=Math.min(b,d) Bottom=Math.max(a,c) if(Top<Bottom)return [] else return [Bttom,Top]
发表于 2018-01-29 08:52:21 回复(0)
public static class Solution{
//默认[a,b]区间和[c,d]区间
public static int[] rangeOfOveride(int a, int b, int c, int d) {
int[] arr = {a,b,c,d};
Arrays.sort(arr);
int[] range = new int[2];
if(arr[1] != arr[2] &&(arr[1] == b || arr[1] == d)) return null;
else {
range[0] = arr[1];
range[1] = arr[2];
}
return range;
}
}
编辑于 2017-12-04 13:15:47 回复(5)
python字符串不能直接比较,得加上cmp函数,相等返回0,大于返回1,小于返回-1,第一个字母相同会接着
下一个字母进行比较。
from sqlalchemy.util import cmp
a = 'a' b = 'a' print(cmp(a,b))  

发表于 2018-09-02 17:59:55 回复(0)
<script> var arr1=[1,10],arr2=[3,15]; function compare(arr1,arr2){ var newArr=[]; var a,b=arr1[arr1.length-1],c,d=arr2[arr2.length-1] if(!arr1 instanceof Array && !arr2 instanceof Array){ return -1; }else{ for(a=arr1[0];a<=b;a++){ for(c=arr2[0];c<=d;c++){ if(a==c){ newArr.push(c); continue; } } } } return newArr; } console.log(compare(arr1,arr2)); </script>
发表于 2018-08-13 15:41:50 回复(0)
<script> var arr1 = [1,2,3,4], arr2 = [3,4,5,6]; function intersection(arr1 ,arr2){ var x,newArr = [],index = 0; if(!arr1 instanceof Array && arr2 instanceof Array){ return -1; }else{ while( index < arr1.length){ for(x in arr1){ if(arr1[x] == arr2[index]){ newArr.push(arr1[x]); } } index ++; } } return newArr; } console.log(intersection(arr1,arr2)); </script>
发表于 2018-07-22 18:24:01 回复(0)
function fn(arr1, arr2){
    var res=[];
    var max=Math.max.apply(null, arr1);
    var min=Math.min.apply(null, arr2);
    if(min>max){
        return null;
    }else{
        res.push(min);
        res.push(max);
    }
 return res;
}
发表于 2018-05-09 20:58:16 回复(1)
abcd进行比较
发表于 2017-10-21 15:59:31 回复(1)
求出a,c中大的一个l和b,d中大小的一个么,若在l<=m则交集[l,m]否则无
发表于 2017-09-13 10:22:24 回复(0)
不要忘记分情况讨论,可能还有无交集等几种情况
发表于 2017-08-26 02:43:20 回复(0)
#coding=utf-8
```

def calc_interval(a,b,c,d):
max_x = max(b,d)
min_x = min(a,c)
if max_x==b and min_x==a: return (c,d)
if min_x==c and max_x==d: return (a,b)
if max_x==b and min_x==c:
if c>a:
return (a,c)
elif c==a:
return (c,c)
else: return None
if max_x==d and min_x==a:
if b>c:
return (c,b)
elif b==c:
return (b,b)
else:
return None
answer = calc_interval(1,5,2,3) print(answer)
```

编辑于 2017-12-08 11:47:41 回复(0)
function jiaoji(arr1,arr2){
    var newarr1 = [];
    var n = arr1[1]-arr1[0];
    while(n >=0){
        newarr1.push(arr1[0]++);
        n--;
    }
    var newarr2 = [];
    var m = arr2[1]-arr2[0];
    while(m>=0){
        newarr2.push(arr2[0]++);
        m--;
    }
    var result = [];
    newarr1.map(item=>{
        if(newarr2.indexOf(item) >=0){
            result.push(item)
        }
    })
    return result;
}
jiaoji([2,7],[2,6]);

发表于 2019-12-23 16:36:43 回复(0)
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个区间的两端点:");
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        System.out.println("请输入第二个区间的两端点:");
        int c=scanner.nextInt();
        int d=scanner.nextInt();
        int[] arr1 = new int[b - a + 1];
        int[] arr2 = new int[d - c + 1];
        arr1[0] = a;
        arr2[0] = c;
        for (int i = 1; i < arr1.length; i++) {
            arr1[i]=arr1[i-1]+1;
        }
        for (int i = 1; i < arr2.length; i++) {
            arr2[i]=arr2[i-1]+1;
        }
        intersection(arr1,arr2);
    }
    private static void intersection(int[] arr1,int[] arr2){
        List<Integer> list = new LinkedList<>();
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i]>=arr2[j]&&arr1[i]<=arr2[arr2.length-1]){
                    list.add(arr1[i]);
                    break;
                }
            }
        }
        if (list.size()==0){
            System.out.println("没有交集!");
        }else {
            System.out.println("交集为:" + list.toString());
        }
    }

请输入第一个区间的两端点:
2
6
请输入第二个区间的两端点:
1
11
交集为:[2, 3, 4, 5, 6]
发表于 2019-09-02 19:59:35 回复(0)