题目给你一个数组 nums ,请你完成两类查询。其中一类查询要求 更新 数组 nums 下标对应的值另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 ,其中 left <= right实现 NumArray 类:NumArray(int[] nums) 用整数数组 nums 初始化对象void update(int index, int val) 将 nums[index] 的值 更新 为 valint sumRange(int left, int right) 返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 (即,nums[left] + nums[left + 1], ..., nums[right]) 示例 1:输入:["NumArray", "sumRange", "update", "sumRange"][[[1, 3, 5]], [0, 2], [1, 2], [0, 2]]输出:[null, 9, null, 8]解释:NumArray numArray =
题目给你一个正方形字符数组 board ,你从数组最右下方的字符 'S' 出发。你的目标是到达数组最左上角的字符 'E' ,数组剩余的部分为数字字符 1, 2, ..., 9 或者障碍 'X'。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。一条路径的 「得分」 定义为:路径上所有数字的和。请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对 10^9 + 7 取余。如果没有任何路径可以到达终点,请返回 [0, 0] 。 示例 1:输入:board = ["E23","2X2","12S"] 输出:[7,1]示例 2:输入:board = ["E12","1X1","21S"] 输出:[4,2]示例 3:输入:board = ["E11","XXX","11S"] 输出:[0,0]提示:2 <= board.l
题目城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回 由这些建筑物形成的 天际线 。每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示:lefti 是第 i 座建筑物左边缘的 x 坐标。righti 是第 i 座建筑物右边缘的 x 坐标。heighti 是第 i 座建筑物的高度。你可以假设所有的建筑都是完美的长方形,在高度为 0 的绝对平坦的表面上。天际线 应该表示为由 “关键点” 组成的列表,格式 [[x1,y1],[x2,y2],...] ,并按 x 坐标 进行 排序 。关键点是水平线段的左端点。列表中最后一个点是最右侧建筑物的终点,y 坐标始终为 0 ,仅用于标记天际线的终点。此外,任何两个相邻建筑物之间的地面都应被视为天际线轮廓的一部分。注意:输出天际线中不得有连续的相同高度的水平线。例如 [...[2 3], [4 5], [7 5], [11 5], [12 7]...] 是不正确的答案;三条高度为 5 的线应该在最终输出
题目给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。示例 1:输入:a = "11", b = "1" 输出:"100"示例 2:输入:a = "1010", b = "1011" 输出:"10101"提示:1 <= a.length, b.length <= 104 a 和 b 仅由字符 '0' 或 '1' 组成 字符串如果不是 "0" ,就不含前导零思路本题很直观就是直接模拟,从右往左,一位一位的加。代码class Solution { public: string addBinary(string a, string b) { int carry = 0; int m = a.length(); int n = b.length(); int ansLen = max(m,n)+1; string ans(ansLen,'
位元算基本介绍位运算包括左移、右移、与、或、异或、否。在c/c++种的符号分别是<<、>>、&、|、^、~。<<(左移):5101左移一位变成101010,效果是5*2。a<<b的效果是a*2b。>>(右移):5101右移一位变成210,效果是5/2。a>>b的效果是a/2b。&(与):1和1才是1,其他情况(0和1,1和0,0和0)都是0。|(或):0和0才是0,其他情况(0和1,1和0,1和1)都是1。^(异或):相同(0和0,1和1)为0,不同(1和0,0和1)为1。也被称为不进位的加法,即半加运算。~(否):按位取反,即0变成1,1变成0。技巧1 << n,表示2nn & 1,表示n的最右位数字,所以n >> i & 1表示n的第i位数字,i为从0开始,从右往左数的结果,a^a=0,a^0=a,a^b^c=(a^b)^c=a^(b^c)=a^c^b|运算常用来拼接两个数,比如1000和100,拼接结果为1100