机试算法学习

又到了一年一度的校招干饭环节,本人不得已以应届生的身份卷入了这场洪流,让我们各自加油吧!

蛇形矩阵

xx机考编程题

题目描述

输入两个整数 n和 m,输出一个 n 行 m 列的矩阵,将数字 1到 n×m按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式

输入共一行,包含两个整数 n 和 m。

输出格式

输出满足要求的矩阵。

矩阵占 n 行,每行包含 m 个空格隔开的整数。

数据范围

1≤n,m≤100

解法

模拟法:

思路:

  1. 导入Java的Scanner类,以便从标准输入中获取用户输入。

  2. main 方法中,首先通过 Scanner 获取输入的两个整数 nm,分别表示矩阵的行数和列数。

  3. 创建一个二维数组 a,用于存储填充后的矩阵。

  4. 初始化四个边界指针:l(左边界)、r(右边界)、t(上边界)、d(下边界),并初始化计数器 cnt 为 1。

  5. 使用一个循环,当 l <= rt <= d 时,进行如下操作,这是一个螺旋填充的核心逻辑:

    • 从左到右,填充第 t 行,列从 lr
    • 递增 t,缩小上边界。
    • 从上到下,填充第 r 列,行从 td
    • 递减 r,缩小右边界。
    • 从右到左,填充第 d 行,列从 rl
    • 递减 d,缩小下边界。
    • 从下到上,填充第 l 列,行从 dt
    • 递增 l,扩大左边界。
  6. 在循环结束后,矩阵 a 中已经填充完毕。

  7. 使用嵌套的循环遍历矩阵 a,并使用 System.out.print 打印每个元素,每行元素之间用空格分隔,每行结束时用 System.out.println 换行。

总体思路是通过四个指针和循环实现螺旋填充,将数字从1递增填充到矩阵中的各个位置。这种方法可以确保按照螺旋的方式填充矩阵,最终输出完整的螺旋矩阵。

代码:

package com.company;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[][] a = new int[n][m];int l = 0, r = m - 1, t = 0, d = n - 1, cnt = 1;while (l <= r || t <= d) {for (int i = l; i <= r && t <= d; i++) a[t][i] = cnt++;t++;for (int i = t; i <= d && l <= r; i++) a[i][r] = cnt++;r--;for (int i = r; i >= l && t <= d; i--) a[d][i] = cnt++;d--;for (int i = d; i >= t && l <= r; i--) a[i][l] = cnt++;l++;}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {System.out.print(a[i][j] + " ");}System.out.println();}}
}

测试结果:

触底模拟:

思路:

  1. 导入Java的Scanner类,以便从标准输入中获取用户输入。

  2. main 方法中,首先通过 Scanner 获取输入的两个整数 nm,分别表示矩阵的行数和列数。

  3. 创建一个二维数组 a,用于存储填充后的矩阵。

  4. 定义两个数组 dxdy,分别表示四个方向的水平和垂直移动。例如,dx[0]dy[0] 表示向右移动,dx[1]dy[1] 表示向下移动,以此类推。

  5. 初始化变量 xy,表示当前位置的行和列,以及变量 u,表示当前的方向。

  6. 使用一个循环,从1到 n * m 遍历填充矩阵的数字。循环内部的操作如下:

    • 将当前位置 (x, y) 填充为当前数字 i
    • 根据当前方向 u 计算下一个位置 (newX, newY)
    • 检查下一个位置是否越界或已经被填充,如果是,则更改方向 u 为下一个方向,并重新计算新的位置 (newX, newY)
    • 更新当前位置 (x, y) 为新的位置 (newX, newY)
  7. 循环结束后,矩阵 a 中已经填充完毕。

  8. 使用嵌套的循环遍历矩阵 a,并使用 System.out.print 打印每个元素,每行元素之间用空格分隔,每行结束时用 System.out.println 换行。

总体思路是通过四个方向的移动来实现螺旋填充,将数字从1递增填充到矩阵的各个位置。在填充过程中,根据当前方向和位置的情况来判断是否需要更改方向,以确保按照螺旋的方式填充矩阵。最终输出完整的螺旋矩阵。

代码:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[][] a = new int[n][m];int[] dx = {0, 1, 0, -1};int[] dy = {1, 0, -1, 0};int x = 0, y = 0, u = 0;for (int i = 1; i <= n * m; i++) {a[x][y] = i;int newX = x + dx[u];int newY = y + dy[u];if (newX < 0 || newY < 0 || newX >= n || newY >= m || a[newX][newY] != 0) {u = (u + 1) % 4;newX = x + dx[u];newY = y + dy[u];}x = newX;y = newY;}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {System.out.print(a[i][j] + " ");}System.out.println();}}
}

输入测试:

单链表快速排序

旷视面试题

题目描述

给定一个单链表,请使用快速排序算法对其排序。

要求:期望平均时间复杂度为 O(nlogn),期望额外空间复杂度为 O(logn)。

思考题: 如果只能改变链表结构,不能修改每个节点的val值该如何做呢?

数据范围

链表中的所有数大小均在 int 范围内,链表长度在 [0,10000]。
本题数据完全随机生成。

解法

思路与普通的快排基本一致,将链表根据一个val分成小于val、等于val、大于val三段,再对前后两段递归进行快排,对于排序完的三段从前到后进行拼接即可完成。

代码:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[][] result = generateSpiralMatrix(n, m);// 打印生成的螺旋矩阵for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {System.out.print(result[i][j] + " ");}System.out.println();}}public static int[][] generateSpiralMatrix(int n, int m) {int[][] matrix = new int[n][m];int top = 0, bottom = n - 1, left = 0, right = m - 1;int num = 1;while (num <= n * m) {for (int i = left; i <= right && num <= n * m; i++) {matrix[top][i] = num++;}top++;for (int i = top; i <= bottom && num <= n * m; i++) {matrix[i][right] = num++;}right--;for (int i = right; i >= left && num <= n * m; i--) {matrix[bottom][i] = num++;}bottom--;for (int i = bottom; i >= top && num <= n * m; i--) {matrix[i][left] = num++;}left++;}return matrix;}
}

输入测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/140586.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据开发】数据全栈知识架构,数据(平台、开发、管理、分析)

文章目录 一、数据全栈知识架构1、数据方法&#xff08;思维&#xff0c;统计学&#xff0c;实践&#xff0c;北极星&#xff09;2、数据工具&#xff1a;数据仓库3、数据规范 二、数据分析工具1、大数据平台2、数据开发&#xff1a;入库计算&#xff08;重点&#xff09;3、数…

AI AIgents时代 - (三.) AutoGPT和AgentGPT

前两篇讲解了Agent的原理和组件&#xff0c;这节我将给大家介绍两个agent项目&#xff0c;给出它们的工作原理和区别&#xff0c;并教大家亲手尝试使用 Agents&#x1f389; &#x1f7e2; AutoGPT&#x1f916;️ 我们的老朋友&#xff0c;之前文章也专门写过。AutoGPT 是一…

MySQL单表查询和多表查询

一、单表查询 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作等 CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10)…

李宏毅hw-9:Explainable ML

——欲速则不达&#xff0c;我已经很幸运了&#xff0c;只要珍惜这份幸运就好了&#xff0c;不必患得患失&#xff0c;慢慢来。 ----查漏补缺&#xff1a; 1.关于这个os.listdir的使用 2.从‘num_文件名.jpg’中提取出数值&#xff1a; 3.slic图像分割标记函数的作用&#xf…

怎么选择AI伪原创工具-AI伪原创工具有哪些

在数字时代&#xff0c;创作和发布内容已经成为了一种不可或缺的活动。不论您是个人博主、企业家还是网站管理员&#xff0c;都会面临一个共同的挑战&#xff1a;如何在互联网上脱颖而出&#xff0c;吸引更多的读者和访客。而正是在这个背景下&#xff0c;AI伪原创工具逐渐崭露…

DAZ To UMA⭐一.DAZ简单使用教程

文章目录 &#x1f7e5; DAZ快捷键&#x1f7e7; DAZ界面介绍 &#x1f7e5; DAZ快捷键 移动物体:ctrlalt鼠标左键 旋转物体:ctrlalt鼠标右键 导入模型:双击左侧模型UI &#x1f7e7; DAZ界面介绍 Files:显示全部文件 Products:显示全部产品 Figures:安装的全部人物 Wardrobe…

ubuntu 18.04 中 eBPF samples/bpf 编译

1. history 信息 一次成功编译 bpf 后执行 history 得到的信息&#xff1a; yingzhiyingzhi-Host:~/ex/ex_kernel/linux-5.4$ history1 ls2 mkdir ex3 cd ex4 mkdir ex_kernel5 ls /boot/6 sudo apt install linux-source7 ls /usr/src/8 uname -r9 cd ex_kernel/10…

MySQL(7) Innodb 原理和日志

一、MySQL结构 客户端 server层 查询缓存&#xff08;5.7&#xff09; 连接器 分析器 优化器 执行器 引擎层 二、一条update操作mysql的流程 三、MySQL的日志 &#xff08;1&#xff09;redo log 保证MySQL 持久性的关键&#xff0c;如果MySQL宕机&#xff0c;buffer pool…

SpingBoot:整合Mybatis-plus+Druid+mysql

SpingBoot&#xff1a;整合Mybatis-plusDruid 一、特别说明二、创建springboot新工程三、配置3.1 配置pom.xml文件3.2 配置数据源和durid连接池3.2.1 修改application.yml3.2.2 新增mybatis-config.xml 3.3 编写拦截器配置类 四、自动生成代码五、测试六、编写mapper.xml&#…

远程端点管理和安全性

当今的企业网络环境是一个分布式动态环境&#xff0c;其中有许多需要管理、验证和保护的移动部件&#xff0c;而不会对最终用户的生产力产生任何威慑力。提供有效的端点管理安全性&#xff0c;同时仍提供无缝最终用户体验的解决方案至关重要。 Endpoint Central 执行的活动可确…

前端面试题记录

vue2响应式原理 vue2主要是采用了数据劫持结合发布者-订阅者模式来实现数据的响应式&#xff0c;vue在初始化的时候&#xff0c;会遍历data中的数据&#xff0c;使用object.defineProperty为data中的每一个数据绑定setter和getter&#xff0c;当获取数据的时候会触发getter&am…

基于STM32的宠物托运智能控制系统的设计(第十七届研电赛)

一、功能介绍 使用STM32作为主控设备&#xff0c;通过DHT11温湿度传感器、多合一空气质量检测传感器以及压力传感器对宠物的托运环境中的温湿度、二氧化碳浓度和食物与水的重量进行采集&#xff0c;将采集到的信息在本地LCD显示屏上显示&#xff0c;同时&#xff0c;使用4G模块…

C语言自定义类型(上)

大家好&#xff0c;我们又见面了&#xff0c;这一次我们来学习一些C语言有关于自定义类型的结构。 目录 1.结构体 2位段 1.结构体 前面我们已经学习了一些有关于结构体的知识&#xff0c;现在我们进行深入的学习有关于它的知识。 结构是一些值的集合&#xff0c;这些值称为…

大厂面试之算法篇

目录 前言 算法对于前端来说重要吗&#xff1f; 期待你的答案 算法 如何学习算法 算法基础知识 时间复杂度 空间复杂度 前端 数据结构 数组 最长递增子序列 买卖股票问题 买卖股票之交易明细 硬币找零问题 数组拼接最小值 奇偶排序 两数之和 三数之和 四数之…

谷歌版ChatGPT与旗下邮箱、视频、地图等,实现全面集成!

9月20日&#xff0c;谷歌在官网宣布推出Bard Extensions。借助该扩展用户可在谷歌的Gmail、谷歌文档、网盘、Google 地图、视频等产品中使用Bard。 Bard是谷歌基于PaLM 2大模型&#xff0c;打造的一款类ChatGPT产品&#xff0c;可自动生成文本、代码、实时查询信息等。新的集成…

pycharm中恢复原始界面布局_常用快捷键_常用设置

文章目录 1 恢复默认布局1 .1直接点击file→Manage IDE Settings→Restore Default Settings&#xff08;如下图所示&#xff09;&#xff1a;1.2 直接点击Restore and Restart&#xff0c; 然后Pycharm就会自动重启&#xff0c;重启之后的界面就是最原始的界面了 2 改变主题2.…

Nginx图片防盗链

原理 浏览器向web服务器发送请求时一般会在header中带上Referer信息&#xff0c;服务器可以借此获得一些信息用来处理盗链 不过Referer头信息其实是可以伪装生成的&#xff0c;所以通过Referer信息防盗链并非100%可靠 具体方法 核心点就是在Nginx配置文件中&#xff0c;加入…

C语言指向二维数组的四种指针以及动态分配二维数组的五种方式

文章目录 应用场景可能指向二维数组的指针动态分配二维数组 应用场景 当二维数组作为结构成员或返回值时&#xff0c;通常需要根据用户传递的参数来决定二维数组的大小&#xff0c;此时就需要动态分配二维数组。 可能指向二维数组的指针 如果现在有一个二维数组a[3][2]&…

解决模型半透明时看到内部结构的问题

大家好&#xff0c;我是阿赵。   之前在做钢铁侠线框效果的时候&#xff0c;说到过一种技术&#xff0c;这里单独拿出来再说明一下。   我们经常要做一些模型半透明效果&#xff0c;比如这个钢铁侠的模型&#xff0c;我做了一个Rim边缘光的效果&#xff0c;边缘的地方亮一点…

小白学Python:提取Word中的所有图片,只需要1行代码

#python# 大家好&#xff0c;这里是程序员晚枫&#xff0c;全网同名。 最近在小破站账号&#xff1a;Python自动化办公社区更新一套课程&#xff1a;给小白的《50讲Python自动化办公》 在课程群里&#xff0c;看到学员自己开发了一个功能&#xff1a;从word里提取图片。这个…