响应式网站怎么样,seo标题优化步骤,wp网站建设,安卓市场2021最新版下载题目#xff1a;
已知一个由像素点组成的单色屏幕#xff0c;每行均有 w 个像素点#xff0c;所有像素点初始为 0#xff0c;左上角位置为 (0,0)。
现将每行的像素点按照「每 32 个像素点」为一组存放在一个 int 中#xff0c;再依次存入长度为 length 的一维数组中。
…题目
已知一个由像素点组成的单色屏幕每行均有 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个intlength为数组中一共有多少个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:vectorint drawLine(int length, int w, int x1, int x2, int y) {int roww/32;//每行多少个intvectorint res(length,0);//初始化一维数组//将x1-x2之间的位变为1for(int ix1;ix2ilength*32;i){//y*rowi/32 这个是偏移量可以直接定位到x1所在的int里//每次加的是(1 (31 - (i % 32)))(最高位先访问)//对1进行左移res[y*rowi/32] |(1(31-i%32));}return res;}
};