LeetCode演算法題 堆疊

2021-10-05 17:24:23 字數 1832 閱讀 7324

給定乙個只包括'('')''''['']'的字串,判斷字串是否有效。

public

static

boolean

isvalid

(string s)

else')

)else

}else}}

if(!stack.

isempty()

)return

true

;}

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

思路:我們可以忽略陣列 nums1,先對將 nums2 中的每乙個元素,求出其下乙個更大的元素。隨後對於將這些答案放入雜湊對映(hashmap)中,再遍歷陣列 nums1,並直接找出答案。

public

static

int[

]nextgreaterelement

(int

nums1,

int[

] nums2)

else

else

stack.

pop();

} stack.

push

(nums2[i]);

}}int[

]answer=

newint

[nums1.length]

;for

(int i =

0; i < nums1.length ; i++

)else

}return answer;

}

我們從頭遍歷 nums 陣列,如果遇到的數字大小一直是公升序的,我們就不斷把對應的下標壓入棧中,這麼做的目的是因為這些元素在目前都是處於正確的位置上。一旦我們遇到前面的數比後面的數大,也就是 nums[j]比棧頂元素小,我們可以知道 nums[j] 一定不在正確的位置上。

public

intfindunsortedsubarray

(int

nums)

stack< integer > stack =

newstack

();int l = nums.length, r =0;

stack.

push(0

);for(

int i =

1; i < nums.length; i++)if

(stack.

isempty()

) stack.

push

(i);

} stack.

clear()

; stack.

push

(nums[nums.length-1]

);for(

int i = nums.length -

2; i >=

0; i--)if

(stack.

isempty()

) stack.

push

(i);

}return r - l >

0? r - l +1:

0;}

LeetCode 演算法題

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

Leetcode演算法題

56.合併區間 給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 intervals 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 intervals 1,4 4,5 輸出 1,5 解釋 ...

Leetcode演算法題

20 有效的括號 題目描述 給定乙個只包括 的字串 s 判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。示例 示例 1 輸入 s 輸出 true 示例 2 輸入 s 輸出 true 示例 3 輸入 s 輸出 false 示例 4 輸入 s 輸出 fal...