面试题05.08绘制直线问题详解(考察点为位运算符)

news2024/10/2 20:29:12

目录

一·题目:

二·详细思路汇总:

三·代码解答(带注释版):


一·题目:

leetcode原题链接:. - 力扣(LeetCode) 

二·详细思路汇总:

这里先剧透一下简单版思路哦:1.数组-1初始化;

                                                   2.定位找到x1,x2指向的整型;

                                                3.根据x1,x2是否指向同一整型,完成对x1左侧,x2右侧更改操作。

思路:大概就是把一维数组按照题目给的一行(W/32)有几个数把它类似的铺成二维数组的形式,然后根据(y这里从0行开始)行数,然后对应的x1,x2是对应的这一行的

比特位区间,原来所有的bite位是0,这要把这块区间内的0变为1然后得到此区间对应的十进制数字,再次更改,最后把它放入一个返回数组中即可(注:这里为了方便起见,我们

把返回数组都设为-1,因为如果x1和x2这个区间内包含了不止一个int数,那么最后都被改成1,由补码变成原码就是-1,简单来说就是省事),然后呢这就理解题意结束了,下面说一下

本题详解思路:

1.这里又要分情况就是【x1,x2】,也就是这个区间包含了一个数还是很多,即x1与x2指向同一个整形还是不同整型(如果是这种情况,我们给返回数组初始化-1就有作用了)

1.1 先假设不在同一个数身上:且x1,x2 分别指向不同的两个数的中间比特位上,这里我们分为两步,第一步是处理x1左边,第二步是处理x2右边----->

那么可以考虑把x1所在的整型的前部的bite位改为0,可是原来它是1,因此这里有点经验的话,我们就可以想到按位与,这时也会联想到通过位移操作符和1配合完成,此时

就把x1所在整型的前方bite位改成了0,而x2所在比特位后面还是1,下面就是对它的操作,这时还是用上面的方法,只不过,我们要改变后面就不能改变了x1前面(也就是刚改的0)、

此时1位移的就是x2所在整型前面的bite位(因为它们不都指向一个整型),最后就可以得到这个区间改完了,(最后一起判断-1改0)

2.2 也就是它们指向的是同一个整型那么此时可以说我们设置的都是-1便没有发挥作用,我们还是像上面一样两步走去改,这时改的时候区别的只是x2从上面那一步1移位到x2前面

一直到此整型第一个比特位处,而这个情况是移到x1指向的比特位处了(下面代码可以看成),其他几乎没变化。

3.也就是我们把【x1,x2】这个区间没有降落到的整型改回0即可。

 

三·代码解答(带注释版):

class Solution {
public:
    //返回与x1所在整型的&的值
    int corresx1(int x){
        int cor=0;
        for(int i=0;i<=31-(x%32);i++){
            cor+=1<<i;
        }
        return cor;
    }
    //返回与x2所在整型的&的值
     
      int corresx2(int x1,int x2,int start,int end){
        int cor=0;
         int terminate=0;
         if(start==end) terminate=31-(x1%32);
         else terminate=31;
        for(int i=31-(x2%32);i<=terminate;i++){
            cor+=1<<i;
        }
       
        return cor;

    }
    vector<int> drawLine(int length, int w, int x1, int x2, int y) {
    vector<int> ret(length,-1);
    //把x1,x2精确定位到整型处:
       int flag = y * w / 32;
        int head = x1 / 32 + flag;
        int rear = x2 / 32 + flag;
   //分别处理x1前方和x2后方:
        ret[head] = ret[head]&corresx1(x1);
        ret[rear] = ret[rear] &corresx2(x1,x2,head,rear);
        


       //不合适的-1转回0:
        for(int i=0;i<length;i++){
            if(i<head||i>rear&&ret[i]==-1) 
            {
                ret[i]=0;
                
            }

        }
        return ret;


                          
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2185003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Azure DevOps Server:不能指派新增的用户

Contents 1. 概述2. 解决方案 1. 概述 近期和微软Azure DevOps项目组解决了一个“无法指派开发人员”的问题&#xff0c;在此分享给大家。问题描述&#xff1a; 在一个数据量比较大的Azure DevOps Server的部署环境中&#xff0c;用户发现将新用户的AD域账户添加到Azure DevOps…

睢宁自闭症寄宿学校:培养特殊孩子的未来

在自闭症儿童的教育与康复领域&#xff0c;每一所学校的努力都是对孩子们未来无限可能的一次深刻诠释。从江苏睢宁到广东广州&#xff0c;自闭症寄宿学校正以不同的方式&#xff0c;为这些特殊的孩子铺设一条通往未来的希望之路。其中&#xff0c;广州的星贝育园自闭症儿童寄宿…

数据分析-29-基于pandas的窗口操作和对JSON格式数据的处理

文章目录 1 窗口操作1.1 滑动窗口思想1.2 函数df.rolling2 JSON格式数据2.1 处理简单JSON对象和JSON列表2.1.1 处理简单的JSON结构2.1.2 处理空字段2.1.3 获取部分字段2.2 处理多级json2.2.1 展开所有级别(默认)2.2.2 自定义展开层级2.3 处理嵌套列表JSON3 参考附录1 窗口操作 …

三维激光扫描技术在文保修缮项目中的应用

三维激光扫描技术作为一种新兴的高精度空间数据获取手段&#xff0c;其在文物保护和修缮项目中的应用日益广泛。这项技术通过快速获取物体表面的三维密集点云数据&#xff0c;为文物的数字化存档、保护、修复及再利用提供了强有力的技术支持。 数据采集&#xff1a;高精度与非接…

正则表达式(补充)

一、常见匹配模式 模式描述\w匹配字母数字及下划线\W匹配非字母数字下划线\s匹配任意空白字符&#xff0c;等价于 [\t\n\r\f].\S匹配任意非空字符\d匹配任意数字&#xff0c;等价于 [0-9]\D匹配任意非数字\A匹配字符串开始\Z匹配字符串结束&#xff0c;如果是存在换行&#xf…

[含文档+PPT+源码等]精品大数据项目-Django基于随机森林实现的空气质量指数预测研究系统

大数据项目-Django基于随机森林实现的空气质量指数预测研究系统的背景可以从以下几个方面进行阐述&#xff1a; 一、环境背景 空气污染问题日益严重&#xff1a; 随着工业化和城市化的快速发展&#xff0c;空气污染问题已成为全球性的挑战。空气中的主要污染物如PM2.5、PM10、…

DC00025【含论文】基于协同过滤推荐算法springboot视频推荐管理系统

1、项目功能演示 DC00025【含文档】基于springboot短视频推荐管理系统协同过滤算法视频推荐系统javaweb开发程序设计vue 2、项目功能描述 短视频推荐系统分为用户和系统管理员两个角色 2.1 用户角色 1、用户登录、用户注册 2、视频中心&#xff1a;信息查看、视频收藏、点赞、…

邂逅温暖,网上寻找通勤搭子曲折之旅,天下没有不散的筵席

在城市的钢铁丛林中&#xff0c;每日的通勤就像是一场孤独的战役。拥挤的地铁、堵塞的道路&#xff0c;让人心生疲惫。于是&#xff0c;我决定在网上寻找一位通勤搭子&#xff0c;希望能为这段枯燥的旅程增添一抹温暖的色彩。 我在各个社交平台上发布了寻找通勤搭子的帖子&…

用ChatGPT一天搞定一周工作,27个技巧你必须知道

在当今数字化时代&#xff0c;自动化工具已成为提升工作效率的关键利器。人工智能技术&#xff0c;尤其是语言模型如ChatGPT&#xff0c;正在彻底改变企业处理日常任务的方式。本文将深入探讨如何利用这些先进的计算机科学成果来优化工作流程&#xff0c;提高生产力&#xff0c…

Ambiguous mapping. Cannot map *** method 报错解决

报错 Ambiguous mapping. Cannot map basicController method There is already helloController bean method 原因 There is already helloController bean method BasicController 里面有一个"hello"重名了 解决 改一下HelloController.java里面的"hello…

【MySQL 06】表的增删查改

目录 1.insert 增添数据 1.1单行数据 全列插入 1.2多行数据 指定列插入 1.3插入否则更新 1.4.插入否则替换 2.select查找 2.1 全列查找 2.2指定列查找 2.3查询字段为表达式 2.4为查询结果指定别名 2.5 结果去重 2.6 where条件查询 2.7结果排序 2.8.筛选分页结果…

jmeter操作数据库

jmeter操作数据库 一、打开数据库 二、jmeter下载驱动&#xff0c;安装jdbc驱动 1、下载好的驱动包 2、将驱动包复制粘贴 存放在包的路径下 &#xff08;1&#xff09;jdk下面 a、路径&#xff1a;jdk1\jre\lib b、jdk1\jre\lib\ext &#xff08;2&#xff09;jmeter下 a、…

8641 冒泡排序

### 思路 冒泡排序是一种简单的排序算法&#xff0c;通过重复地遍历待排序的列表&#xff0c;比较相邻的元素并交换它们的位置来排序列表。每次遍历会将最大的元素“冒泡”到列表的末尾。当在一趟遍历中没有发生任何交换时&#xff0c;排序结束。 ### 伪代码 1. 读取输入的待排…

数据异质性与数据异构性的本质和举例说明

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在现代数据科学与信息技术领域&#xff0c;“数据异质性” 与 “数据异构性” 是两个常见的概念。对于初学者而言&#xff0c;明确这两个概念的本质及其间的差异至关重要。本文旨在以简明易懂的方式&am…

期权卖方如何提高期权策略的胜率——选择卖出虚值期权更稳健

期权卖方如何提高盈利的胜率&#xff1f; 影响期权卖方最重要的因素是权利金&#xff08;期权报价&#xff09;​。权利金越贵&#xff0c;期权卖方的盈亏平衡点越大&#xff0c;就容易盈利。 影响权利金的因素 行权价&#xff08;虚值期权权利金便宜&#xff0c;实值期权权利…

位运算(7)_消失的两个数字

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 位运算(7)_消失的两个数字 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 温馨提…

Python编程和开发过程中让人编程效率和舒适度很高的工具Anaconda

编程工作为什么需要提高效率&#xff1f; 在日益繁忙的工作环境中&#xff0c;选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度&#xff0c;甚至让团队协作更加顺畅。 那么&#xff0c;编写python代码过程中…

HTML+CSS基础用法介绍四

目录&#xff1a; 复合选择器 后代选择器子代选择器并集选择器交集选择器(了解)伪类选择器 CSS的特性 继承性层叠性 快捷键写法背景属性显示模式综合案列1&#xff1a;热词综合案列2&#xff1a;界面 &#x1f40e;正片开始 后代选择器 定义&#xff1a;由两个或多个基础选择…

代码的艺术之路——创建型设计模式

微信公众号&#xff1a;牛奶 Yoka 的小屋 有任何问题。欢迎来撩~ 最近更新&#xff1a;2024/10/02 [大家好&#xff0c;我是牛奶。] 我们所写的每一行代码&#xff0c;说到底其实是对真实世界的每一处细节的映射。而设计模式&#xff0c;就是为了能更好的映射现实世界总结出的…

[C++] 剖析AVL树功能的实现原理

文章目录 引言AVL树的关键性质为什么选择AVL树&#xff1f; AVL树的结构节点对象的类 AVL树的插入检查是否为空树并处理根节点查询插入位置&#xff08;非递归&#xff09;插入节点并连接父节点更新平衡因子&#xff08;在失去平衡的条件下进行旋转&#xff09; 旋转旋转的原则…