給定乙個只包括'('
,')'
,''
,'['
,']'
的字串,判斷字串是否有效。
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...