leetcode原题:绘制直线(位运算)

这篇具有很好参考价值的文章主要介绍了leetcode原题:绘制直线(位运算)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:

已知一个由像素点组成的单色屏幕,每行均有 w 个像素点,所有像素点初始为 0,左上角位置为 (0,0)

现将每行的像素点按照「每 32 个像素点」为一组存放在一个 int 中,再依次存入长度为 length 的一维数组中。

我们将在屏幕上绘制一条从点 (x1,y) 到点 (x2,y) 的直线(即像素点修改为 1),请返回绘制过后的数组。

示例:

输入:length = 1, w = 32, x1 = 30, x2 = 31, y = 0
 输出:[3]
 解释:在第 0 行的第 30 位到第 31 位画一条直线,屏幕二进制形式表示为 [00000000000000000000000000000011],因此返回 [3]

解题思路:

本题实际就是将二维数组展开,变成了一维数组。题目中说明每32个像素点放在一个int中,w为每行的像素点总数,那么每行就有w/32个int,length为数组中一共有多少个int。

1.在定位x1和x2时,需要找到x1位于res中的哪个int,所以需要表示出一个偏移量:

y表示第几行,每行有row个int,所以y*row 先确定x1所在下标

再找到x1在当前这个int中是第几位,所以需要加上i/32

2.定位好x1的位置后,现在需要将x1-x2的位上的0变为1:

采用位运算:1 << (31 - (i % 32))

源代码如下:

class Solution {
public:
    vector<int> drawLine(int length, int w, int x1, int x2, int y) {
        int row=w/32;//每行多少个int
        vector<int> res(length,0);//初始化一维数组
        //将x1-x2之间的位变为1
        for(int i=x1;i<=x2&&i<length*32;i++)
        {
            //y*row+i/32 这个是偏移量,可以直接定位到x1所在的int里
            //每次加的是(1 << (31 - (i % 32)))(最高位先访问)
            //对1进行左移
            res[y*row+i/32] |=(1<<(31-i%32));
        }
        return res;
    }
};

 文章来源地址https://www.toymoban.com/news/detail-660155.html

到了这里,关于leetcode原题:绘制直线(位运算)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode原题: 堆箱子(动态规划实现)

    题目: 给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组 [wi, di, hi] 表示每个箱子。 示例:  输入:box

    2024年02月11日
    浏览(28)
  • [职场] 会计学专业学什么 #其他#知识分享#职场发展

    会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科,本专业培养具备财务、管理、经济、法律等方面的知识和能力,具有分析和解决财务、金融问题的基本能力,能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管理学科高级专门人才

    2024年02月20日
    浏览(38)
  • leetcode原题:颜色填充(经典的递归问题)

    题目: 编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。 待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的行坐标为 sr 列坐标为 sc。需要填充的新颜色为 newColor 。 「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的

    2024年02月12日
    浏览(30)
  • 学习平台助力职场发展与提升

    近年来,随着互联网技术的发展, 学习平台 逐渐成为了职场发展和提升的必备工具。学习平台通过提供丰富的课程内容、灵活的学习时间和个性化的学习路径,帮助职场人士更好地提升自己的技能和知识储备,为职场发展打下坚实的基础。 学习平台的优势在于提供了丰富多

    2024年02月11日
    浏览(33)
  • 关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿

    题1: 岛屿周长 给定一个 row x col 的二维网格地图 grid ,其中:gridi = 1 表示陆地, gridi = 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。 岛屿

    2024年02月10日
    浏览(39)
  • 如何手机搜学法减分答案? #媒体#职场发展

    今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.证件照全能管家(APP) 一个非常好用的证件照APP 常用的证件照尺寸和底色都有、日常的证件照编辑完全够用,支持一键智能拍摄证件照,还可以对照片

    2024年02月19日
    浏览(35)
  • 实验一:绘制任意斜率的直线段

    一、实验目的 1.1掌握任意斜率直线段的中点Bresenham扫描转换算法 1.2掌握CLine直线类的设计方法 1.3掌握状态栏编程技术 二、实验步骤 在进行实验之前要知道绘制直线的中点Bresenham扫描转换算法的原理,以及如何构造重点误差项和不同斜率的直线的递推公式。 2.1:下载课程资

    2024年02月08日
    浏览(27)
  • leetcode原题 一次编辑(判定字符串是否只需要一次(或者零次)编辑)

    题目: 字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。 输入:  first = \\\"pale\\\" second = \\\"ple\\\" 输出: True 解题思路: 本题可以分为以下几种情况来处理: 1. 两个字符串长

    2024年02月13日
    浏览(31)
  • 【职业人生】如何有效的在职场当中避免工作失误和提高个人发展

         《左传·宣公二年》:“人谁无过,过而能改,善莫大焉。”古往今来,多少人犯过错误。强大如“智绝”的诸葛孔明,也有街亭之失。职场人更是难免会在工作中出现失误。     在职场生涯当中避免不了在工作当中带来的失误,在这过程当中,我们应当要学会怎么去

    2024年02月08日
    浏览(31)
  • [office] excel成绩表格数据排名次的教程 #职场发展#知识分享#媒体

    excel成绩表格数据排名次的教程 Excel 中经常需要使用到 排名 次的技巧,成绩表格数据具体该如何排名呢?接下来是小编为大家带来的excel成绩表格数据排名次的教程,供大家参考。 步骤1:不管在学校还是各个统计领域,排名应用随处可见,如果排序会打乱原有次序,那么好多

    2024年02月21日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包