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

news2024/11/26 0:38:11

文章目录

    • 引言
    • 复习
    • 新作
      • 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.coloradmin.cn/o/2123464.html

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

相关文章

Jupyter notebook配置与使用(安装过程+环境配置+运行实例)

前言 Jupyter Notebook 是一个开放源代码的 Web 应用程序&#xff0c;它允许创建和共享包含实时代码、方程式、可视化和叙述性文本的文档。 主要功能&#xff1a; 交互式计算&#xff1a;用户可以直接在浏览器中编写和执行代码。Markdown 支持&#xff1a;使用 Markdown 格式来…

一道迭代器失效练习题

随便写写 首先学习迭代器失效 传送门 : C—浅谈迭代器失效 学完迭代器失效之后做一道题呗 题目 分析 vector的迭代器为啥会失效 1、插入的时候扩容&#xff0c;转移空间出现野指针 2、删除的时候移动了元素&#xff0c;导致指针没指向正确的元素 list的迭代器为啥会失效 li…

pdf怎么压缩?分享5种压缩PDF文件的方法

pdf怎么压缩&#xff1f;PDF文件的压缩在日常办公和学习中尤为重要&#xff0c;它不仅能够大幅度缩减文件大小&#xff0c;节省宝贵的存储空间&#xff0c;还能加快文件在网络中的传输速度&#xff0c;提升工作效率。特别是在处理包含大量图像或复杂布局的PDF文档时&#xff0c…

Http带消息头两种请求办法

API接口最近经常碰到&#xff0c;协调几个乙方来回对接&#xff0c;把我折腾晕了&#xff0c;索性自己写一个小的工具&#xff0c;导入历史数据。 获取平台免登录token 接口说明 URL Path&#xff1a;gateweb/bigm-dm/openApi/ologin/openLogin 说明&#xff1a;第三方免登…

vue2 wavesurfer.js(7.8.5)简单使用

文档地址&#xff1a;https://wavesurfer.xyz/docs/ <template><div><el-row><el-card class"card"><div id"waveform" ref"waveform"></div></el-card></el-row><div>总时长&#xff1…

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…

亲测可用导航网站源码分享 – 幽络源

幽络源为大家分享一套经过亲测可用的导航网站源码。初看这套PHP源码时&#xff0c;其数据库结构更像是商城系统源码&#xff0c;但经过某位小天才的修改&#xff0c;它已变成一个功能完备的导航网站。经过站长的测试&#xff0c;该源码运行良好&#xff0c;简单部署即可使用&am…

基于springboot的在线租房系统设计与实现

项目描述 这是一款基于springboot的在线租房系统 截图

438.找到字符串中所有字母异位词

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;滑动窗口&#xff09; 很容易想到&#xff0c;这个题目要求我们在字符串s中找到一个定长的窗口让窗口里面出现异位词。 OK&#xff0c;先思考一下怎么快速判断两个字符串是否是异位词&#xff1f; 比较简单的方法是…

AV1 Bitstream Decoding Process Specification:约定

原文地址&#xff1a;https://aomediacodec.github.io/av1-spec/av1-spec.pdf没有梯子的下载地址&#xff1a;AV1 Bitstream & Decoding Process Specification摘要&#xff1a;这份文档定义了开放媒体联盟&#xff08;Alliance for Open Media&#xff09;AV1视频编解码器…

ubuntu配置tftp、nfs

tftp配置 tftp是简单文件传输协议&#xff0c;基于udp实现传输。这里的简单文件&#xff0c;指的是不复杂、开销不大的文件。 先在ubuntu中安装tftp&#xff0c;输入命令&#xff1a;sudo apt-get install tftp-hpa tftpd-hpa。 接着配置tftp。 输入命令&#xff1a;sudo v…

div内英文不换行问题以及解决方案

div内英文不换行问题以及解决方案 div盒子中文字换行问题&#xff1a;div中放中文的代码&#xff1a;div中放英文的代码&#xff1a; 解决办法注意 div盒子中文字换行问题&#xff1a; div设置宽度以后&#xff0c;如果div中放的是中文&#xff0c;默认文字超过div宽度会自动换…

GAF-PCNN-BiLSTM、GASF-CNN-BiLSTM、GADF-CNN-BiLSTM的多特征分类预测/故障诊断

GAF-PCNN-BiLSTM、GASF-CNN-BiLSTM、GADF-CNN-BiLSTM的多特征分类预测/故障诊断 目录 GAF-PCNN-BiLSTM、GASF-CNN-BiLSTM、GADF-CNN-BiLSTM的多特征分类预测/故障诊断分类效果格拉姆矩阵图 基本介绍程序设计参考资料 分类效果 格拉姆矩阵图 基本介绍 1.Matlab实现GAF-PCNN-Bi…

Kerberos:更安全的网络认证协议

简介 Kerberos 是一种网络认证协议&#xff0c;主要用于特定的场景下&#xff0c;代替传统的token方式&#xff0c;以一种更繁琐&#xff0c;但更安全的方式来认证用户信息。它通过票据 (ticket) 机制&#xff0c;确保用户在网络中与服务之间进行加密通信&#xff0c;并且避免…

【云备份】可视化客户端----QT开发➕QT数据库编程

文章目录 一、 需求分析二、 概念结构设计三、逻辑结构设计1. 用户表 (users)2. 客户端本地文件信息表 (upload_files)3. 备份记录表 (backup_records)4. 服务端备份文件信息表 (backup_files) 四、 开发工具五、具体实现&#xff08;一&#xff09; 客户端程序运行演示 一、 需…

7.科学计算模块Numpy(4)ndarray数组的常用操作(二)

引言 书接上回&#xff0c;numpy能作为python中最受欢迎的数据处理模块&#xff0c;脱离不了它最核心的部件——ndarray数组。那么&#xff0c;我们今天就来了解一下numpy中对ndarray的常用操作。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.掌握ndarray数组的分割 …

shader 案例学习笔记之smoothstep函数

参考&#xff1a;smoothstep 用来生成0-1的平滑过渡值 smoothstep函数源码实现&#xff1a; float smoothstep(float t1, float t2, float x) {// Scale, bias and saturate x to 0..1 rangex clamp((x - t1) / (t2 - t1), 0.0, 1.0); // Evaluate polynomialreturn x * x *…

@rem和rem用法和区别

在Windows的命令提示符&#xff08;cmd&#xff09;中&#xff0c;rem和rem都是用来注释批处理脚本的。 用法&#xff1a; rem&#xff1a;在一行的开头使用&#xff0c;注释只对当前行有效。rem&#xff1a;也在一行的开头使用&#xff0c;注释会一直持续到下一行。 区别&a…

基于SpringBoot的在线汽车租赁信息管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线汽车租赁信息…

STM32 HAL freertos零基础(五) STM32CubeMX配置完成后自定义二值信号量 解决二值信号量初始值为1问题

1、简介 通过上文虽然实现了二值信号量实战&#xff0c;但每次配置STM32CubeMX二值信号量都恢复默认值1&#xff0c;为了解决该问题&#xff0c;对于二值信号量通过CubeMX配置完成后&#xff0c;在程序内自定义二值信号量。 2、文件建立 建立BinarySem文件夹添加BinarySem.c…