Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit da88f5e

Browse files
committed
[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>
1 parent 2d266b5 commit da88f5e

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

problems/0496.下一个更大元素I.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,62 @@ public:
195195
建议大家把情况一二三想清楚了,先写出版本一的代码,然后在其基础上在做精简!
196196

197197
## 其他语言版本
198+
199+
### C
200+
201+
``` C
202+
/* 先用单调栈的方法计算出结果,再根据nums1中的元素去查找对应的结果 */
203+
/**
204+
* Note: The returned array must be malloced, assume caller calls free().
205+
*/
206+
int* nextGreaterElement(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
207+
208+
/* stcak */
209+
int top = -1;
210+
int stack_len = nums2Size;
211+
int stack[stack_len];
212+
//memset(stack, 0x00, sizeof(stack));
213+
214+
/* nums2 result */
215+
int* result_nums2 = (int *)malloc(sizeof(int) * nums2Size);
216+
//memset(result_nums2, 0x00, sizeof(int) * nums2Size);
217+
218+
/* result */
219+
int* result = (int *)malloc(sizeof(int) * nums1Size);
220+
//memset(result, 0x00, sizeof(int) * nums1Size);
221+
*returnSize = nums1Size;
222+
223+
/* init */
224+
stack[++top] = 0; /* stack loaded with array subscripts */
225+
226+
for (int i = 0; i < nums2Size; i++) {
227+
result_nums2[i] = -1;
228+
}
229+
230+
/* get the result_nums2 */
231+
for (int i = 1; i < nums2Size; i++) {
232+
if (nums2[i] <= nums2[stack[top]]) {
233+
stack[++top] = i; /* push */
234+
} else {
235+
while ((top >= 0) && (nums2[i] > nums2[stack[top]])) {
236+
result_nums2[stack[top]] = nums2[i];
237+
top--; /* pop */
238+
}
239+
stack[++top] = i;
240+
}
241+
}
242+
243+
/* get the result */
244+
for (int i = 0; i < nums1Size; i++) {
245+
for (int j = 0; j < nums2Size; j++) {
246+
if (nums1[i] == nums2[j]) {
247+
result[i] = result_nums2[j];
248+
}
249+
}
250+
}
251+
return result;
252+
}
253+
```
198254
### Java
199255
200256
```java

0 commit comments

Comments
 (0)