数据结构与算法

数据结构与算法、

Task03:栈与递归、

递归理解:

递归需要满足的三个条件:
  1. 一个问题的解可以分解为几个子问题的解
  2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一
  3. 存在递归终止条件
递归最重要的是写出递推公式,然后找到终止条件。

车辆重排问题

public class TrainArrange {
    ArrayStack<Integer> stack;

    public boolean railroad(int [] data,int k){
        stack = new ArrayStack<>();
        for (int i = 0; i <k; i++) {
            stack.push(i);
        }
        int nowOut = 1;
        int minH = Integer.MIN_VALUE;
        int minS = -1;
        for (int i = 0; i <data.length ; i++) {
            if(data[i]==nowOut){
                System.out.println(data[i]);
           nowOut++;
            while(minH == minS){
                output(minH,minS,stack);
                nowOut++;
            }
        }else{
            if (Hold(data[i],minH,minS,stack)==false)
                return false;
            } }
        return true;
    }

    private boolean Hold(int datum, int minH, int minS, ArrayStack<Integer> k) {
        int bestTrack = -1;
        int bestTop = Integer.MAX_VALUE;
        for (int i = 0; i <k.getSize() ; i++) {
            if(k.getSize()!=0){
                int x = k.peek();
                if(datum<x&&x<bestTop){
                    bestTop = x;
                    bestTrack = i;
                }
            }else{
                if(bestTrack == -1){
                    bestTrack = i;
                    break;
                }
            }
        }
        if(bestTrack==-1){
            return false;
        }
        k.push(datum);
        if(datum<minH){
            minH=datum;
            minS=bestTrack;
        }
        return true;
    }

    private void output(int minH, int minS, ArrayStack<Integer> k) {
        k.pop();
        minH = Integer.MIN_VALUE;
        minS = -1;
        for (int i = 0; i <k.getSize() ; i++) {
            minH = k.peek();
            minS = i;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值