棧-N735-行星碰撞

題目

  • 概述:給定一個數(shù)組,代表移動速度相同的行星,數(shù)組元素的絕對值表示行星的大小,正負代表行星的移動方向(左負右正),移動方向不同的行星會發(fā)生碰撞,小的行星遇到大的行星會爆炸,大小相同的行星相遇都會爆炸,問最后剩下哪些行星

  • 輸入:行星數(shù)組,長度范圍[0, 10000]

  • 輸入子項:非零整數(shù),大小范圍[-1000, 1000]

  • 輸出:碰撞后最終剩下的行星數(shù)組

  • 出處:https://leetcode-cn.com/problems/asteroid-collision/

思路

  • 由于需要記錄之前的行星信息用來判斷是否會發(fā)生碰撞,所以考慮用棧實現(xiàn)

  • 遍歷行星數(shù)組:

    1. 正數(shù) => 直接入棧
    2. 負數(shù):
      1. 棧為空 => 直接入棧
      2. 棧頂元素為負數(shù) => 直接入棧
      3. 棧頂元素為正數(shù):
        1. 當前元素絕對值 == 棧頂元素絕對值 => 棧頂元素出棧
        2. 當前元素絕對值 > 棧頂元素絕對值 => 棧頂元素出棧,重復
  • 棧中所剩元素即為碰撞后最終剩下的行星

代碼

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        LinkedList<Integer> stack = new LinkedList<>();
        for (int i = 0; i < asteroids.length; ++i) {
            if (asteroids[i] > 0) {
                stack.push(asteroids[i]);
            } else {
                while (true) {
                    if (stack.isEmpty() || stack.peek() < 0) {
                        stack.push(asteroids[i]);
                        break;
                    } else {
                        if (asteroids[i] + stack.peek() == 0) {
                            stack.pop();
                            break;
                        } else if (asteroids[i] + stack.peek() < 0) {
                            stack.pop();
                        } else {
                            break;
                        }
                    }
                }
            }
        }
        
        int[] result = new int[stack.size()];
        for (int i = stack.size() - 1; i >= 0; --i) {
            result[i] = stack.pop();
        }
        return result;
    }
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 在一個方法內(nèi)部定義的變量都存儲在棧中,當這個函數(shù)運行結(jié)束后,其對應的棧就會被回收,此時,在其方法體中定義的變量將不...
    Y了個J閱讀 4,576評論 1 14
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,258評論 0 38
  • 136.泛型 泛型代碼讓你可以寫出靈活,可重用的函數(shù)和類型,它們可以使用任何類型,受你定義的需求的約束。你可以寫出...
    無灃閱讀 1,658評論 0 4
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,721評論 0 5
  • 1. 寫在前面 很多時候我們都需要借助一些腳本語言來為我們實現(xiàn)一些動態(tài)的配置,那么就會涉及到如何讓腳本語言跟原生語...
    杰嗒嗒的阿杰閱讀 3,506評論 9 31

友情鏈接更多精彩內(nèi)容