aboutsummaryrefslogtreecommitdiff
path: root/final_prices_discount.c
blob: 488a7d36cc07db8d180451a600bf2d3cdf5b7062 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 1475. Final Prices With a Special Discount in a Shop
#include "leetcode.h"

/*
 * you are given an integer array 'prices' where 'prices[i]' is the price of the
 * i'th item in a shop. there is a special discount for items in the shop. if
 * you buy the i'th item, then you will receive a discount equivalent to
 * 'prices[j]' where 'j' is the minimum index such that 'j > i' and 'prices[j]
 * <= prices[i]'. otherwise, you will not receive any discount at all. return an
 * integer array 'answer' where 'answer[i]' is the final price you will pay for
 * the i'th item of the shop, considering the special discount
 */

int *finalPrices(int *prices, int pricesSize, int *returnSize) {
  int *ans = (int *)malloc(pricesSize * sizeof(int));
  *returnSize = 0;
  for (int i = 0; i < pricesSize; i++) {
    bool flag = false;
    for (int j = i + 1; j < pricesSize; j++)
      if (prices[i] >= prices[j]) {
        ans[(*returnSize)++] = prices[i] - prices[j];
        flag = true;
        break;
      }
    if (!flag)
      ans[(*returnSize)++] = prices[i];
  }
  return ans;
}

int main() {
  int p1[] = {8, 4, 6, 2, 3}, p2[] = {1, 2, 3, 4, 5}, p3[] = {10, 1, 1, 6};
  int rs1, rs2, rs3;
  int *fp1 = finalPrices(p1, ARRAY_SIZE(p1), &rs1);
  int *fp2 = finalPrices(p2, ARRAY_SIZE(p2), &rs2);
  int *fp3 = finalPrices(p3, ARRAY_SIZE(p3), &rs3);
  for (int i = 0; i < rs1; i++)
    printf("%d ", fp1[i]); // expect: 4 2 4 2 3
  printf("\n");
  for (int i = 0; i < rs2; i++)
    printf("%d ", fp2[i]); // expect: 1 2 3 4 5
  printf("\n");
  for (int i = 0; i < rs2; i++)
    printf("%d ", fp3[i]); // expect: 9 0 1 6
  printf("\n");
  free(fp1), free(fp2), free(fp3);
}