• Leetcode 735 行星碰撞


     

      C:

    void dealLeft(int *asteroids, int size, int point)
    {
        if (point >= size)
            return;
        if (asteroids[point] >= 0)
            return;
        int left = point - 1;
        while (left >= 0 && asteroids[left] == 0)
            left--;
        if (left == -1 || asteroids[left] < 0)
            return;
        if (asteroids[point] + asteroids[left] > 0)
            asteroids[point] = 0;
        else if (asteroids[point] + asteroids[left] < 0)
        {
            asteroids[left] = 0;
            dealLeft(asteroids, size, point);
        }
        else
            asteroids[left] = asteroids[point] = 0;
    }
    
    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int *asteroidCollision(int *asteroids, int asteroidsSize, int *returnSize)
    {
        for (int i = 0; i < asteroidsSize; i++)
        {
            dealLeft(asteroids, asteroidsSize, i);
        }
        int size = 0;
        for (int i = 0; i < asteroidsSize; i++)
            if (asteroids[i] != 0)
                size++;
        *returnSize = size;
        if (size > 0)
        {
            int *reArr = (int *)malloc(sizeof(int) * size);
            int point = 0;
            for (int i = 0; i < asteroidsSize; i++)
                if (asteroids[i] != 0)
                {
                    reArr[point] = asteroids[i];
                    point++;
                }
            return reArr;
        }
        else
            return NULL;
    }

      JAVA:

    public final int[] asteroidCollision(int[] asteroids) {
            for (int i = 0; i < asteroids.length; i++) {
                searchLeft(asteroids, i);
            }
            int len = 0, point = 0;
            for (int i = 0; i < asteroids.length; i++)
                if (asteroids[i] != 0) len++;
            int[] reArr = new int[len];
            for (int i = 0; i < asteroids.length; i++) {
                if (asteroids[i] != 0) {
                    reArr[point] = asteroids[i];
                    point++;
                }
            }
            return reArr;
        }
    
        private final void searchLeft(int[] asteroids, int point) {
            if (asteroids[point] > 0) return;
            int left = point - 1;
            while (left >= 0 && asteroids[left] == 0) left--;
            if (left == -1 || asteroids[left] < 0) return;
            if (asteroids[left] + asteroids[point] > 0) asteroids[point] = 0;
            else if (asteroids[left] + asteroids[point] < 0) {
                asteroids[left] = 0;
                searchLeft(asteroids, point);
            } else {
                asteroids[point] = 0;
                asteroids[left] = 0;
            }
        }

      JS:

    /**
     * @param {number[]} asteroids
     * @return {number[]}
     */
    var asteroidCollision = function (asteroids) {
        for (let i = 0; i < asteroids.length; i++) dealLeft(asteroids, i);
        let reArr = [];
        for (let i = 0; i < asteroids.length; i++)
            if (asteroids[i]) reArr.push(asteroids[i]);
        return reArr;
    };
    
    //处理左边反向的
    var dealLeft = function (asteroids, point) {
        if (asteroids[point] > 0) return;
        let left = point - 1;
        while (left >= 0 && asteroids[left] == 0) left--;
        if (left == -1 || asteroids[left] < 0) return;
        if (asteroids[left] + asteroids[point] > 0) asteroids[point] = 0;
        else if (asteroids[left] + asteroids[point] < 0) {
            asteroids[left] = 0;
            dealLeft(asteroids, point);
        } else {
            asteroids[left] = 0;
            asteroids[point] = 0;
        }
    }

  • 相关阅读:
    Change the default MySQL data directory with SELinux enabled
    CentOS7使用firewalld打开关闭防火墙与端口
    常用screen参数
    Android手机上浏览器不支持带端口号wss解决方案
    How to Create Triggers in MySQL
    QT GUI @创建新的工程
    Linux内核源代码的结构(转)
    ARM体系的7种工作模式
    C语言中强制数据类型转换(转)
    Linux驱动设计—— 中断与时钟@request_irq参数详解
  • 原文地址:https://www.cnblogs.com/niuyourou/p/16008888.html
Copyright © 2020-2023  润新知