zoukankan      html  css  js  c++  java
  • LeetCode–绘制直线

    LeetCode–绘制直线

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    说明

    面试题 05.08. 绘制直线

    题目

    绘制直线。有个单色屏幕存储在一个一维数组中,使得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]
    

    Java

    思路

    使用位运算

    代码
    class Solution {
        public int[] drawLine(int length, int w, int x1, int x2, int y) {
            int[] res = new int[length];
            int temp = y * w / 32;
            int head = x1 / 32 + temp;
            int rear = x2 / 32 + temp;
            for(int i = head; i <= rear; i++){
                res[i] = -1;
            }
            res[head] = res[head] & -1 >>> x1 % 32;
            res[rear] = res[rear] & Integer.MIN_VALUE >> x2 % 32;
            return res;
        }
    }
    

    感谢

    leetcode

    以及勤劳的自己
    关注公众号: 归子莫,获取更多的资料,还有更长的学习计划

  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/guizimo/p/13456631.html
Copyright © 2011-2022 走看看