| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- /**
- * Note: The returned array must be malloced, assume caller calls free().
- */
- int *
- findIndices(int* nums, int numsSize, int indexDifference, int valueDifference, int* returnSize)
- {
- int *ret = malloc(2*sizeof(int));
- ret[0] = -1;
- ret[1] = -1;
- for ( int i = 0; i < numsSize; ++i ) {
- for ( int j = i; j < numsSize; ++j ) {
- if ( abs(i-j) < indexDifference ) { continue; }
- if ( abs(nums[i]-nums[j]) < valueDifference ) { continue; }
- ret[0] = i;
- ret[1] = j;
- goto exit;
- }
- }
- exit:
- *returnSize = 2;
- return ret;
- }
- char *
- list_to_cstr_temp(int *nums, int numsSize)
- {
- char *data = NULL;
- unsigned long size = 0;
- unsigned long cap = 1024;
- size = 0;
- if ( data == NULL ) { data = malloc(cap * sizeof(*data)); }
- memset(data, 0, cap);
- data[size++] = '[';
- for ( int i = 0; i < numsSize; ++i ) {
- if ( size + 2 >= cap ) { cap *= 2; data = realloc(data, cap); }
- if ( i > 0 ) { data[size++] = ','; }
- data[size++] = nums[i] + '0';
- }
- data[size++] = ']';
- data[size++] = '\0';
- return data;
- }
- void
- r(int *nums, int numsSize, int indexDifference, int valueDifference, int *exp)
- {
- int t;
- char *numsCstr = list_to_cstr_temp(nums, numsSize);
- int *ret = findIndices(nums, numsSize, indexDifference, valueDifference, &t);
- char *retCstr = list_to_cstr_temp(ret, 2);
- char *expCstr = list_to_cstr_temp(exp, 2);
- printf("findIndices(%s, %d, %d, %d) = %s | exp: %s\n",
- numsCstr, numsSize, indexDifference, valueDifference,
- retCstr,
- expCstr);
- free(numsCstr);
- free(ret);
- free(retCstr);
- free(expCstr);
- }
- int
- main(void)
- {
- int nums1[] = {5,1,4,1};
- int exp1[] = {0,3};
- r(nums1, 4, 2, 4, exp1);
- int nums2[] = {2,1};
- int exp2[] = {0,0};
- r(nums2, 2, 0, 0, exp2);
- int nums3[] = {1,2,3};
- int exp3[] = {-1,-1};
- r(nums3, 3, 2, 4, exp3);
- return 0;
- }
|