首页 > 其他分享 >面试金典题7

面试金典题7

时间:2024-09-19 17:24:40浏览次数:3  
标签:matrix 示例 int 矩阵 旋转 面试 vector 金典题

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

不占用额外内存空间能否做到?

示例 1:

给定 matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

原地旋转输入矩阵,使其变为:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

示例 2:

给定 matrix =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

原地旋转输入矩阵,使其变为:
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

其实这道题通过观察原矩阵和旋转后的矩阵可以发现原矩阵的第一行变成了旋转矩阵的最后一列,第二行变成了倒数第二列,第一行的第一个数变成了旋转矩阵最后一列的第一个数,以此类推,我们可知原矩阵矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。即matrix[i][j]变成了matrix_new[j][n-i-1]。这样我们很容易写出代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int ms=matrix.size();
        vector<vector<int>> matrix_new=matrix;
        for(int i=0;i<ms;++i){
            for(int j=0;j<ms;++j){
                matrix_new[j][ms-i-1]=matrix[i][j];
            }
        }
        matrix=matrix_new;
    }
};

接下来我们采用一种不占用额外空间的写法,一步一步交换,先转置矩阵,然后反转每一行就可以得到结果矩阵

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n=matrix.size();
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                swap(matrix[i][j],matrix[j][i]);
            }
        }
        for(int i=0;i<n;i++){
            int m=0;
            int k=n-1;
            while(m<k){
                swap(matrix[i][m],matrix[i][k]);
                m++;
                k--;
            }
        }
    }
};

标签:matrix,示例,int,矩阵,旋转,面试,vector,金典题
From: https://blog.csdn.net/m0_73096516/article/details/142363632

相关文章

  • 14:00面试,15:00就出来了,问的问题过于变态了。。。
    从小厂出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到9月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一道......
  • 单例模式 (Singleton Pattern) - 设计模式精讲·面试必备
    前言最近整理了一份设计模式手册:从入门到精通的实用指南。坦白说,我对网上那些过于理论化的教程感到有些失望。于是决定亲自动手,从基础概念到实际应用,把常用的设计模式都梳理了一遍。每种模式不仅包含核心原理,还附带了真实的代码示例,希望能帮助大家更好地理解和运用......
  • 最新推出Java面试题,持续更新!
    我国的八股文确实是独树一帜。以美国为例,北美工程师面试比较重视算法(Coding),近几年也会加入Design轮(系统设计和面向对象设计 OOD)和BQ轮(Behavioral question,行为面试问题)。那么为什么国内面试不采取这样的考察方式呢简单来说,互联网IT行业的求职者太多了,如果考察的......
  • @Autowired和@Resource的区别 详细讲解-包含面试题
    @Autowired和@Resource的区别一,介绍1.@Autowired@Autowired是Spring框架提供的一个注解,它简化了依赖注入的过程。通常情况下,当我们需要让一个类使用另一个类的功能时,我们可以在前者中声明后者的一个实例。使用@Autowired注解后,Spring容器会在运行时自动将合适的实......
  • 面试真题
    一.var有变量提升,是ES5的语法。块级作用域块级作用域指的是在代码块{}中声明的变量只在这个代码块内部有效,外部无法访问。这种作用域通常和let、const关键字一起使用。for(leti=0;i<10;i++){letj=i+1;}console.log(i,j);这里使用了let关键......
  • C++ 面试模拟02
    第一部分:基础知识什么是拷贝构造函数和赋值运算符?它们之间有什么区别?在C++中,const关键字的作用是什么?有哪些常见用法?C++中的内存管理机制是怎样的?如何避免内存泄漏?虚函数(virtualfunction)的作用是什么?虚函数表(vtable)是如何工作的?第二部分:面向对象编程什么是多态性?C++中......
  • 【面试经验】2024年9月滴滴后端笔试 java
    比较简单,两题编程。选择题好像是20题,有部分不确定,有C++的几题。题目记不清了,凭印象写一下。编程题第一题充电第一题:n个玩具,m电量,尽可能让一个大的区间内的玩具的电量充满。输出充满电的玩具个数。双指针+滑动窗口。importjava.util.Scanner;publicclassMa......
  • 15:00面试,15:06就出来了,问的问题有点变态。。。
    从小厂出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到9月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一道......
  • JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
    文章目录一、类加载器1.1什么是类加载器、类加载器作用1.2应用场景1.3类加载时机1.4类加载器分类1.4.1概述1.4.2JDK8及之前的版本1.4.3JDK9之后的类加载器二、双亲委派模型2.1什么是双亲委派模型2.2JVM为什么采用双亲委派机制2.3打破双亲委派机制2.4总结三......
  • 面试官:Vue常用的修饰符有哪些有什么应用场景
    一、修饰符是什么在程序世界里,修饰符是用于限定类型以及类型成员的声明的一种符号在Vue中,修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理vue中修饰符分为以下五种:表单修饰符事件修饰符鼠标按键修......