河北农业建设信息网站,wordpress后台中文安装,怎么制作图片视频,文字壁纸做背景处理的网站735. 行星碰撞
解题思路 如果数组元素大于0 说明向右移动 那么不管 左边元素是不是大于0 都不会碰撞 如果数组元素小于0 说明想左边移动 那么判断左边元素 如果左边元素大于0 碰撞 那么遍历数组 当前元素大于0 直接入栈 如果当前元素小于0 判断栈顶元素是不是大于0 如果大…735. 行星碰撞
解题思路 如果数组元素大于0 说明向右移动 那么不管 左边元素是不是大于0 都不会碰撞 如果数组元素小于0 说明想左边移动 那么判断左边元素 如果左边元素大于0 碰撞 那么遍历数组 当前元素大于0 直接入栈 如果当前元素小于0 判断栈顶元素是不是大于0 如果大于0 直接出栈 判断存活的元素 如果栈顶元素和当前元素的绝对值相等 全部销毁 如果栈顶元素大于当前元素的绝对值 当前元素销毁 如果栈顶元素小于当前元素绝对值 栈顶元素出栈 然后还要判断下一个栈顶元素
class Solution {public int[] asteroidCollision(int[] asteroids) {// 创建一个栈StackInteger stack new Stack();// 如果数组元素大于0 说明向右移动 那么不管 左边元素是不是大于0 都不会碰撞// 如果数组元素小于0 说明想左边移动 那么判断左边元素 如果左边元素大于0 碰撞// 那么遍历数组 // 当前元素大于0 直接入栈// 如果当前元素小于0 判断栈顶元素是不是大于0 如果大于0 直接出栈// 判断存活的元素// 如果栈顶元素和当前元素的绝对值相等 全部销毁// 如果栈顶元素大于当前元素的绝对值 当前元素销毁// 如果栈顶元素小于当前元素绝对值 栈顶元素出栈 然后还要判断下一个栈顶元素for(int num:asteroids){// 大于0 直接入栈if(num 0){stack.push(num);}else{boolean alive true;// 当前元素设置存活 并且栈不是空的 栈顶元素大于0// 循环判断栈顶元素while(alive !stack.isEmpty() stack.peek() 0){// 比较绝对值大小alive stack.peek() Math.abs(num);// 栈顶元素 出栈if(stack.peek() Math.abs(num)){stack.pop();}}if(alive){// 如果元素还存活 将元素入栈stack.push(num);}}}// 将栈中元素写入数组int[] ans new int[stack.size()];int i ans.length - 1;;while(!stack.isEmpty() i 0){ans[i--] stack.peek();stack.pop();}return ans;}
}