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

题目:力扣-303

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

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

解决思路:

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

方法二:计算给定数组的前缀和,计算结果放入新数组arrayi

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%

相关推荐
流浪00113 分钟前
C/C++ 后端筑基系列(一):C语言 —— 从基础到进阶系统指南
c语言
青 春 记 忆29 分钟前
LeetCode 155. 最小栈|Python 解法详解
开发语言·python·leetcode
艾莉丝努力练剑3 小时前
【AI接入大模型SDK】ChatSDK示例验证
人工智能·学习·面试·大模型·sdk
葡萄成熟时 !8 小时前
JAVA 常用API学习笔记
java·笔记·学习
鹿角片ljp9 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
别动我齐刘海10 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
.道阻且长.12 小时前
11.LeetCode算法习题讲解--滑动窗口--将x减到0的最小操作数
算法·leetcode·职场和发展
caimouse12 小时前
ReactOS 图形系统分析(51):元文件子系统 — metafile.c
c语言·开发语言
wenyq712 小时前
LeetCode 2460. Apply Operations to an Array
算法·leetcode
05664612 小时前
agent学习——流式响应与文本切分
网络·python·学习