日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员面试金典 - 面试题 05.08. 绘制直线(位运算)

發(fā)布時間:2024/7/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员面试金典 - 面试题 05.08. 绘制直线(位运算) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 題目

繪制直線。有個單色屏幕存儲在一個一維數(shù)組中,使得32個連續(xù)像素可以存放在一個 int 里。
屏幕寬度為w,且w可被32整除(即一個 int 不會分布在兩行上),屏幕高度可由數(shù)組長度及屏幕寬度推算得出。
請實現(xiàn)一個函數(shù),繪制從點(x1, y)到點(x2, y)的水平線。

給出數(shù)組的長度 length,寬度 w(以比特為單位)、直線開始位置 x1(比特為單位)、直線結(jié)束位置 x2(比特為單位)、直線所在行數(shù) y。
返回繪制過后的數(shù)組。

示例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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

  • 一行有幾個int,n = w/32 個
  • 從 y 行開始,那么起始下標 idx = y * n
class Solution { public:vector<int> drawLine(int length, int w, int x1, int x2, int y) {int n = w>>5, idx = y*n;vector<int> ans(length,0);while(x1 > 31)//不在當前int內(nèi){idx++;//下一個intx1 -= 32;//區(qū)間挪動x2 -= 32;}int l = x1, r;//找到了x1所在intfor( ; x2>=0; l=0,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

總結(jié)

以上是生活随笔為你收集整理的程序员面试金典 - 面试题 05.08. 绘制直线(位运算)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。