精华内容
下载资源
问答
  • 题目描述 ... 给出一个含有k个元素的集合A={a1,a2,a3,...,ak},求区间[L,R]内A无关的正整数的个数。 保证A内的元素都是素数。 输入描述: 输入数据共两行: 第一行三个正整数L,R,k,意义...

    https://ac.nowcoder.com/acm/problem/16513 传送门

    题目描述

      若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关。

      给出一个含有k个元素的集合A={a1,a2,a3,...,ak},求区间[L,R]内与A无关的正整数的个数。

      保证A内的元素都是素数

    输入描述:

    输入数据共两行:

    第一行三个正整数L,R,k,意义如“题目描述”。

    第二行k个正整数,描述集合A,保证k个正整数两两不相同。

    输出描述:

    输出数据共一行:
    
    第一行一个正整数表示区间[L,R]内与集合A无关的正整数的个数

     

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<vector>
    #include<cmath>
    #include<string>
    #include<map>
    #include<queue>
    using namespace std;
    typedef long long ll;
    ll num[21];
    ll sum,K;
    void dfs(ll i,ll lcm,ll step,ll n){
    	if(step&1){
    		sum+=n/lcm;	
    	}
    	else sum-=n/lcm;
    	for(int k=i+1;k<=K;k++){
    		if(lcm*num[k]>n)continue;//this is the key of througing the big number range of the problem
    		//because num[i] is a prime,so just do that num[i]*lcm; 
    		dfs(k,lcm*num[k],step+1,n);
    	}
    }
    
    int main(){
    	ll L,R;
    	cin>>L>>R>>K;
    	for(int i=1;i<=K;i++){
    		cin>>num[i];
    	}
    		sum=0;
    		//caculate how many number which can be divived by any number of the set is smaller than L;
    		for(int i=1;i<=K;i++){
    			dfs(i,num[i],1,L-1);
    		}
    		ll sum0=sum;//book the sum
    		sum=0;
    		//caculate how many number which can be divived by any number of the set is smaller than R;
    		for(int i=1;i<=K;i++){
    			dfs(i,num[i],1,R);
    		}
    		cout<<R-L+1-sum+sum0<<endl;
    return 0;
    }
    

     

    展开全文
  • 题目】合并区间

    2019-09-20 15:30:47
    原文地址:【题目】合并区间 ...给出一个区间集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们...

    原文地址:【题目】合并区间

    题目名称

    合并区间

    题目地址

    https://leetcode-cn.com/problems/merge-intervals/

    题目描述

    给出一个区间的集合,请合并所有重叠的区间。

    示例 1:

    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3][2,6] 重叠, 将它们合并为 [1,6].
    

    示例 2:

    输入: [[1,4],[4,5]]
    输出: [[1,5]]
    解释: 区间 [1,4][4,5] 可被视为重叠区间。
    

    解题源码

    方法一

    先排序,后遍历

    源码

    public class Topic56_1 {
    
        public static void main(String[] args) {
            int[][] a = new int[4][2];
            a[0][0] = 1;
            a[0][1] = 3;
            a[1][0] = 2;
            a[1][1] = 6;
            a[2][0] = 5;
            a[2][1] = 10;
            a[3][0] = 15;
            a[3][1] = 18;
            int[][] b = merge(a);
            for (int i=0;i<b.length;i++){
                System.out.println(b[i][0]+","+b[i][1]);
            }
        }
    
        public static int[][] merge(int[][] intervals) {
            //先将intervals进行排序,按照第一列的顺序
            quickSort(intervals);
    
    //        for (int i=0;i<intervals.length;i++){
    //            System.out.println(intervals[i][0]+","+intervals[i][1]);
    //        }
    
            int[][] b = new int[intervals.length][2];
            int bIndex = 0;
            for (int i=0;i<intervals.length;i++){
                int left = intervals[i][0];
                int right = intervals[i][1];
                // i不能到最后一行,所以要小于(数组的长度 - 1)
                // 判断所在行的right和下一行的left大小,对right重新进行赋最大值,之后再不断进行while循环判断
                while (i < intervals.length - 1 && right >= intervals[i + 1][0]) {
                    i++;
                    right = Math.max(right, intervals[i][1]);
                }
                b[bIndex][0] = left;
                b[bIndex][1] = right;
                bIndex++;
            }
            int[][] rb = new int[bIndex][2];
            //截断b数组
            System.arraycopy(b, 0, rb, 0,bIndex);
            return rb;
        }
    
        public static void quickSort(int[][] arr){
            quickSort(arr, 0, arr.length-1);
        }
        private static int partition(int[][] arr, int left, int right) {
            int temp = arr[left][0];
            int temp1 = arr[left][1];
            while (right > left) {
                // 先判断基准数和后面的数依次比较
                while (temp <= arr[right][0] && left < right) {
                    --right;
                }
                // 基准数大于了 arr[right]
                if (left < right) {
                    temp(arr, right, arr[left]);
                    ++left;
                }
                //  基准数大于了 arr[left]
                while (temp >= arr[left][0] && left < right) {
                    ++left;
                }
                if (left < right) {
                    temp(arr, left, arr[right]);
                    --right;
                }
            }
            arr[left][0] = temp;
            arr[left][1] = temp1;
            return left;
        }
    
        private static void temp(int[][] arr, int left, int[] ints) {
            int tempA = ints[0];
            int tempB = ints[1];
            ints[0] = arr[left][0];
            ints[1] = arr[left][1];
            arr[left][0] = tempA;
            arr[left][1] = tempB;
        }
    
        private static void quickSort(int[][] arr, int left, int right) {
            if (arr == null || left >= right || arr.length <= 1) {
                return;
            }
            int mid = partition(arr, left, right);
            quickSort(arr, left, mid);
            quickSort(arr, mid + 1, right);
        }
    
    }
    
    

    消耗

    9 ms 41.3 MB

    方法二

    直接遍历

    源码

    
    public class Topic56_2 {
    
        public static void main(String[] args) {
            int[][] a = new int[3][2];
            a[0][0] = 1;
            a[0][1] = 4;
            a[1][0] = 0;
            a[1][1] = 2;
            a[2][0] = 3;
            a[2][1] = 5;
            int[][] b = merge(a);
            for (int i=0;i<b.length;i++){
                System.out.println(b[i][0]+","+b[i][1]);
            }
        }
    
        public static int[][] merge(int[][] intervals) {
            int len = intervals.length;
    
            for (int i=0;i<len-1;i++){
                if(intervals[i]==null){
                    continue;
                }
                int min = intervals[i][0];
                int max = intervals[i][1];
                for(int j=i+1;j<len;j++){
                    if(intervals[j]==null){
                        continue;
                    }
                    int a = intervals[j][0];
                    int b = intervals[j][1];
    
                    if( (a>=min && a<=max) || (b>=min && b<=max) || (min<=b && min>=a) || (max<=b && max>=a)  ){
                        intervals[j][0] = Math.min(min,a);
                        intervals[j][1] = Math.max(max,b);
                        intervals[i]=null;
                    }
                }
            }
    
            int[][] rb = new int[len][2];
            int ind = 0;
            for (int[] interval : intervals) {
                if (interval != null) {
                    rb[ind] = interval;
                    ind++;
                }
            }
            int[][] real = new int[ind][2];
            System.arraycopy(rb,0,real,0,ind);
            return real;
        }
    
    
    }
    
    

    消耗

    206 ms 42.8 MB

    方法还有很多,上面的也不是最优解。上面仅是我的两种解题源码,仅供参考

    吾非大神,与汝俱进

    展开全文
  • 1、准备一个容器数组用来存放合并后的区间集合 2、将所有区间按区间左边界升序排序 3、遍历给定区间数组,比较当前区间右边界和下一区间左边界 3.1、将较大值设定为新右边界,并原左边界构成新区间 3.2、将新区间...

    1、题目描述

    给出一个区间的集合,合并所有重叠的区间。

    2、解题思路

    1、准备一个容器数组用来存放合并后的区间集合
    2、将所有区间按区间左边界升序排序
    3、遍历给定区间数组,比较当前区间右边界和下一区间左边界
    3.1、将较大值设定为新右边界,并与原左边界构成新区间
    3.2、将新区间push()进容器数组
    4、返回容器数组,即为合并后的无重叠区间集合数组

    3、解题代码

    /**
     * @param {number[][]} intervals
     * @return {number[][]}
     */
    var merge = function(intervals) {
        let res = [];
        let len = intervals.length;
        if (len == 0) return [];
        intervals.sort((a, b) => a[0] - b[0]);
        for(let i = 0;i < len;i++){
            let left = intervals[i][0];
            let right = intervals[i][1];
            while (i < len - 1 && right >= intervals[i + 1][0]) {
                i++;
                right = Math.max(right, intervals[i][1]);
            }
            res.push([left, right]);
        }
        return res;
    };
    
    展开全文
  • 给出一个区间集合,请合并所有重叠的区间。 示例1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. python代码 class Solution: def...

    题目描述

    给出一个区间的集合,请合并所有重叠的区间。
    示例1:

    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

    python代码

    class Solution:
        def merge(self, intervals: List[List[int]]) -> List[List[int]]:
            intervals.sort()
            num = len(intervals)
            if num <= 1:
                return intervals
            self.result = [intervals[0]]
            mark = 0
            for i in range(1, num):
                if max(self.result[-1]) >= min(intervals[i]) and max(self.result[-1]) <= max(intervals[i]):
                    self.result[-1][-1] = max(intervals[i])
                elif min(intervals[i]) > max(self.result[-1]):
                    self.result.append(intervals[i])
                else:
                    continue
            return self.result
    

    在这里插入图片描述

    展开全文
  • 题目描述: 给定一个 无重复 元素的 有序 整数数组 nums 。 返回恰好覆盖数组中所有数字的最小有序区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的...
  • ACM题目集合

    千次阅读 2010-09-23 10:26:00
    原帖: 一些图论、网络流入门题总结、汇总 http://hi.baidu.com/zfy0701/blog/item/b8332b5c7b2dd545fbf2c052.html<br /><br />搜索题目推荐及解题报告 ...
  • 题目:合并区间

    2015-08-19 19:07:41
    给出若干闭合区间,合并所有重叠的部分。 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google...
  • 离散数学实验题目-集合

    千次阅读 2019-05-30 12:30:12
    计算机科学技术系 目录 第一章 实验概述 3 1.1 实验目的 3 1.2 实验内容 3 1.3 实验环境 3 第二章 实验原理和实现过程 4 2.1 实验原理 4 2.2 实验过程(算法描述) 4 2.2.1 程序整体思路 4 2.2.2 具体算法流程 4 ...
  • 牛牛的老师给出了一个区间的定义:对于x ≤ y,[x, y]表示x到y之间(包括x和y)的所有连续整数集合。例如[3,3] = {3}, [4,7] = {4,5,6,7}.牛牛现在有一个长度为n的递增序列,牛牛想知道需要多少个区间并起来等于这个序列...
  • 百度笔试题目集合

    千次阅读 2012-11-16 18:52:20
    ①现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。 ...二)对于数n,(n-1) / 32 为其在数组中的下标,table[(n - 1) % 32]数组
  • 区间 Time Limit: 6000MS   Memory Limit: 131072K Total Submissions: 11287   Accepted: 2785 Case Time Limit: 2000MS Description LogLoader是一家专门提供日志分析产品的...
  • 题目描述 设x1 , x2,... , xn是实直线上的n个点。用固定长度的闭区间覆盖这n个点,至少需要多少个这样的固定长度闭区间?设计解此问题的有效算法,并证明算法的正确性。编程任务:对于给定的实直线上的n个点和闭区间...
  • 图论题目集合

    千次阅读 2010-09-06 18:50:00
    更好的方法是在枚举区间的过程中不断删边和加边继续网络流过程 POJ 3204 - Ikki's Story I - Road Reconstruction(基础) http://acm.pku.edu.cn/JudgeOnline/problem?id=3204 ZOJ 2532 - Internship(基础) ...
  • POJ 图论题目集合

    千次阅读 2017-02-02 12:42:48
    更好的方法是在枚举区间的过程中不断删边和加边继续网络流过程 POJ 3204 - Ikki’s Story I - Road Reconstruction(基础) http://acm.pku.edu.cn/JudgeOnline/problem?id=3204 ZOJ 2532 - Internship(基础)...
  • 我们通过int可以判断x是否在1-10的区间,当然,区间的用法还是比较多的,比如数列迭代等,这些我们后面会详细讲到 11.集合 集合在我们上面for循环的时候就已经出现过 var a = listOf( 1 , 2 , 3 ,...
  • 合并区间

    2019-06-04 17:24:27
    给出一个区间集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出...
  • HDU题目分类大全【大集合

    千次阅读 2019-03-18 20:48:45
    亚洲总裁面试的题目   1539 搜索   1540 线段树   1541 树状数组   1542 离散,线段树   1543 线段树   1544 简单的   1545 DP  http://acm.hdu.edu.cn/forum/htm_data/18/0608/2050.html   ...
  • 7-36 集合相似度 (25 分) 给定两个整数集合,它们的相似度定义为:N​c​​/N​t​​×100%。其中N​c​​是两个集合都有的不相等整数的个数,N​t​​是两个集合一共有的不相等整数的个数。你的任务就是计算...
  • 我们通过int可以判断x是否在1-10的区间,当然,区间的用法还是比较多的,比如数列迭代等,这些我们后面会详细讲到 11.集合 集合在我们上面for循环的时候就已经出现过 集合的用处很广泛,我们在后面还会细讲,这里举...
  • C++面试题目集合(持续跟新)

    千次阅读 2011-09-28 14:07:41
    我前面写的C语言进阶知识点遥相呼应。 这才是C++面试,网上的面试题有些太简单了。 C++面试题目最多集中在对象的内存模型,记住了:如果用c/c++,内存都不清楚,还写个屁的程序! 1.C++的虚函数是怎样实现的...
  • 摘要:缓存中间件Redis拥有许多丰富、重要且有趣的数据结构,前文介绍的字符串String、列表List和集合Set便是其中的佼佼者,本文以及后续篇章介绍的有序集合SortedSet和哈希Hash数据结构亦是如此,毫不夸张的说,当...
  • 数据结构算法题目及C++解答

    千次阅读 多人点赞 2019-06-03 00:47:45
    题目主要按照类型进行整理,包括leetcode,nowcoder等网站,对于可以使用多种方法的题目,不重复列举。推荐书籍《数据结构算法分析--C++语言描述》第四版。 本文中所有源代码及博客中其他文章的VS源代码均在...
  •  问题的描述是这样的:有n个活动,对于其中的每个活动Ai均有一个开始时间Si和结束时间Fi表示该活动的举办时间是[Si, Fi), 其中0 为了活动选择问题区别,我们将该问题成为活动全选择问题。 等价的描述一:活动全...
  • LeetCode 56. 合并区间

    千次阅读 多人点赞 2020-04-16 13:32:50
    给出一个区间集合,请合并所有重叠的区间。 **示例 1:** ``` 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. ```
  • 整数区间

    2020-08-01 14:47:37
    2、找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素的个数。 输入 首行包括区间的数目n,1<=n<=10000 接下来n行,每行包括两个整数a,b,两个数之间用一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,492
精华内容 6,596
关键字:

区间与集合的题目