當前位置: 妍妍網 > 碼農

什麽牛馬公司,超過30歲就不要了,還上市公司。。。

2024-09-17碼農

以前我一直以為程式設計師35歲之後就不太好找工作了,昨天我在瀏覽招聘軟體的時候無意間發現,有不少企業在招聘要求上直接寫上不能超過30歲,看到這種奇葩要求有時候真的想罵人。。。

有一家上市公司竟然也這樣寫,不過他要求的是初級,這個勉強能接受。還有招聘高級的也要求30歲以下,真的是無語了,誰給它的勇氣。

--------------下面是今天的演算法題--------------

來看下今天的演算法題,這題是LeetCode的第503題:下一個更大元素 II。

問題描述


來源:LeetCode第503題

難度:中等

給定一個迴圈陣列 nums(nums[nums.length - 1] 的下一個元素是 nums[0]),返回 nums 中每個元素的下一個更大元素 。

數位 x 的 下一個更大的元素 是按陣列遍歷順序,這個數位之後的第一個比它更大的數,這意味著你應該迴圈地搜尋它的下一個更大的數。如果不存在,則輸出 -1 。

範例1:

輸入 : nums = [1,2,1]

輸出 : [2,-1,2]

解釋 : 第一個 1 的下一個更大的數是 2;

數位 2 找不到下一個更大的數;

第二個 1 的下一個最大的數需要迴圈搜尋,結果也是 2。

範例2:

輸入 : nums = [1,2,3,4,3]

輸出 : [2,3,4,-1,4]

  • 1 <= nums.length <= 10^4

  • -10^9 <= nums[i] <= 10^9

  • 問題分析


    這題和前幾天講的 類似,只不過這題是個迴圈陣列,我們對陣列 遍歷兩邊 即可,超出陣列長度之後,要對陣列長度取余。

    JAVA:

    publicint[] nextGreaterElements(int[] nums) {
    int length = nums.length;
    int ans[] = newint[length];
    Arrays.fill(ans, -1);// 預設都為-1
    Stack<Integer> stk = new Stack<>();
    // 相當於把陣列迴圈兩遍
    for (int i = 0; i < length * 2; i++) {
    int index = i % length;
    // 單調棧,儲存的是元素的下標,不是元素的值,從棧頂
    // 到棧底所對應的值是遞增的。
    while (!stk.isEmpty() && nums[stk.peek()] < nums[index])
    ans[stk.pop()] = nums[index];
    // 當前元素的下標入棧
    stk.push(index);
    }
    return ans;
    }

    C++:

    public:
    vector<intnextGreaterElements(vector<int> &nums){
    int length = nums.size();
    vector<intans(length, -1)// 預設都為-1
    stack<int> stk;
    // 相當於把陣列迴圈兩遍
    for (int i = 0; i < length * 2; i++) {
    int index = i % length;
    // 單調棧,儲存的是元素的下標,不是元素的值,從棧頂
    // 到棧底所對應的值是遞增的。
    while (!stk.empty() && nums[stk.top()] < nums[index]) {
    ans[stk.top()] = nums[index];
    stk.pop();
    }
    // 當前元素的下標入棧
    stk.push(index);
    }
    return ans;
    }

    Python:

    defnextGreaterElements(self, nums: List[int]) -> List[int]:
    length = len(nums)
    ans = [-1] * length # 預設都為-1
    stk = []
    # 相當於把陣列迴圈兩遍
    for i in range(length * 2):
    index = i % length
    while stk and nums[stk[-1]] < nums[index]:
    ans[stk.pop()] = nums[index]
    stk.append(index)
    return ans