盐步网站制作,定制一个高端网站,求一个手机能看的2022,参考消息官方网站阅读1. 题目
绘制直线。有个单色屏幕存储在一个一维数组中#xff0c;使得32个连续像素可以存放在一个 int 里。 屏幕宽度为w#xff0c;且w可被32整除#xff08;即一个 int 不会分布在两行上#xff09;#xff0c;屏幕高度可由数组长度及屏幕宽度推算得出。 请实现一个函数…1. 题目
绘制直线。有个单色屏幕存储在一个一维数组中使得32个连续像素可以存放在一个 int 里。 屏幕宽度为w且w可被32整除即一个 int 不会分布在两行上屏幕高度可由数组长度及屏幕宽度推算得出。 请实现一个函数绘制从点(x1, y)到点(x2, y)的水平线。
给出数组的长度 length宽度 w以比特为单位、直线开始位置 x1比特为单位、直线结束位置 x2比特为单位、直线所在行数 y。 返回绘制过后的数组。
示例1:输入length 1, w 32, x1 30, x2 31, y 0输出[3]说明在第0行的第30位到第31为画一条直线屏幕表示为[0b000000000000000000000000000000011]示例2:输入length 3, w 96, x1 0, x2 95, y 0输出[-1, -1, -1]来源力扣LeetCode 链接https://leetcode-cn.com/problems/draw-line-lcci 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 解题
一行有几个intn w/32 个从 y 行开始那么起始下标 idx y * n
class Solution {
public:vectorint drawLine(int length, int w, int x1, int x2, int y) {int n w5, idx y*n;vectorint ans(length,0);while(x1 31)//不在当前int内{idx;//下一个intx1 - 32;//区间挪动x2 - 32;}int l x1, r;//找到了x1所在intfor( ; x20; l0,x2-32){r min(x2,31);//右端点for(int i l; i r; i){ans[idx] | 1(31-i);//把1挪到各个位置上}idx;}return ans;}
};4 ms 7.4 MB