最
近,我在網上沖浪的時候,發現一篇關於「為什麽裁員首先從技術人員開始」的貼文,引起了我的好奇。
網友的這個提問簡直就是直擊職場的痛點。
很多技術人員可能會感到不解甚至有些冤枉:我們不也是一直在默默地努力貢獻嗎?為什麽到頭來,我們卻成了被裁員的第一批人?
事實上,裁員的決策並非出於對技術人員的不重視,而是企業在面臨財務困境或計畫調整時不得不作出的選擇。
如果是計畫取消,那麽不僅技術人員,整個計畫組的命運都將一體。
而在面臨財務危機時,由於技術人員的薪資普遍較高,為了減少開支,公司可能只保留必要的維護人員。
正如一些網友一針見血指出的,技術人員的工作性質確實使他們在短期財務調整中成為了較為「脆弱」的一環。
還有網友說業務和銷售也不好過,但是,我覺得銷售和技術之間並非水火不容。相反,他們是企業中同樣重要的兩翼。
銷售人員的確是透過接計畫為公司帶來直接收入,但如果沒有技術人員的支撐,那些計畫就無法落地,企業的長遠發展也會受到影響。
裁員永遠是企業最不願意面對的選擇之一,但在必要時刻,如何做到最小的傷害和最大的效率,是每個企業都需要考慮的問題。
下面分享一道大廠的演算法題
今日演算法題,來自LeetCode的 第20題:有效的括弧,很多大 廠都考過,下面 是我的演算法思路及實作,讓我們來看看吧。
# 有效的括弧
演算法題目
給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。有效字串需滿足:
左括弧必須用相同型別的右括弧閉合。
左括弧必須以正確的順序閉合。
註意空字串可被認為是有效字串。
引言
括弧匹配是程式語言中常見的問題,它不僅用於編譯器的實作,還廣泛套用於日常的編程中。本文將透過C語言、Java和Python實作,詳細講解如何判斷一個字串中的括弧是否有效地匹配。
演算法思路
使用棧的數據結構來處理這個問題:
1.初始化棧: 建立一個空棧,用於儲存未匹配的左括弧。
2.遍歷字串: 逐個檢查字串的每個括弧:
如果棧不為空且頂部括弧與當前右括弧匹配,彈出棧頂元素。
否則,說明括弧無法匹配,返回 false。
如果是左括弧,將其壓入棧中。
如果是右括弧,檢查棧頂的左括弧是否與之匹配:
3.檢查棧狀態: 遍歷完成後,如果棧為空,說明所有括弧都成功匹配;否則,說明存在未匹配的左括弧,返回 false。
程式碼實作
C語言實作
#include<stdbool.h>
#include<stdlib.h>
boolisValid(char * s){
int n = strlen(s);
if (n % 2 == 1) {
returnfalse;
}
char* stack = (char*)malloc(n + 1);
int top = 0;
for (int i = 0; s[i]; i++) {
char c = s[i];
if (c == '(' || c == '[' || c == '{') {
stack[top++] = c;
} else {
if (top == 0) {
returnfalse;
}
char topChar = stack[top - 1];
if ((c == ')' && topChar != '(') || (c == ']' && topChar != '[') || (c == '}' && topChar != '{')) {
returnfalse;
}
top--;
}
}
return top == 0;
}
Java實作
import java.util.Stack;
public classSolution {
public boolean isValid(String s){
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(') stack.push(')');
elseif (c == '[') stack.push(']');
elseif (c == '{') stack.push('}');
elseif (stack.isEmpty() || stack.pop() != c) returnfalse;
}
returnstack.isEmpty();
}
}
Python實作
def isValid(s: str) -> bool:
stack = []
mapping = {")": "(", "}": "{", "]": "["}
forcharin s:
ifcharin mapping:
top_element = stack.pop() if stack else'#'
if mapping[char] != top_element:
return False
else:
stack.append(char)
return not stack
演算法解析
這個問題的解決關鍵在於使用棧來跟蹤未匹配的左括弧。時間復雜度為O(n),其中 n 是字串的長度,因為我們只需要遍歷一次字串。空間復雜度也為O(n),最壞情況下,我們會將所有的括弧都放入棧中。
範例和測試
以字串 "{[]}" 為例,該字串是有效的括弧字串。
總結
有效的括弧問題是一道經典的棧套用題目,它不僅能幫助我們熟悉棧的操作,還能提高我們對括弧匹配規則的理解。
熱門推薦