From 85b7b78bbfd84e323374ebe7dbf20d5be696ac36 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 9 Apr 2025 11:32:32 -0600 Subject: 667. beautiful arrangement 2 --- beautiful_arrangement2.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 beautiful_arrangement2.c (limited to 'beautiful_arrangement2.c') diff --git a/beautiful_arrangement2.c b/beautiful_arrangement2.c new file mode 100644 index 0000000..37e2dcb --- /dev/null +++ b/beautiful_arrangement2.c @@ -0,0 +1,38 @@ +// 667. Beautiful Arrangement II +#include "leetcode.h" + +/* + * given two integers 'n' and 'k', construct a list 'answer' that contains 'n' + * different positive integers ranging from 1 to 'n' and obeys the following + * requirement: suppose this list is 'answer = [a1, a2, a3, ..., an]', the the + * list '[a1 - a2, a2 - a3, ..., an-1 - an]' has exactly 'k' distinct integers. + * return the list 'answer'. if there are multiple valid answers, return any of + * them. + */ + +int *constructArray(int n, int k, int *returnSize) { + *returnSize = n; + int *ans = (int *)malloc(n * sizeof(int)); + int left = 1, right = n; + for (int i = 0; i < n; i++) { + if (k > 1) { + ans[i] = (k & 1) ? left++ : right--; + k--; + } else + ans[i] = left++; + } + return ans; +} + +int main() { + int rs1, *ca1 = constructArray(3, 1, &rs1); + int rs2, *ca2 = constructArray(3, 2, &rs2); + for (int i = 0; i < rs1; i++) + printf("%d ", ca1[i]); // expect: 1 2 3 + printf("\n"); + for (int i = 0; i < rs2; i++) + printf("%d ", ca2[i]); // expect: 1 3 2 + printf("\n"); + free(ca1); + free(ca2); +} -- cgit v1.2.3