zoukankan      html  css  js  c++  java
  • 大鱼吃小鱼

    【题目】在水中有许多鱼,可以认为这些鱼停放在 x 轴上。再给定两个数组 Size,Dir,Size[i] 表示第 i 条鱼的大小,Dir[i] 表示鱼的方向 (0 表示向左游,1 表示向右游)。这两个数组分别表示鱼的大小和游动的方向,并且两个数组的长度相等。鱼的行为符合以下几个条件:

    所有的鱼都同时开始游动,每次按照鱼的方向,都游动一个单位距离;

    当方向相对时,大鱼会吃掉小鱼;

    鱼的大小都不一样。

    输入:Size = [4, 2, 5, 3, 1], Dir = [1, 1, 0, 0, 0]

    输出:3

    请完成以下接口来计算还剩下几条鱼?

    package leetcode;
    
    import java.util.Stack;
    
    public class FishSolution {
    
        int fishSolution(int[] fishSize ,int[] fishDirection){
            //获取鱼的数量
            final int fishNumber = fishSize.length;
            //如果鱼的数量小于等于1,那么直接返回鱼的数量
            if(fishNumber <= 1){
                return fishNumber;
            }
    
            //0表示鱼向左游
            final int left = 0 ;
            // 1表示鱼向右游动
            final int right = 1;
    
            Stack<Integer> t = new Stack<>();
            for(int i= 0 ;i < fishNumber; i++){
                //当前鱼的情况: 1,游动方向,2大小
                final  int curFishDirection = fishDirection[i];
                final  int curFishSize = fishSize[i];
    
                //定义当前鱼是否被栈中的鱼吃掉
                boolean hasEat = false;
    
                //如果栈的还有鱼,并且栈中鱼向右,当前的鱼向左游,那么就会相遇的可能性
                while (!t.empty() && fishDirection[t.peek()] == right && curFishDirection == left){
                    //如果栈顶的鱼比较大,那么把新的来的吃掉
                    if(fishSize[t.peek()] > curFishSize){
                        hasEat = true;
                        break;
                    }
                    //如果栈中的鱼较小,那么会把栈中的鱼吃掉,栈中的鱼被消除,所以需要弹栈
                    t.pop();
                }
                //如果新来的鱼,没有被吃掉,那么压入栈中
                if(!hasEat ){
                    t.push(i);
                }
            }
          return t.size();
        }
    
        public static void main(String[] args){
            FishSolution fs = new FishSolution();
            int[] fishS= {1,2,3,4};
            int[] fishD ={0,1,0,0};
            int a =fs.fishSolution(fishS,fishD);
            System.out.println(a);
    
        }
    }
  • 相关阅读:
    Python基本语法_输入/输出语句详解
    集成骨骼动画Spine的几点经验
    标量 ,数组,hash 引用
    阿里RDS中插入emoji 表情插入失败的解决方案
    Target runtime Apache Tomcat v7.0 is not defined.
    销售行业ERP数据统计分析都有哪些维度?
    mysql 基于时间点恢复
    perl 闭包
    房地产企业营销分析系统建设中的关键性指标是什么?
    Python基本语法_运算符详解
  • 原文地址:https://www.cnblogs.com/goodtest2018/p/14854796.html
Copyright © 2011-2022 走看看