力扣【303-区域检索】【数组-C语言】

题目:力扣-303

给定一个整数数组 nums,处理以下类型的多个查询:

计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right,sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + ... + nums[right] )

解决思路:

方法一:暴力破解,累加left到right之间的元素,效率低

方法二:计算给定数组的前缀和,计算结果放入新数组array[i]里

cpp 复制代码
方法二实现:
typedef struct {
    int* preSum;
} NumArray;

// 初始化新数组
NumArray* numArrayCreate(int* nums, int numsSize) {
    NumArray* array = (NumArray*)malloc(sizeof(NumArray));
    array->preSum = (int*)malloc((numsSize + 1) * sizeof(int));
    array->preSum[0] = 0;
    for (int i = 0; i < numsSize; i++) {
        array->preSum[i + 1] = nums[i] + array->preSum[i];
    }
    return array;
}
//主被调用函数
int numArraySumRange(NumArray* obj, int left, int right) {
    return obj->preSum[right + 1] - obj->preSum[left];
}

// 释放内存
void numArrayFree(NumArray* obj) {
    free(obj);
    obj = NULL;
}
*/

时间复杂度: O(1)
空间复杂度: O(n),可以优化到O(1),在原数组里计算对应的前缀和来覆盖原数组的值。

执行用时:
19ms 击败79.57%

消耗内存:
15.16MB 击败56.45%

相关推荐
夜瞬几秒前
【Flask 框架学习】01:编写第一个 Flask 应用
后端·python·学习·flask
我命由我123452 分钟前
Photoshop - Photoshop 工具栏(68)内容感知移动工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
wangjialelele22 分钟前
万字整理计算机网络知识点
linux·c语言·网络·c++·计算机网络·php
TracyCoder12325 分钟前
LeetCode Hot100(58/100)——138. 随机链表的复制
leetcode·链表
爱编码的小八嘎36 分钟前
第3章 Windows运行机理-3.1 内核分析(9)
c语言
Frostnova丶1 小时前
LeetCode 868. 二进制间距
算法·leetcode
2501_943695331 小时前
大专商务数据分析与应用专业,怎么学习电商数据的埋点知识?
学习·数据挖掘·数据分析
陈天伟教授1 小时前
人工智能应用- 材料微观:08.SliceGAN 的学习过程
人工智能·深度学习·学习
刘孬孬沉迷学习1 小时前
路由算法学习( Dijkstra 算法 Bellman-Ford方程算法)
网络·学习·智能路由器·信息与通信·dijkstra算法·路由算法·bellman-ford算法
枫叶丹41 小时前
【Qt开发】Qt界面优化(六)-> Qt样式表(QSS) 伪类选择器
c语言·开发语言·c++·qt