【经典】华为远程机试题分享(跟进)

2023-10-30

在上一篇博客中有说到面试的具体事儿

昨晚那种方法做出来之后,感觉可读性不好,也就是一般情况下很难看懂代码,所以接近睡着时我又想到一个办法比较简单,而且易懂,所以写这篇博客和大家分享一下吧(具体就围绕下图这个核心问题来做

其实我的想法很简单,就是借助链表来实现,因为链表删除功能方便,直接pollFirst() pollLast();

1、先取出来最上面一排,并移除;

2、取出最又一排并移除;

3、倒叙取出最下面一排并移除;

4、倒叙取出最左面一排并移除;

每次取出来后就删除,当删除一圈后又是一个新的二维;然后直接递归就完事儿了!

(下面粘贴代码)

public static void main(String[] args) {
        
        // 这里模拟一个二维数组
        // ** 这里用链表来存 
        LinkedList<LinkedList<Integer>> linkedLists = new LinkedList<>();
        LinkedList<Integer> linkedList = null;
        Integer[][] array = {{1,2,3,4,5,6,7},{8,9,10,11,12,13,14},{15,16,17,18,19,20,21},{22,23,24,25,26,27,28},{29,30,31,32,33,34,35}};
        for (int i = 0; i < array.length; i++) {
            linkedList = new LinkedList<>();
            for (Integer value : array[i]) {
                linkedList.add(value);
            }
            linkedLists.add(linkedList);
        }

        // 打印原来的数据
        System.out.println("打印提供的原数据:" + linkedLists.toString());

        LinkedList resList = new LinkedList<Integer>();
        printByCycle(linkedLists, resList);
        
        // 打印顺时针获取的数据
        System.out.println("顺时针打印原数据:" + resList);

    }
private static <T> void  printByCycle(LinkedList<LinkedList<T>> sourceList, List<T> targetList){
        // 从左到右  横向
        LinkedList<T> rmRow = sourceList.pollFirst();
        targetList.addAll(rmRow);
        //从上到下  竖向
        sourceList.forEach((e)->{
            targetList.add(e.pollLast());
            if(e.size()==0){
                sourceList.pollFirst();
            }
        });
        //从右到左  横向
        LinkedList<T> lastLinked = sourceList.pollLast();
        while (lastLinked!=null && lastLinked.size()>0){
            targetList.add(lastLinked.pollLast());
        }
        //从下到上 竖向
        for (int i = sourceList.size() - 1 ; i >=0 ; i--) {
            LinkedList<T> e = sourceList.get(i);
            targetList.add(e.pollFirst());
            if(e.size()==0){
                sourceList.pollLast();
            }
        }
        //递归
        if(sourceList.size()>0){
            printByCycle(sourceList, targetList);
        }
    }

 

  最后结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【经典】华为远程机试题分享(跟进) 的相关文章

随机推荐

  • Android Studio 导入Eclipse项目

    将Eclipse项目或者其他的Android项目导入Android 会因为项目结构不一样 或者下载的grandle版本不一致 经常会导致import project卡死 解决的简单办法 首先 打开Android studio 然后impor
  • Linux shell:判断变量是否包含某个字符串的几种方法

    方法一 利用grep查找 strA long string strB string result echo strA grep strB if result then echo 包含 else echo 不包含 fi 先打印长字符串 然后在
  • Vuejs Prop基本用法

    一 使用Prop传递数据 组件实例的作用域是孤立的 这意味着不能并且不应该在子组件的模板内直接引用父组件的数据 可以使用props把数据传给子组件 prop是父组件用来传递数据的一个自定义属性 子组件需要显示的地用props选项声明 pro
  • 异常:java.lang.ClassNotFoundException: org.springframework.web.servlet.Dispatcher

    首先声明一点 导致这个异常的情况有很多种可能 我只是说一下我遇到的异常解决办法 java lang ClassNotFoundException org springframework web servlet Dispatcher 可能原因
  • Wwise音频解决方案概述

    Wwise编辑器 音频设计师在Wwise编辑器 具体使用请参考 Wwise Help 中完成声音的集成和设置 并通过UE4和unity的Wwise插件 将制作好地资源导入到游戏编辑器中 Wwise编辑器是一款插件式架构的工具 其功能由众多插
  • 使用vue+百度接口实现关键词搜索

    html代码块 div 请输入关键词 div
  • Java11安装遇到C:\ProgramData\Oracle\Java\javapath\java.exe”

    1 官网下载java11 发现根本就找不到了 官网上放置的是最新的 之前版本我找不到 只有去别人那里拿 如果你刚好也想要 可以私聊我 我到时候发给你 2 下载完成直接下一步安装就OK了 但会发现只有jdk没有jre 其实根本没必要生成出jr
  • el-dialog实现可拖曳并且可点击底层页面

    el dialog实现可拖曳并且可操作底层页面 拖曳 1 新建文件 directives js import Vue from vue v dialogDrag 弹窗拖拽属性 Vue directive dialogDrag bind el
  • 【海思SS626

    目录 一 概述 二 安装交叉编译工具 2 1 安装 aarch64 mix410 linux tgz 2 2 安装 cc riscv32 cfg11 musl 20220523 elf tar gz 2 3 检查工具链版本 打印版本则表示安
  • Android 性能优化系列:启动优化进阶

    文章目录 启动速度优化的本质因素 CPU 层面进行速度优化 减少程序的指令数 降低时钟周期时间 降低每条指令的平均时间周期 缓存层面进行速度优化 缓存的读写速度 缓存的命中率 任务调度层面进行速度优化 通过实时进程和普通进程了解任务调度机制
  • 有了 screen 和 nohup 跑深度学习代码再也不用愁了

    在服务器上跑深度学习代码 xshell断开代码就挂掉了 如何能在服务器运行程序的时候 即使关闭终端也不会影响代码呢 screen 我用的是screen 推荐这个方法 我感觉比nohup好用一万倍 1 连接服务器 下图我连接了88 99 这个
  • java基础学习总结——面向对象1

    目录 一 面向过程的思想和面向对象的思想 二 简单理解面向对象 三 面向对象的设计思想 四 对象和类的概念 五 如何抽象出一个类 六 类 对象 之间的关系 七 Java与面向对象 八 为什么使用面向对象编程 一 面向过程的思想和面向对象的思
  • [C++]:for循环for(int num : nums)

    前言 时不可以苟遇 道不可以虚行 一 基于范围的for循环的基本语法 在c 11里 为for循环 添加一个container 它就会自动迭代 实现了对于vector型变量vec的内容打印 变量i遍历vector中的每一个元素 直到vecto
  • 解决RabbitMQ报错问题

    解决RabbitMQ报错问题 rabbitmq server service RabbitMQ broker Loaded loaded usr lib systemd system rabbitmq server service disa
  • 周志华《机器学习》课后习题解答系列(六):Ch5.10 - 卷积神经网络实验

    本系列相关答案和源代码托管在我的Github上 PY131 Machine Learning ZhouZhihua 卷积神经网络实验 手写字符识别 注 本题程实现基于python theano 这里查看完整代码和数据集 1 基础知识回顾 1
  • 使用PowerShell脚本来一键开启、关闭FTP服务

    可以使用PowerShell脚本来实现这一目标 下面是两个简单的PowerShell脚本 一个用于开启FTP服务 另一个用于关闭FTP服务 开启FTP服务 保存以下脚本为 Enable FTP ps1 开启IIS和FTP功能 Enable
  • Nextjs 的 App Router 路由模式核心概念简介

    Nextjs App Router 简介 Next js 13 引入了新的应用路由器 它建立在服务端组件之上 支持布局 嵌套路由 加载状态 错误处理等等 本文将介绍 App Router 新路由模型的基本概念 术语 树 Tree 一种用于可
  • neo4j--Cypher语法练习(LOAD CSV)

    1 21 LOAD CSV LOAD CSV用于从CSV文件中导入数据 CSV文件的URL可以由FROM后面紧跟的任意表达式来指定 需要使用AS来为CSV数据指定一个变量 LOAD CSV支持以gzip Deflate和ZIP压缩的资源 C
  • el-form表单回车提交,浏览器会刷新页面

    当el from 只有一个输入框时候 回车提交表单 刷新页面 原因 由于当表单只有一文本框时 按下回车将会触发表单的提交事件 从而导致页面刷新 解决办法 在 el from 加上 submit native prevent
  • 【经典】华为远程机试题分享(跟进)

    在上一篇博客中有说到面试的具体事儿 昨晚那种方法做出来之后 感觉可读性不好 也就是一般情况下很难看懂代码 所以接近睡着时我又想到一个办法比较简单 而且易懂 所以写这篇博客和大家分享一下吧 具体就围绕下图这个核心问题来做 其实我的想法很简单