496 下乙個更大元素

2021-10-14 01:43:46 字數 1505 閱讀 7939

給定兩個 沒有重複元素 的陣列 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在nums2 中的下乙個比其大的值。

nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 -1。

參考官方題解

大致思路:陣列1是陣列2的子集,遍歷一遍陣列2,將所有元素的下乙個更大元素儲存在乙個雜湊表之中,再遍歷陣列1,按陣列1的元素順序將下乙個更大元素讀取到另乙個陣列上。得到陣列2每個元素的下乙個更大元素:將當前指向的元素與棧頂元素比較,若棧頂元素小於當前指向的陣列2的元素,則將棧頂元素出棧,此時指向的陣列2的元素則是其下乙個更大元素,一直比較到棧中的元素沒有比當前指向陣列2的元素小為止,將當前指向元素入棧,指標指向下乙個陣列2中的元素。如此迴圈,直到遍歷完陣列2中的元素,此時棧中剩下的元素皆無下乙個更大元素。

c語言實現

#define maxsize 1000

typedef

struct

hashmap;

hashmap*

inithashmap

(void

)//建立並初始化雜湊表

void

writehash

(hashmap* h,

int key,

int nextmax)

//寫入新的雜湊表項

h[p]

.write=1;

h[p]

.key=key;

h[p]

.nextmax=nextmax;

return;}

intreadhash

(hashmap* h,

int key)

//讀取對應鍵值的雜湊錶值

return h[p]

.nextmax;

}void

destroy

(hashmap* h)

int*

nextgreaterelement

(int

* nums1,

int nums1size,

int* nums2,

int nums2size,

int* returnsize)

stack[

++top]

=nums2[i]

;//當前值入棧

}//將剩餘的元素寫入雜湊表,剩餘元素沒有下乙個更大元素

while

(top>-1

)//讀取雜湊表的值如陣列

for(

int i=

0;i)free

(stack)

;destroy

(hm)

;return r_array;

}

496 下乙個更大元素

給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...

496 下乙個更大元素

給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...

496 下乙個更大元素 I

鏈結 給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出...