design_stack_increment_op.c (1629B)
| // 1381. Design a Stack With Increment Operation
#include "leetcode.h"
/*
* design a stack that supports increment operations on its elements. implement
* the function increment that increments the bottom 'k' elements of the stack
* by 'val' if there are less than 'k' elements in the stack, increment all the
* elements in the stack
*/
typedef struct {
int *data;
int idx;
int size;
} CustomStack;
CustomStack *customStackCreate(int maxSize) {
CustomStack *obj = malloc(sizeof(CustomStack));
obj->data = (int *)calloc(maxSize, sizeof(int));
obj->size = maxSize;
obj->idx = 0;
return obj;
}
void customStackPush(CustomStack *obj, int x) {
if (obj->idx == obj->size)
return;
obj->data[obj->idx] = x;
obj->idx++;
}
int customStackPop(CustomStack *obj) {
if (!(obj->idx))
return -1;
obj->idx--;
return obj->data[obj->idx];
}
void customStackIncrement(CustomStack *obj, int k, int val) {
int min = k < obj->idx ? k : obj->idx;
for (int i = 0; i < min; i++)
obj->data[i] += val;
}
void customStackFree(CustomStack *obj) {
free(obj->data);
free(obj);
}
int main() {
CustomStack *obj = customStackCreate(3);
customStackPush(obj, 1);
customStackPush(obj, 2);
printf("%d\n", customStackPop(obj)); // expect: 2
customStackPush(obj, 2);
customStackPush(obj, 3);
customStackPush(obj, 4);
customStackIncrement(obj, 5, 100);
printf("%d\n", customStackPop(obj)); // expect: 103
printf("%d\n", customStackPop(obj)); // expect: 202
printf("%d\n", customStackPop(obj)); // expect: 201
printf("%d\n", customStackPop(obj)); // expect: -1
customStackFree(obj);
}
|