Day03

本文介绍了两个力扣(LeetCode)问题的解决方案:一是行星碰撞问题,通过使用栈来模拟碰撞过程,判断最终存活的行星;二是链表随机访问,实现对链表节点的随机访问。这两个问题都涉及到数据结构和算法的应用。
摘要由CSDN通过智能技术生成

力扣

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        // 只有 [ ->>>]   <<<- 这一种情况会发生爆炸
        // [<<<-] <<<-
        // [<<<-] ->>> 
        // [->>>] ->>>  均不会发生爆炸: 方向相同不会炸,方向相背离不会炸
        //定义一个栈,先将第一个行星放进去
        Stack<Integer> stack = new Stack<>();
        stack.push(asteroids[0]);
        for (int i = 1; i < asteroids.length; i++) {
            if (stack.isEmpty() || (asteroids[i] > 0 && stack.peek() > 0) || stack.peek() < 0){
                stack.push(asteroids[i]);
            } else {
                int x = asteroids[i];
                while (!stack.isEmpty() && x < 0 && stack.peek() > 0) {
                    int a = stack.pop();
                    if (Math.abs(asteroids[i]) == Math.abs(a)) {
                        x = 0;
                        break;
                    } else if (Math.abs(asteroids[i]) > Math.abs(a)) {
                        x = asteroids[i];
                    } else {
                        x = a;
                    }
                }
                if (x != 0) {
                    stack.push(x);
                }
            }
        }
        //将栈里面的元素放到一个数组里
        int[] result = new int[stack.size()];
        for (int i = result.length - 1; i >= 0; i--) {
            result[i] = stack.pop();
        }
        return result;
    }
}

力扣

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    List<Integer> list;
    Random random;

    public Solution(ListNode head) {
        list = new ArrayList<Integer>();
        while (head != null) {
            list.add(head.val);
            head = head.next;
        }
        random = new Random();
    }

    public int getRandom() {
        return list.get(random.nextInt(list.size()));
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(head);
 * int param_1 = obj.getRandom();
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值