当前位置: 首页 > news >正文

497. 返回随机非重叠矩形中的一个坐标点

497. 非重叠矩形中的随机点

给定一个由非重叠的轴对齐矩形的数组 rects ,其中 rects[i] = [ai, bi, xi, yi] 表示 (ai, bi) 是第 i 个矩形的左下角点,(xi, yi) 是第 i 个矩形的右上角点。设计一个算法来随机挑选一个被某一矩形覆盖的整数点。矩形周长上的点也算做是被矩形覆盖。所有满足要求的点必须等概率被返回。

在给定的矩形覆盖的空间内的任何整数点都有可能被返回。

请注意 ,整数点是具有整数坐标的点。

实现 Solution 类:

Solution(int[][] rects) 用给定的矩形数组 rects 初始化对象。
int[] pick() 返回一个随机的整数点 [u, v] 在给定的矩形所覆盖的空间内。

示例 1:
在这里插入图片描述

输入:
[“Solution”, “pick”, “pick”, “pick”, “pick”, “pick”]
[[[[-2, -2, 1, 1], [2, 2, 4, 6]]], [], [], [], [], []]
输出:
[null, [1, -2], [1, -1], [-1, -2], [-2, -2], [0, 0]]

解释:
Solution solution = new Solution([[-2, -2, 1, 1], [2, 2, 4, 6]]);
solution.pick(); // 返回 [1, -2]
solution.pick(); // 返回 [1, -1]
solution.pick(); // 返回 [-1, -2]
solution.pick(); // 返回 [-2, -2]
solution.pick(); // 返回 [0, 0]

对于这一题,个人觉得非常有意义的一题,可能我们在解决实际生活问题的过程中,就能碰到这样的题目,很有价值去学一学解题代码如下:

typedef struct {
    int **data;
    int length;
    int *size;
    int sum;
    
   

} Solution;


Solution* solutionCreate(int** rects, int rectsSize, int* rectsColSize) {
    Solution *re=(Solution *)malloc(sizeof(Solution));
    re->length=rectsSize;
    re->data=(int **)malloc(sizeof(int *)*rectsSize);
    re->size=(int *)malloc(sizeof(int )*rectsSize);
    re->sum=0;

    for(int i=0;i<rectsSize;i++){
        re->data[i]=(int *)malloc(sizeof(int )*4);
        re->size[i]=(rects[i][2]-rects[i][0]+1)*(rects[i][3]-rects[i][1]+1);
        re->sum=re->sum+re->size[i];
        for(int j=0;j<4;j++){
            re->data[i][j]=rects[i][j];

        }
    }
    return re;

}


int* solutionPick(Solution* obj, int* retSize) {
    int  index=0;
    int p=rand();
    p=p%obj->sum+1;
    int z=0;
    for(int i=0;i<obj->length;i++){
        if(p>=z&&p<=z+obj->size[i]){
            index=i;
            break;
        }
        else{
            z=z+obj->size[i];
        }
    }
    int  pick_index=index;
    int x_range=obj->data[pick_index][2]-obj->data[pick_index][0]+1;
    int y_range=obj->data[pick_index][3]-obj->data[pick_index][1]+1;
    int x=rand()%x_range+obj->data[pick_index][0];
     int y=rand()%y_range+obj->data[pick_index][1];

     int *re=(int *)malloc(sizeof(int)*2);
     re[0]=x;
     re[1]=y;
     *retSize=2;
     return re;


}

void solutionFree(Solution* obj) {

}

/**
 * Your Solution struct will be instantiated and called as such:
 * Solution* obj = solutionCreate(rects, rectsSize, rectsColSize);
 * int* param_1 = solutionPick(obj, retSize);
 
 * solutionFree(obj);
*/

相关文章:

  • Referer和Referrer Policy及图片防盗链
  • ISO7816-3标准ATR解析
  • 谨慎redis的timeout参数
  • PHP 实例 - AJAX 与 XML
  • 期货开户每日无负债结算制度
  • Redis、JVM、并发、MySQL、Java、网络等一个你都“啃”不完,何谈BAT?
  • 详解 docker save 与 docker export 的区别
  • 【华为账号服务】【FAQ】Account Kit常见咨询合集--获取帐号个人信息相关问题
  • 每个人都可以用的开源微信机器人
  • 一幅长文细学华为MRS大数据开发(四)——HBase
  • Vue2、Vue3知识总结---完整版✨
  • ISME| 南农大沈其荣院士团队最新揭示根际微生物组成变化可更早预测番茄青枯病
  • java基于 ssm+jsp的线上授课作业管理系统
  • 一、Win10安装并检测GPU版本Pytorch
  • 远程调试 idea配置remote debug、在远程服务器的程序中,添加JVM启动参数-Xdebug
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • ➹使用webpack配置多页面应用(MPA)
  • angular2 简述
  • gitlab-ci配置详解(一)
  • Go 语言编译器的 //go: 详解
  • OSS Web直传 (文件图片)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring框架之我见(三)——IOC、AOP
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 排序算法学习笔记
  • 使用 QuickBI 搭建酷炫可视化分析
  • 项目实战-Api的解决方案
  • 自动记录MySQL慢查询快照脚本
  • 白色的风信子
  • Prometheus VS InfluxDB
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (八)c52学习之旅-中断实验
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (离散数学)逻辑连接词
  • (六)激光线扫描-三维重建
  • (十三)Maven插件解析运行机制
  • (四) Graphivz 颜色选择
  • (五)c52学习之旅-静态数码管
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • ****Linux下Mysql的安装和配置
  • .Net core 6.0 升8.0
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net Redis的秒杀Dome和异步执行
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net6 webapi log4net完整配置使用流程