秋招突击——算法练习——9/4——73-矩阵置零、54-螺旋矩阵、48-旋转图像、240-搜索二维矩阵II

文章目录

    • 引言
    • 复习
    • 新作
      • 73-矩阵置零
        • 个人实现
      • 54-螺旋矩阵
        • 个人实现
        • 参考实现
      • 48-旋转图像
        • 个人实现
        • 参考实现
      • 240-搜索二维矩阵II
        • 个人实现
        • 参考实现
    • 总结

引言

  • 秋招开展的不是很顺利,还是要继续准备,继续刷算法!不断完善自己,希望能够找到一份好工作!

复习

新作

73-矩阵置零

在这里插入图片描述

个人实现
  • 这个题目,没有做到进阶,使用了一个list来保存所有为零的节点,然后逐个遍历,将所在的行和列都置为0,具体如下
class Solution {public void setZeroes(int[][] matrix) {List<int[]> list = new ArrayList<>();for(int i = 0;i < matrix.length;i ++){for(int j = 0;j < matrix[0].length;j ++){if(matrix[i][j] == 0){list.add(new int[]{i,j});System.out.println("1:: " + i + "  " + j);}}}int row = matrix.length;int col = matrix[0].length;System.out.println(row + "  " + col);// 遍历每一个点,并将对应所在行和列置位零for(int[] point : list){int x = point[0];int y = point[1];for(int i = 0;i < col;i ++){matrix[x][i] = 0;}for(int i = 0;i < row;i ++){matrix[i][y] = 0;}}}
}

54-螺旋矩阵

  • 题目链接
    在这里插入图片描述
个人实现

思路分析

  • 像这种题目就很像数学题,找规律就就行了!
  • 弄一个对应的boolean的矩阵,然后遇到不能访问的节点,直接左转,所以需要定义左转方向的具体实现,具体如下。
  • 本质上,还是模仿了DFS的遍历过程,在遍历节点那里卡了一下!
class Solution {public List<Integer> spiralOrder(int[][] matrix) {int[][] DIRECTIONS = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };int row = matrix.length;int col = matrix[0].length;boolean[][] visited = new boolean[row][col];// 遍历每一个点List<Integer> list = new ArrayList<>();int curDir = 0;int curX = 0;int curY = 0;for (int i = 0; i < col * row; i++) {visited[curX][curY] = true;list.add(matrix[curX][curY]);// 判定下一个方向的各自是否可以访问// 这里要判定一下尝试的次数,如果尝试了四次,就直接推出对应循环int nextX = 0;int nextY = 0;for (int j = 0; j < 4; j++) {nextX = curX + DIRECTIONS[curDir % 4][0];nextY = curY + DIRECTIONS[curDir % 4][1];if (nextX < 0 || nextX >= row || nextY < 0|| nextY >= col || visited[nextX][nextY]) {curDir++;} else {curX = nextX;curY = nextY;break;}}}return list;}
}

在这里插入图片描述

参考实现
  • 这里参考了Krahets的思路,设定四个边界,每一次都是遍历对应行或者列

在这里插入图片描述

  • 感觉写起来会比较费劲呀!可能不是我想出来,所以写起来比较费劲,但是空间复杂度,确实是最好!
class Solution {public List<Integer> spiralOrder(int[][] matrix) {if(matrix.length == 0)  return new ArrayList<>();int row = matrix.length;int col = matrix[0].length;// 逐个遍历对应的元素int t = 0;int b = row - 1;int l = 0;int r = col - 1;List<Integer> list = new ArrayList<>();while(true){for(int i = l;i <= r;i ++)  list.add(matrix[t][i]);if(++ t > b)    break;for(int i = t;i <= b;i ++)  list.add(matrix[i][r]);if(l > --r)    break;for(int i = r;i >= l;i --)  list.add(matrix[b][i]);if(t > --b)    break;for(int i = b;i >= t;i --)  list.add(matrix[i][l]);if(++ l > r)    break;}return list;}
}

48-旋转图像

  • 题目链接
    *
个人实现

思路分析

  • 这个题目跟上面一个题目一样,但是要求原地旋转图像,还是得找映射关系!
  • 这里只找到一个旋转关系,也就是需要一个辅助的矩阵,具体实现如下
  • 每一行,旋转90度,到对应的矩阵即可
class Solution {public void rotate(int[][] matrix) {int n = matrix.length;int[][] helpMatrix = new int[n][n];for(int i = 0;i < n;i ++){int[] row = matrix[i];for(int j = 0;j < n; j ++){helpMatrix[j][n - i - 1] = row[j];}}for(int i = 0;i < n;i ++){for(int j = 0;j < n ;j ++){matrix[i][j] = helpMatrix[i][j];}}}
}
参考实现
  • 这里是按照单点进行旋转实现的,比较难得就是怎么推导出这个基本的关系,找几个样例,然后直接推出来,然后再找几个样例做一个测试就行了
    在这里插入图片描述
class Solution {public void rotate(int[][] matrix) {int n = matrix.length;   for(int i = 0;i < n / 2;i ++){for(int j = 0;j < (n + 1) / 2;j ++){int temp = matrix[i][j];matrix[i][j] = matrix[n - j - 1][i];matrix[n - j -1][i] = matrix[n - i  -1][n - j -1];matrix[n - i -1][n - j -1] = matrix[j][n - i -1];matrix[j][n - i -1] = temp;}}}
}

总结

  • 说实话,这里还是挺容易犯错的,有可能会存在多个解的情况,我一开始就选了一组特殊解求解,结果求反了,应该同时弄一个一般解和特殊解,同时计算。

240-搜索二维矩阵II

题目链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

个人实现

思路分析

  • 这个应该先匹配最大值和最小值,确定哪些可行的行,然后再比较剩余的列,确定是在那些列,然后在逐个比较对应的元素!

具体实现如下

class Solution {public boolean searchMatrix(int[][] matrix, int tar) {int m = matrix.length;int n = matrix[0].length;List<Integer> rows = new ArrayList<>();List<Integer> cols = new ArrayList<>();for(int i = m - 1;i >= 0;i --){// 这里确定一个最大值和最小值,在决定是否要进行判定if(tar >= matrix[i][0] && tar <= matrix[i][n - 1])rows.add(i);}//遍历对应的列if(rows.isEmpty())  return false;for(int i = n - 1;i >= 0;i --){// 这里确定一个最大值和最小值,在决定是否要进行判定if(tar >= matrix[rows.get(rows.size() - 1)][i] && tar <= matrix[rows.get(0)][i])cols.add(i);}// 二层循环遍历for(int i :rows){for(int j :cols)if(matrix[i][j] == tar) return true;}return false;}
}

总结

  • 大概就是先遍历行,然后在遍历对应的列,找到最优的值。
  • 这个代码写得太差了,有序的话,找目标值,不应该想到是使用二分查找吗?咋个这里还用上了遍历,真的使绝了!
参考实现

参考链接
在这里插入图片描述

  • 这里将他看作是二叉树,然后采用二叉树的思路去做,还是二叉搜索树,然后直接找就行了!
    在这里插入图片描述
class Solution {public boolean searchMatrix(int[][] nums, int tar) {int i = nums[0].length - 1;int j = 0;while(i >= 0 && j < nums.length){System.out.println(nums[j][i] + " : " + j + " , "+ i);if(nums[j][i] < tar)   j ++;else if(nums[j][i] > tar)   i --;else return true;}return false;}
}

总结

  • 这个关系给我整的有点懵,真的尴尬,画了半天,才发现是字符写错了!

总结

  • 一有震动都想去看看,是不是有offer了,但是没啥反应,还是啥都没有,排序,排序!不过决定不了什么,就像今天游泳一样,想象周边得水流一点一点冲刷,冲刷,冲刷掉我的所有杂念,现在能够做的并不多,只能尽我所能去面试,准备面试,其他的,决定不了!

9/10

  • 看着上周写的执念,我忽然间释怀了,想告诉自己,美团没排序上,还是挂了,志愿结束了。不过这都不算什么,我还有机会,继续在面试就是了,加油!

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

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

相关文章

Vue实现自定义进度条占比功能 Vue自定义进度条功能

在不使用echarts等第三方插件的情况下,使用Vue实现自定义的进度条占比功能,并且是多数据可选循环的 预览图效果 首先看一下获取的后端返回的数据结构,其中每一组加起来等于 22 ,也就是说如果你自己算的话也是同理,根据 占比的数值 除以 总和 =的百分比再去渲染对应占比…

Linux连接阿里云服务器的一系列命令教程

**-p&#xff1a;**连同文件的属性一起复制过去&#xff0c;而非使用默认属性(备份常用)&#xff1b; **-d&#xff1a;**若来源档为连结档的属性(link file)&#xff0c;则复制连结档属性而非文件本身&#xff1b; **-r&#xff1a;**递归持续复制&#xff0c;用於目录的复制…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程&#xff08;十五&#xff09; | SpringBoot集成RabbitMq&#xff08;消息丢失、消息重复、消息顺序、消息顺序&#xff09; RabbitMQ常见问题解决方案问题一&#xff1a;消息丢失的解决方案&#xff08;1&#xff09;生成者丢失消息丢失的情景解决方案1&#xf…

记一次Hiveserver2连接异常的解决-腾讯云-emr

原文阅读&#xff1a;【巨人肩膀社区博客分享】记一次Hiveserver2连接异常的解决-腾讯云-emr 离线任务跑的好好的&#xff0c;忽然有一天失败了&#xff0c;查看海豚上的任务执行日志发现是hiveserver2连接超时了。 查看监控发现了几个问题一个是GC变得频繁&#xff0c;另一个…

【LabVIEW学习篇 - 19】:人机界面交互设计03

文章目录 运行菜单主菜单右键快捷菜单 运行菜单 菜单是人机交互非常重要的一个途径&#xff0c;它的好处是把需要的操作隐藏起来&#xff0c;当用户需要的时候才激活&#xff0c;因此相对于把所有的操作以按钮的形式放在界面上&#xff0c;可以节省很大的空间。 菜单有两种&a…

Learn OpenGL In Qt之着色器

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 公众号&#xff1a; C学习与探索 | 个人主页&#xff1a; rainInSunny | 个人专栏&#xff1a; Learn OpenGL In Qt 文章目录 写在前面GLSL变量输入输出顶点着色器片段着色器 Uniform更多属性 自己的着色器类 关注公众号&#xff1a;…

TCP通信实现

前言 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于流的通信协议。它是互联网协议栈&#xff08;TCP/IP&#xff09;中的核心协议之一&#xff0c;主要用于保证在计算机网络中可靠地传输数据。 TCP通信的基…

Android视频编辑:利用FFmpeg实现高级功能

在移动设备上进行视频编辑的需求日益增长&#xff0c;用户期望能够在智能手机或平板电脑上轻松地编辑视频&#xff0c;以满足社交媒体分享或个人存档的需求。Android平台因其广泛的用户基础和开放的生态系统&#xff0c;成为视频编辑应用的理想选择。FFmpeg&#xff0c;作为一个…

Leetcode面试经典150题-55.跳跃游戏

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public boolean canJump(int[] nums) {/**如果就一个位置&#xff0c;你本来就在这&#xff0c;肯定可以跳到*/if(nums.length 1) {return true;}/**这个题的解题思路是遍历数组&#xff0c;如果当前位置不在之…

Golang | Leetcode Golang题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; const mask1, mask2 1 << 7, 1<<7 | 1<<6func getBytes(num int) int {if num&mask1 0 {return 1}n : 0for mask : mask1; num&mask ! 0; mask >> 1 {nif n > 4 {return -1}}if n > 2 {return n}r…

AI大模型零基础学习到精通:jieba分词用法及原理

2.jieba分词用法及原理 1.概述 上篇文章分析了自然语言处理&#xff0c;特别是中文处理中&#xff0c;分词的几个主要难点。为了解决这些难点&#xff0c;提出了基于字符串匹配的算法和基于统计的分词算法。针对当前的几种分词引擎&#xff0c;对其分词准确度和速度进行了评估…

实时监控视频接入到AS-VJ900拼接系统中,发现服务器的英伟达GPU 驱动状态不对 导致拼接后实时视频请求失败的问题解决

目录 一.问题背景 1.1拼接平台简介 1.2问题描述 二.问题解决过程 2.1查看拼接前视频流 2.2查看GPU驱动 2.3重新安装GPU驱动 2.3.1确认驱动版本 2.3.2卸载不正常驱动 2.3.3重新安装驱动 三.问题解决结果 3.1查看解决结果 3.2nvidia-smi的补充 一.问题背景 1.1拼接…

NLP基础及其代码-tokenizer

基础知识 NLP-分词器&#xff1a;SentencePiece【参考Chinese-LLaMA-Alpaca在通用中文语料上训练的20K中文词表并与原版LLaMA模型的32K词表进行合并的代码】_sentencepiece 中文训练-CSDN博客 【OpenLLM 008】大模型基础组件之分词器-万字长文全面解读LLM中的分词算法与分词器…

TCP通信三次握手、四次挥手

前言 前面我说到了&#xff0c;UDP通信的实现&#xff0c;但我们经常说UDP通信不可靠&#xff0c;是因为他只会接收和发送&#xff0c;并不会去验证对方收到没有&#xff0c;那么我们说TCP通信可靠&#xff0c;就是因为他会进行验证接收端是否能够接收和发送&#xff0c;并且只…

使用Python通过字节串或字节数组加载和保存PDF文档

处理PDF文件的可以直接读取和写入文件系统中的PDF文件&#xff0c;然而&#xff0c;通过字节串&#xff08;byte string&#xff09;或字节数组&#xff08;byte array&#xff09;来加载和保存PDF文档在某些情况下更高效。这种方法不仅可以提高数据处理的灵活性&#xff0c;允…

怎么能实现VIN码充电吗?针对一个单一的VIN码,设置不同的服务费这种计费模式

为了实现VIN码充电并针对单一VIN码设置不同的服务费这种计费模式&#xff0c;需深入了解VIN码充电的实现过程及技术细节。VIN码充电是一种基于车辆识别号码&#xff08;VIN&#xff09;进行充电和计费的方法&#xff0c;适用于新能源汽车的充电桩。具体分析如下&#xff1a; V…

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-Gigabi…

告别繁琐,IsMyHdOK硬盘测速,即刻享受科技便利

快节奏的生活因科技而精彩纷呈&#xff0c;它赋予我们超越时空的能力&#xff0c;让工作与家庭的天平在忙碌中依然保持平衡——而面对数据爆炸的时代&#xff0c;硬盘作为数据存储与交换的核心部件&#xff0c;其性能直接影响到我们的工作效率和体验。正是在这样的背景下&#…

Python面试常见问题及详细解答:从基础到高级概念全覆盖

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 以下是Python面试中常见的一些问题及其详细答案的整理&#xff1a; 1. Python的可变与不可变对象 问题: 什么是可变对象和不可变对象&#xff1f;举例说明。答案: 可变对象: 可以在原地…

iOS 知识点记录

王巍 博客地址:OneVs Den git地址:onevcat (Wei Wang) GitHub 江湖人称喵神,目前就职于line。喵神的博客涉及方面比较广, 有Obejctive-C, Swift, SwiftUI, Unity等等。博客内容很有深度,非常值得关注。 戴铭 博客地址:戴铭的博客 git地址:ming1016 (戴铭) GitHub 《i…