面试经典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.hqwc.cn/news/496645.html

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

相关文章

在from子句中使用子查询

目录 查询每个部门的编号、名称、位置、部门人数、平均工资 多表查询分组统计 子查询分组统计 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 为了解释这种查询的作用&#xff0c;下面做一个简单的查询 查询每个部门的编号、名称、…

ViewModel 原理

在现代Android应用开发中&#xff0c;ViewModel是架构组件库的一个关键部分&#xff0c;它在提高应用的稳定性和性能方面发挥着重要作用。在这篇文章中&#xff0c;我们将深入探讨ViewModel的工作原理和最佳实践。 ViewModel简介 ViewModel是Android Jetpack架构组件的一部分…

图论(算法竞赛、蓝桥杯)--Dijkstra算法最短路

1、B站视频链接&#xff1a;D02 最短路 Dijkstra 算法_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】单源最短路径&#xff08;弱化版&#xff09; - 洛谷 #include <bits/stdc.h> using namespace std; #define INF 2147483647 int n,m,s,a,b,c; const int N100010…

c++学习记录 vector容器—赋值操作

函数原型&#xff1a; vector& operator(const vector& vec); //重载等号操作符assign(beg,end); //将[beg,end)区间中的数据拷贝赋值给本身assign(n,elem); //将n个el…

DAY12_VUE基本用法详细版

目录 0 HBuilderX酷黑主题修改注释颜色1 VUE1.1 VUE介绍1.2 Vue优点1.3 VUE入门案例1.3.1 导入JS文件1.3.2 VUE入门案例 1.4 VUE基本用法1.4.1 v-cloak属性1.4.2 v-text指令1.4.3 v-html指令1.4.4 v-pre指令1.4.5 v-once指令1.4.6 v-model指令1.4.7 MVVM思想 1.5 事件绑定1.5.1…

使用空闲电脑免费搭建一个私人的网盘

如果你也有一台空闲电脑&#xff0c;可以使用它来搭建一个私人的网盘。 这里使用的是飞梦云网盘&#xff1b; 服务端&#xff1a;下载 服务器文件使用hash校验进行储存&#xff0c;实现重复上传的文件秒传功能。 Fuse4Ui&#xff08;虚拟分区工具&#xff09;&#xff1a;下…

算法沉淀——动态规划之回文串问题(上)(leetcode真题剖析)

算法沉淀——动态规划之回文串问题 01.回文子串02.最长回文子串03.分割回文串 IV04.分割回文串 II05.最长回文子序列06.让字符串成为回文串的最少插入次数 01.回文子串 题目链接&#xff1a;https://leetcode.cn/problems/palindromic-substrings/ 给你一个字符串 s &#xf…

Django定时任务之django_apscheduler使用

Django定时任务之django_apscheduler使用 今天在写一个任务需求时需要用到定时任务来做一部分数据处理与优化&#xff0c;于是在了解完现有方法&#xff0c;结合自己需求决定使用django_apscheduler&#xff0c;记录一下过程&#xff0c;有几篇值得参考的文章放在结尾&#xf…

python|闲谈2048小游戏和数组的旋转及翻转和转置

目录 2048 生成数组 n阶方阵 方阵旋转 顺时针旋转 逆时针旋转 mxn矩阵 矩阵旋转 测试代码 测试结果 翻转和转置 2048 《2048》是一款比较流行​的数字游戏​&#xff0c;最早于2014年3月20日发行。原版2048由Gabriele Cirulli首先在GitHub上发布&#xff0c;后被移…

云计算新宠:探索Apache Doris的云原生策略

文章目录 Apache Doris 特性极简架构高效自运维高并发场景支持MPP 执行引擎明细与聚合模型的统一便捷数据接入 Apache Doris 极速 1.0 时代极速列式内存布局向量化的计算框架Cache 亲和度虚函数调用SIMD 指令集 稳定多源 关于 Apache Doris 开源社区基于云原生向量数据库Milvus…

搜维尔科技:CATIA为建筑、基础设施和城市规划提供虚拟孪生力量

超越传统项目交付方法限制的协作 复杂建筑和基础设施项目开发的设计和工程流程需要多个利益相关者和所有项目阶段的密切合作。此外&#xff0c;日益复杂的施工项目要求所有团队都依赖 CATIA 和3D EXPERIENCE 虚拟孪生技术作为“通用语言”&#xff0c;以促进协作并减少阶段之间…

【OneAPI】节假日查询API

OneAPI新接口发布&#xff1a;节假日查询API 可查询指定月份、年份法定节假日及调休情况。 API地址&#xff1a;https://oneapi.coderbox.cn/openapi/public/holiday 请求参数 URL参数 参数名类型必须含义说明datestring否要查询的日期可按年或月查询&#xff0c;支持前缀…