面试经典150题【31-40】

文章目录

  • 面试经典150题【31-40】
    • 76.最小覆盖字串
    • 36.有效的数独
    • 54.螺旋矩阵
    • 48.旋转图像
    • 73.矩阵置零
    • 289.生命游戏
    • 383.赎金信
    • 205.同构字符串
    • 290.单词规律
    • 242.有效的字母异位词

面试经典150题【31-40】

76.最小覆盖字串

在这里插入图片描述
基本思路很简单,就是先移动右边到合适位置。再移动左边到破戒,再移动位置到合适位置。
判断合适位置是 count0, 此时need[] 里面也都是0 或 <0 的元素。

public class LC76 {public String minWindow(String s, String t) {if(s == null || s.isEmpty() ||t==null || t.isEmpty()){return "";}int []need=new int[128];for(int i=0;i<t.length();i++){need[t.charAt(i)]++;}//l是当前左边界,r是当前右边界,size记录窗口大小,count是需求的字符个数,start是最小覆盖串开始的indexint l = 0, r = 0, size = Integer.MAX_VALUE, count = t.length(), start = 0;//如果need[]<0,说明无关紧要。如果need[]==0,则说明是被需要关注的元素while(r<s.length()){//对右边进行处理char c=s.charAt(r);if(need[c]>0){  //是值得关注的元素count--;}need[c]--;if(count==0){ //已经塞满了关注的元素了//移动左指针while(l<r && need[s.charAt(l)]<0){need[s.charAt(l)]++;l++;}//此时need==0,说明又满足了,开始统计if(r-l+1<size){size = r-l+1;start = l;}//又要向右移动,但是肯定和最小值无关了,开始破戒need[s.charAt(l)]++;l++;count++;}r++;}return size == Integer.MAX_VALUE ? "" : s.substring(start, start + size);}
}

36.有效的数独

一定是9×9的,
在第 i 个行中是否出现过
在第 j 个列中是否出现过
在第 j/3 + (i/3)*3个box中是否出现过.
定义三个数组,int [][]row, row[i][j], i代表第几行,j代表出现的元素。
box[i][j], i代表第几个小格子,j代表出现的元素。
在这里插入图片描述

class Solution {public boolean isValidSudoku(char[][] board) {int[][] row = new int[9][10];int[][] col = new int[9][10];int[][] box = new int[9][10];for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {if (board[i][j] == '.') {continue;}int curNum = board[i][j] - '0';if (row[i][curNum] == 1) {return false;}if (col[j][curNum] == 1) {return false;}if (box[j / 3 + (i / 3) * 3][curNum] == 1) {return false;}row[i][curNum] = 1;col[j][curNum] = 1;box[j / 3 + (i / 3) * 3][curNum] = 1;}}return true;}
}

54.螺旋矩阵

在这里插入图片描述

class Solution {public List<Integer> spiralOrder(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;int up = 0;int down = m - 1;int left = 0;int right = n - 1;List<Integer> ans = new ArrayList<>();while (true) {for (int i = left; i <= right; i++)ans.add(matrix[up][i]);if (++up > down)break;for (int i = up; i <= down; i++)ans.add(matrix[i][right]);if (--right < left)break;for (int i = right; i >= left; i--)ans.add(matrix[down][i]);if (--down < up)break;for (int i = down; i >= up; i--)ans.add(matrix[i][left]);if (++left > right)break;}return ans;}
}

48.旋转图像

关键是找到公式: matrix[i][j] -> matrix[j][n-1-i]
在这里插入图片描述

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 tmp = matrix[i][j];matrix[i][j] = matrix[n - 1 - j][i];matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];matrix[j][n - 1 - i] = tmp;}}}
}

73.矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
还是用两个辅助数组,一个判断某一行,一个判断某一列。舒服。

289.生命游戏

暴力模拟就行。dxdy代表你移动的旁边的8个位置。

int[] dx = { -1, 1, 0, 0, -1, -1, 1, 1 };
int[] dy = { 0, 0, -1, 1, -1, 1, -1, 1 };for (int k = 0; k < 8; k++) {int nx = x + dx[k];int ny = y + dy[k];if (nx < 0 || nx >= m || ny < 0 || ny >= n)continue;// 如果这个位置为 0,代表当前轮是死的,不需要算进去// 如果这个位置为 1,代表当前轮是活得,需要算进去// 如果这个位置为 2,代表当前轮是死的(状态10,下一轮是活的),不需要算进去// 如果这个位置为 3,代表是当前轮是活的(状态11,下一轮也是活的),需要算进去cnt += (board[nx][ny] & 1);
}

383.赎金信

int[] a = new int[26]; 用这个做个小哈希表就行

205.同构字符串

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上。
要满足最后一条,应该建立两个hash表, m ->t ; t->m
如果只建立一个hash表, abb -> rrr 会成立,但是其应该不成立。

290.单词规律

也是典型的双射问题,两个哈希表就解决了。
如果两个字符串完全不一样,也可以只用一个哈希表。利用hashmap的put操作的返回值的特性。
如果key不存在,插入成功,返回null;如果key存在,返回之前对应的value。
先将字符串截断 String[] words = str.split(" ");
然后用map.put(words[i],i) 与 map.put(s[i],i)判等就行

242.有效的字母异位词

也是hashmp,第一个字符串遍历去++,第二个字符串遍历去–。
最后判断是否所有元素均为0即可。

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

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

相关文章

面对耦合度过高的第三方对接

今天接到一个需求&#xff0c;原型图如下&#xff1a;抖音数据&#xff08;给的是数据占比&#xff09;&#xff0c;要求根据性别&#xff0c;年龄&#xff0c;类目&#xff0c;地域&#xff0c;消费偏好&#xff0c;客单价筛选后排序。 1、性别给的示例&#xff1a;{ "…

Rem 自适应原理与应用

前言 移动端适配有很多方案&#xff0c;这篇文章将根据 rem 自适应的原理进行讲解&#xff0c;接下来跟着作者的思路一起来看看吧&#xff01; 原理 在搞清楚 rem 适配之前&#xff0c;我们先来了解一下什么是 rem&#xff1f; rem 是一种相对长度单位&#xff0c;它相对于根…

51单片机学习(5)-----蜂鸣器的介绍与使用

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 目录 一. 蜂鸣器的介绍 1.蜂鸣器介绍 2.压电式蜂鸣器 &#xff08;无源…

LeetCode 第一题: 两数之和

文章目录 第一题: 两数之和题目描述示例 解题思路Go语言实现 - 一遍哈希表法C实现算法分析 排序和双指针法Go语言实现 - 排序和双指针法C算法分析 暴力法Go语言实现 - 暴力法C算法分析 二分搜索法Go语言实现 - 二分搜索法C算法分析 第一题: 两数之和 ‍ 题目描述 给定一个整…

6.2 认证授权模块 - 继承JWT、网关认证

认证授权模块 - 继承JWT、网关认证 文章目录 认证授权模块 - 继承JWT、网关认证一、JWT1.1 普通令牌1.2 JWT 令牌介绍1.3 测试生成JWT 令牌1.3.1 TokenConfig1.3.2 授权服务器配置 AuthorizationServer1.3.3 WebSecurityConfig 安全管理配置1.3.4 返回信息 1.4 资源服务集成 JW…

《乱弹篇(十九)围炉诗话》

闲来无事&#xff0c;近日浏览中国古代文学书藉&#xff0c;读罢《新嫁娘词》中的一首五言绝句诗&#xff0c;觉得妙趣横生&#xff0c;艺术造诣甚高。今天恰逢春潮寒意还浓&#xff0c;气温很低&#xff0c;笔者雅兴勃发&#xff0c;便开足暖气&#xff0c;也附庸风雅地来一番…

WSL2配置Linux、Docker、VS Code、zsh、oh my zsh(附Docker开机自启设置)

0. 写在前面 本篇笔记来自于UP主麦兜搞IT的合集视频Windows10开发环境搭建中的部分内容 1. 安装WSL2 按照微软官方文档进行操作&#xff0c;当然也可以直接wsl --install 也可以按照 旧版手动安装的步骤 来进行操作 选择安装的是Ubuntu 20.04 LTS 注&#xff1a;WSL默认安装…

抖音视频提取软件使用功能|抖音视频下载工具

我们的抖音视频提取软件是一款功能强大、易于操作的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们的软件支持通过关键词搜索和分享链接两种方式获取抖音视频&#xff0c;方便用户快速找到自己感兴趣的内容。 主要功能模块&#xff1a;…

计算机设计大赛 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

pytorch -- CIFAR10 完整的模型训练套路

网络结构 代码 # CIFAR 10完整的模型训练套路&#xff1a; import torch.optim import torchvision from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom model import *# 1. 准备数据集 train_data torch…

SSM框架学习笔记07 | Spring MVC入门

文章目录 1. HTTP协议2. Spring MVC2.1. 三层架构2.2. MVC&#xff08;解决表现层的问题&#xff09;2.3. 核心组件 3. Thymeleaf3.1. 模板引擎3.2. Thymeleaf3.3. 常用语法 代码 1. HTTP协议 网址&#xff1a;https://www.ietf.org/ &#xff08;官网网址&#xff09; https:…

dolphinscheduler单机版部署教程

文章目录 前言一、安装准备1. 安装条件2. 安装jdk3. 安装MySQL 二、安装dolphinscheduler1. 下载并解压dolphinscheduler2. 修改配置文件2.1 修改 dolphinscheduler_env.sh 文件2.2 修改 application.yaml 文件 3. 配置mysql数据源3.1 修改MySQL安全策略3.2 查看数据库3.3 创建…

使用Docker部署MinIO并结合内网穿透实现远程访问本地数据

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

Pytest教程:一种利用 Python Pytest Hook 机制的软件自动化测试网络数据抓包方法

随着计算机技术的发展&#xff0c;使得网络应用的数量不断增加&#xff0c;因此网络数据抓包成为了网络应用开发和测试中非常重要的一部分。目前&#xff0c;已有许多网络数据抓包工具可供使用&#xff0c;例如 Wireshark、Tcpdump、Fiddler 等&#xff0c;但这些工具需要手动配…

进程的学习

进程基本概念: 1.进程: 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息&#xff08;根据CPU占用率排序&#xf…

PHY6222系统级SOC蓝牙芯片低功耗高性能蓝牙MESH组网智能家居

简介 PHY6222是一款支持BLE 5.2功能和IEEE 802.15.4通信协议的系统级芯片&#xff08;SoC&#xff09;&#xff0c;集成了超低功耗的高性能多模射频收发机&#xff0c;搭载32-bit ARM?Cortex?-M0处理器&#xff0c;提供64K retention SRAM、可选128K-8M Flash、96KB ROM以及2…

十、线性代数二-线性相关

目录 1、线性相关的概念&#xff1a; 2、线性相关的代数表示&#xff1a; 3、线性相关的判断方法&#xff1a; 理解&#xff1a;线性相关指的是 向量组&#xff08;α1&#xff0c;α2&#xff0c;α3&#xff0c;...&#xff09;的 秩是 小于 k 的元数的&#xff0c;即齐次…

第二节:Vben Admin 登录逻辑梳理和对接后端准备

系列文章目录 上一节&#xff1a;第一节&#xff1a;Vben Admin介绍和初次运行 文章目录 系列文章目录前言项目路径的概述一、登录逻辑梳理loginApi接口查看Mock 二、后端程序对接准备关闭Mock 总结 前言 第一节&#xff0c;我们已经配置了前端环境&#xff0c;运行起来了我们…

文献速递:深度学习--深度学习方法用于帕金森病的脑电图诊断

文献速递&#xff1a;深度学习–深度学习方法用于帕金森病的脑电图诊断 01 文献速递介绍 人类大脑在出生时含有最多的神经细胞&#xff0c;也称为神经元。这些神经细胞无法像我们身体的其他细胞那样自我修复。随着年龄的增长&#xff0c;神经元逐渐死亡&#xff0c;因此变得…

el-form 表单文本标签label增加tooltip提示图标

需求&#xff1a;在el-form表单中&#xff0c;el-form-item的文本标签处增加提示语&#xff1b; 标签&#xff1a;el-form、el-form-item、el-tooltip&#xff1b; 实现&#xff1a; <el-form-item prop"basicScore"><span slot"label"><…