dhnfjcndi 2022-03-28 16:46 采纳率: 37.5%
浏览 27
已结题

四六级考试,线性表的应用

img

int main()

{

    int n, k, a, b,i, j, x;

    SeqList L;
    scanf("%d %d", &n, &k);
    for (a = 0; a < n; a++)
        scanf("%d", &L.elem[a]);
    L.last = n - 1;
    for (a = 0; a < k; a++)
    {
        scanf("%d %d %d", &i, &j, &x);
        for (b = i - 1;b < j; b++)
            L.elem[b] = L.elem[b] + x;
    }
    print(&L);                //输出顺序表
}```


怎么降低这个算法的时间复杂度啊,运行老是超时
  • 写回答

1条回答 默认 最新

  • 对象被抛出 2022-03-28 18:16
    关注

    经典的差分算法, 建立差分数组b[i] = a[i]-a[i-1], 题目把原数组a[i]到a[j] (包括两端) 的之间的所有数据都统一加上一个数x, 对应的只需要把b[i]+x, b[j+1]-x就行了, 这样可以省去你里面的for

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月29日
  • 已采纳回答 3月28日
  • 创建了问题 3月28日