@@ -195,6 +195,62 @@ public:
195
195
建议大家把情况一二三想清楚了,先写出版本一的代码,然后在其基础上在做精简!
196
196
197
197
## 其他语言版本
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
+ ```
198
254
### Java
199
255
200
256
```java
0 commit comments