zoukankan      html  css  js  c++  java
  • [编程题] 找出前边比自己高的人的身高--字节笔试题

    找出前边比自己高的人的身高--字节笔试题

    题目描述

    存在一个多组的输入,第一行输入是有N个同学,接下来的一行分别是N个同学的身高。某同学X前的第一个比他高的同学,记录下其身高值。返回是一行每个同学对应找到的其前边的第一个比自己高的身高值。

    示例

    例如1:

    输入:

    5

    1 2 3 4 5

    输出: -1 -1 -1 -1 -1

    例如2:

    输入:

    5

    5 4 3 2 1

    输出:

    -1 5 4 3 2

    Java代码

    package ncompanydemos.p2_bytedance;
    
    import java.util.ArrayList;
    import java.util.Deque;
    import java.util.LinkedList;
    import java.util.Scanner;
    
    /**
     * @author jiyongjia
     * @create 2020/7/11 - 20:28
     * @descp:  本地idea中是ctrl+d来停止scanner的输入无法停止的问题
     */
    
    public class Exam03{
        //输入输出问题
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
    
            ArrayList<Deque<Integer>> lis = new ArrayList<>();
            while(in.hasNext()){
                int n = in.nextInt();
                int[] arr = new int[n];
                for(int i=0;i<n;i++){
                    arr[i] = in.nextInt();
                }
                //调用方法
                Deque<Integer> stack = solve(n,arr);
                lis.add(stack);
            }
    
            //遍历出结果集
            for(Deque<Integer> d : lis){
                while(!d.isEmpty()){
                    System.out.print(d.pop()+" ");
                }
                System.out.println();
            }
        }
    
        //处理算法
        public static Deque<Integer> solve(int n,int[] arr){
            Deque<Integer> stack = new LinkedList<Integer>();
            if(n==1) {
                stack.push(-1);
                return stack;
            }
    
            for(int i=arr.length-1;i>=1;i--){
                boolean flag = false;
                for(int j=i-1;j>=0;j--){
                    if(arr[j]>arr[i]){
                        stack.push(arr[j]);
                        flag = true;//代表存入了值
                        break;
                    }
                }
                //如果内层for一直没有比当前大的值,就存-1进去
                if(!flag){
                    stack.push(-1);
                }
            }
            //最外层循环是处理到i=1结束的,最前边的那个值始终放-1;
            stack.push(-1);
            return stack;
        }
    }
    

    输出

    image-20200711205247204

    在线编程时候还是没通过,只通过自测用例,估计程序时间复杂度问题吧!要么就是磨人的输入输出有问题

  • 相关阅读:
    winRT Com组件开发流程总结
    win32 COM组件编写
    windows8 APP开发的远程调试
    VS2012中,C# 配置文件读取 + C#多个工程共享共有变量 + 整理using语句
    STL源码--序列式容器
    代码规范
    Visual Studio Code 断点调试配置方法(请按我的步骤 一定可以做到)
    CSS层级关系 学习笔记
    VUE 学习笔记
    CSS 学习笔记
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13285439.html
Copyright © 2011-2022 走看看