[0496 the next bigger element] add C version

add C version for 0496: the next bigger element

Signed-off-by: liao junwu <andyliaowu5@163.com>
This commit is contained in:
liao junwu
2024-11-16 15:42:44 +08:00
parent 2d266b5766
commit da88f5e4c1

View File

@ -195,6 +195,62 @@ public:
建议大家把情况一二三想清楚了,先写出版本一的代码,然后在其基础上在做精简! 建议大家把情况一二三想清楚了,先写出版本一的代码,然后在其基础上在做精简!
## 其他语言版本 ## 其他语言版本
### C
``` C
/* 先用单调栈的方法计算出结果再根据nums1中的元素去查找对应的结果 */
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* nextGreaterElement(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
/* stcak */
int top = -1;
int stack_len = nums2Size;
int stack[stack_len];
//memset(stack, 0x00, sizeof(stack));
/* nums2 result */
int* result_nums2 = (int *)malloc(sizeof(int) * nums2Size);
//memset(result_nums2, 0x00, sizeof(int) * nums2Size);
/* result */
int* result = (int *)malloc(sizeof(int) * nums1Size);
//memset(result, 0x00, sizeof(int) * nums1Size);
*returnSize = nums1Size;
/* init */
stack[++top] = 0; /* stack loaded with array subscripts */
for (int i = 0; i < nums2Size; i++) {
result_nums2[i] = -1;
}
/* get the result_nums2 */
for (int i = 1; i < nums2Size; i++) {
if (nums2[i] <= nums2[stack[top]]) {
stack[++top] = i; /* push */
} else {
while ((top >= 0) && (nums2[i] > nums2[stack[top]])) {
result_nums2[stack[top]] = nums2[i];
top--; /* pop */
}
stack[++top] = i;
}
}
/* get the result */
for (int i = 0; i < nums1Size; i++) {
for (int j = 0; j < nums2Size; j++) {
if (nums1[i] == nums2[j]) {
result[i] = result_nums2[j];
}
}
}
return result;
}
```
### Java ### Java
```java ```java