aboutsummaryrefslogtreecommitdiff
path: root/final_arr_state_k_mult1.c
blob: 1b5ea0770a86a6e31cf6110f24979eded3fddd8b (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
// 3264. Final Array State After K Multiplication Operations I
#include "leetcode.h"

/*
 * you are given an integer array 'nums', an integer 'k', and an integer
 * 'multiplier'. you need to perform 'k' operations on 'nums'. in each
 * operation, find the minimum value 'x' in 'nums'. if there are multiple
 * occurences of the minimum value, select the one that appears first. replace
 * the selected minimum value 'x' with 'x * multiplier'. return an integer array
 * denoting the final state of 'nums' after performing all 'k' operations
 */

int *getFinalState(int *nums, int numsSize, int k, int multiplier,
                   int *returnSize) {
  int *ans = (int *)malloc(numsSize * sizeof(int));
  for (int i = 0; i < numsSize; i++)
    ans[i] = nums[i];
  for (int i = 0; i < k; i++) {
    int min = 0;
    for (int j = 1; j < numsSize; j++)
      if (ans[j] < ans[min])
        min = j;
    ans[min] *= multiplier;
  }
  *returnSize = numsSize;
  return ans;
}

int main() {
  int n1[] = {2, 1, 3, 5, 6}, n2[] = {1, 2}, rs1, rs2;
  int *gfs1 = getFinalState(n1, ARRAY_SIZE(n1), 5, 2, &rs1);
  int *gfs2 = getFinalState(n2, ARRAY_SIZE(n2), 3, 4, &rs2);
  for (int i = 0; i < rs1; i++)
    printf("%d ", gfs1[i]); // expectd: 8 4 6 5 6
  printf("\n");
  for (int i = 0; i < rs2; i++)
    printf("%d ", gfs2[i]); // expectd: 16 8
  printf("\n");
  free(gfs1), free(gfs2);
}