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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

LeetCode中等题之区域和检索 - 数组可修改

發布時間:2023/11/28 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode中等题之区域和检索 - 数组可修改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

給你一個數組 nums ,請你完成兩類查詢。
其中一類查詢要求 更新 數組 nums 下標對應的值
另一類查詢要求返回數組 nums 中索引 left 和索引 right 之間( 包含 )的nums元素的 和 ,其中 left <= right
實現 NumArray 類:
NumArray(int[] nums) 用整數數組 nums 初始化對象
void update(int index, int val) 將 nums[index] 的值 更新 為 val
int 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 = new NumArray([1, 3, 5]);
numArray.sumRange(0, 2); // 返回 1 + 3 + 5 = 9
numArray.update(1, 2); // nums = [1,2,5]
numArray.sumRange(0, 2); // 返回 1 + 2 + 5 = 8
提示:
1 <= nums.length <= 3 * 10^4
-100 <= nums[i] <= 100
0 <= index < nums.length
-100 <= val <= 100
0 <= left <= right < nums.length
調用 pdate 和 sumRange 方法次數不大于 3 * 10^4

來源:力扣(LeetCode)

解題思路

??這類題乍一看如果不考慮實際情況,假設一個理想的算力內存無限的情況下可以非常簡單的直接寫出來。

class NumArray:def __init__(self, nums: List[int]):self.nums=numsdef update(self, index: int, val: int) -> None:self.nums[index]=valdef sumRange(self, left: int, right: int) -> int:return sum(self.nums[left:right+1])# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# obj.update(index,val)
# param_2 = obj.sumRange(left,right)

??但是這也的后果往往是超時的:

??一個簡單的優化就是仿照分塊查詢來降低算法的時間復雜度,以一定的空間來換取時間。假設以分塊來解決這樣的題目,那么一個塊內需要放多少元素呢?這個可以從時間復雜度的分析得出一個理論上的最優解,此題的初始化和更新值的操作需要的時間復雜度分別為O(n)和O(1),而求和的復雜度如果以上面的操作來算的話是O(left-right),也是O(n)的級別,所以每次求和十分耗費時間(因為初始化只需要一次,相對調用次數較少,無需考慮初始化的優化),分塊的話假設一個塊的大小為A,那么考慮一個最普通的情況right和left跨越三個塊其時間復雜度就是O(A+n/A),當且僅當A取根號n的時候時間復雜度最小。

class NumArray:def __init__(self, nums: List[int]):self.blockSize=math.ceil(math.sqrt(len(nums)))self.sums=[0]*(len(nums)//self.blockSize+1)for i in range(len(nums)):self.sums[i//self.blockSize]+=nums[i]self.nums=numsdef update(self, index: int, val: int) -> None:self.sums[index//self.blockSize]+=val-self.nums[index]self.nums[index]=valdef sumRange(self, left: int, right: int) -> int:if left//self.blockSize==right//self.blockSize:return sum(self.nums[left:right+1])return sum(self.nums[left:(left//self.blockSize+1)*self.blockSize])+sum(self.sums[left//self.blockSize+1:right//self.blockSize])+sum(self.nums[right//self.blockSize*self.blockSize:right+1])# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# obj.update(index,val)
# param_2 = obj.sumRange(left,right)

總結

以上是生活随笔為你收集整理的LeetCode中等题之区域和检索 - 数组可修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久99精品久久久久子伦 | 91国产视频在线观看 | 国产中文一区二区三区 | 99产精品成人啪免费网站 | 久久精品这里只有精品 | 久久成人a | 成人无码精品1区2区3区免费看 | 免费伊人网 | 天堂av在线免费观看 | 在线黄色网页 | 性xxxx另类xxⅹ| 国产在线一区二区视频 | 日韩一级视频 | 欧美色欧美 | 色女孩综合网 | 99re这里有精品 | 中文字幕精品无码一区二区 | 欧美xxxx黑人又粗又长密月 | 男女高h视频 | 亚洲精品天天 | av老司机福利 | 麻豆视频污| 久草资源在线播放 | 激情综 | 久久精品视频在线播放 | 美女福利在线 | 涩涩视频免费观看 | 日日躁夜夜躁 | 欧美久久久久久久久久久 | 波多野结衣 久久 | 欧美伦理影院 | 精品成人网 | 亚洲第一综合色 | 国产精品16p| 三级精品在线 | 久久色播| 成人xx视频 | 亚洲天堂99 | 青娱乐免费在线视频 | 免费成人在线电影 | 久久久久久久999 | 精品久久一区二区 | 麻豆三级在线观看 | 欧美一级欧美三级在线观看 | 特大黑人娇小亚洲女 | 看91 | 爱爱综合网 | 麻豆传媒观看 | 亚洲精品国产精品国自产观看浪潮 | 国产一级做a爰片在线看免费 | 一级性爱视频 | 中文在线不卡视频 | av拍拍拍 | 日本国产精品一区 | 国产精品99精品 | 麻豆精品国产精华精华液好用吗 | www.狠狠艹 | 午夜插插插| 午夜裸体性播放 | 国产一区二区视频在线 | 欧美一区二区成人 | 国产永久免费视频 | 国产久一| 秋霞三区 | 少妇熟女一区二区 | 哺乳援交吃奶在线播放 | 国产激情文学 | 欧美一级二级在线观看 | 免费观看毛片 | 婷婷久久五月天 | 超碰v| 91午夜在线观看 | 欧美激情自拍偷拍 | 久久狠狠干 | 中文字幕欧美激情 | 99黄色| 无码人妻丰满熟妇精品区 | 性生交大片免费看狂欲 | 国产福利小视频在线观看 | 性生生活性生交a级 | 狠狠躁18三区二区一区传媒剧情 | 亚洲欧美日韩精品 | 欧美日韩另类视频 | 可以在线看的av | 欧美日韩高清一区二区 国产亚洲免费看 | 污视频软件在线观看 | 东北高大丰满bbbbzbbb | 国产激情视频在线观看 | 日本亲子乱子伦xxxx | 亚洲网站免费观看 | 美女伦理水蜜桃4 | 姑娘第5集在线观看免费好剧 | 看91| 国产一级黄色片子 | 激情综合区| 欧美在线一区二区三区四区 | 在线cao| 国产麻豆a毛片 | 日韩爱爱片 |