热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编程之美2.19区间重合判断

1.简述给定一个源区间[x,y](yx)和N个无序目标区间[x1,y1][x2,y2][x3,y3][xn][yn],判断[x,y]是否在目标区间内。2.思路

1. 简述

    给定一个源区间[x,y] (y>=x)和N个无序目标区间[x1,y1][x2,y2][x3,y3]...[xn][yn],判断[x,y]是否在目标区间内。

2. 思路

    这个比较简单,合并目标区间,判断源区间是否在目标区间内即可。具体过程如下:
    第一步,先把目标区间排序。
    第二步&#xff0c;从第一个区间开始&#xff0c;遍历首先找到一个[xi,yi]&#xff0c;使得 x[i]<&#61; X <&#61; y[i]&#xff0c;如果找不到&#xff0c;说明不在目标区间内&#xff0c;如果找到了并且yi>&#61;y&#xff0c;那么结束工作&#xff0c;源区间在目标区间内&#xff0c;如果找到了&#xff0c;但是yi    第三步&#xff0c;继续遍历[xi,yi]&#xff0c;如果xi>y(i-1)&#xff0c;那么区间断裂&#xff0c;源区间不在目标区间内&#xff0c;否则如果yi>&#61;y&#xff0c;找到了&#xff0c;源区间在目标区间内&#xff0c;否则继续寻找。
    第四步&#xff0c;如果都遍历结束了&#xff0c;但是没有发现源区间一定在目标区间内&#xff0c;说明源区间必然不在目标区间内。

    第一步&#xff0c;N*LogN&#xff0c;第二步&#43;第三步&#xff0c;N&#xff0c;第四步&#xff0c;1。复杂度为O(N LogN)

3. 参考

    编程之美&#xff0c;2.19&#xff0c;区间重合判断

 

#include

#define  N    11 

int Is_Include(int x[], int y[], int X, int Y, int n);

int main()
{
 int  x[N] &#61; {1,2,7,8,99,143,19,55,33,32,121};
 int  y[N] &#61; {3,3,20,15,200,202,25,75,35,39,155};

 int X &#61; 5;
 int Y &#61; 18;

 int i &#61; 0;
 int flag &#61; 0;
 
 printf("The Object Regions Are:\n");
 for (i &#61; 0; i  {
  if(i &#61;&#61; 5)
  {
   printf("\n");
  }

  printf("[%d,%d]\t\t", x[i], y[i]);
 }
 printf("\n");


 flag &#61; Is_Include(x, y, X, Y, N);
 
 if(flag)
 {
  printf("The Region [%d,%d] Is  In The Object Region.\n", X, Y);
 }
 else
 {
  printf("The Region [%d,%d] Is Not In The Object Region.\n", X, Y);
 }

 return 0;
}


int Is_Include(int x[], int y[], int X, int Y, int n)
{
 int i &#61; 0;
 int j &#61; 0;
 int tmpX &#61; 0;
 int tmpY &#61; 0;
 int maxY &#61; y[0];

 for(i &#61; 1; i  {
  tmpX &#61; x[i];
  tmpY &#61; y[i];

  if(y[i] > maxY)
  {
   maxY &#61; y[i];
  }
  
  j &#61; i - 1;

  while((j >&#61; 0) && (x[j] > x[j&#43;1]))
  {
   x[j&#43;1] &#61; x[j];
   y[j&#43;1] &#61; y[j];

   j--;
  }

  x[j&#43;1] &#61; tmpX;
  y[j&#43;1] &#61; tmpY;
 }

 printf("The Object Regions Are:\n");
 for (i &#61; 0; i  {
  if(i &#61;&#61; 5)
  {
   printf("\n");
  }

  printf("[%d,%d]\t\t", x[i], y[i]);
 }
 printf("\n");


 if ((Y > maxY) || (X  {
  return 0;
 }


 if(Y <&#61; y[0])
 {
  return 1;
 }
 
 for (i &#61; 0; i  {

  if ( y[i]   {
   continue;
  }
  else
  {
   break;
  }
 
 }

 if (x[i] <&#61; X && i  {
  if( y[i] > Y )
  {
   return 1;
  }
 }
 else
 {
  return 0;
 }

 tmpY &#61; y[i];
 tmpX &#61; x[i];

 for (i &#61; i &#43; 1; i  {
  if (x[i] > tmpY)
  {
   return 0;
  }
  if (y[i] > tmpY)
  {
   tmpY &#61; y[i];
   if (tmpY >&#61; Y)
   {
    return 1;
   }
  }
 }
 
 
 return 0;
}

 

转:https://www.cnblogs.com/wulijun/archive/2012/03/06/2381287.html



推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
author-avatar
小于2502919693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有