算法进修Day-37
算法进修Day-37
73. 矩阵置零
难度:中等
题目要求
给定一个 _m_ x _n_ 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例1
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例2
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
题解
利用两个数组 r o w row row 和 c o l col col 来存入数值为
0的位置的行和列,之后对数组进行遍历,将所在单位设为0
想法代码
class Solution
{public static void Main(String[] args){int[][] matrix ={new[] { 0, 1, 2, 0 },new[] { 3, 4, 5, 2 },new[] { 1, 3, 1, 5 }};Solution solution = new Solution();solution.SetZeroes(matrix);foreach (var i in matrix){foreach (var j in i){Console.Write(j+" ");}Console.WriteLine();}}public void SetZeroes(int[][] matrix){int index_x = 0;int index_y = 0;int count = 0;int[] row = new int[matrix.Length * matrix[0].Length];int[] col = new int[matrix.Length * matrix[0].Length];for (int i = 0; i < matrix.Length; i++){for (int j = 0; j < matrix[i].Length; j++){if (matrix[i][j] == 0){row[index_x] = i;col[index_y] = j;index_x++;index_y++;}}}while (count < index_x){for (int j = 0; j < matrix[0].Length; j++){matrix[row[count]][j] = 0;}count++;}count = 0;while (count < index_y){for (int j = 0; j < matrix.Length; j++){matrix[j][col[count]] = 0;}count++;}}
}
74.搜索二维数组
难度:中等
题目要求:
给你一个满足下述两条属性的 m x n 整数矩阵:
- 每行中的整数从左到右按非严格递增顺序排列。
- 每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
示例1
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true
示例2
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false
题解
对当前数组的第一列进行遍历:
- 如果 m a t r i x [ i ] [ 0 ] < t a r g e t matrix[i][0]<target matrix[i][0]<target 那么,记录 c o l i n d e x = i − 1 col_index=i-1 colindex=i−1
- 如果 m a t r i x [ i ] [ 0 ] = = t a r g e t matrix[i][0]==target matrix[i][0]==target ,直接返回 t r u e true true
- 如果 m a t r i x [ m a t r i x . L e n g t h − 1 ] [ 0 ] < t a r g e t matrix[matrix.Length-1][0]<target matrix[matrix.Length−1][0]<target,让 c o l i n d e x = m a t r i x . L e n g t h − 1 col_index=matrix.Length-1 colindex=matrix.Length−1
- 如果 c o l i n d e x < 0 col_index<0 colindex<0,直接返回 f a l s e false false
- 如果 m a t r i x [ c o l i n d e x ] [ i ] = = t a r g e t matrix[col_index][i]==target matrix[colindex][i]==target,返回 t r u e true true,否则返回 f a l s e false false
想法代码
class Solution
{public static void Main(String[] args){Solution solution = new Solution();int[][] matrix ={new[] { 1, 3, 5, 7 },new[] { 10, 11, 16, 20 },new[] { 23, 30, 34, 60 }//new[]{1},//new[]{3}};int target = 30;Console.WriteLine(solution.SearchMatrix(matrix,target));}public bool SearchMatrix(int[][] matrix, int target){int col_index = 0;for (int i = 0; i < matrix.Length; i++){if (matrix[i][0] > target){col_index = i - 1;break;}if (matrix[i][0] == target){return true;}}if (matrix[matrix.Length-1][0] < target){col_index = matrix.Length - 1;}if (col_index < 0){return false;}for (int i = 0; i < matrix[0].Length; i++){if (matrix[col_index][i] == target){return true;}}return false;}
}
75. 颜色分类
难度:中等
题目要求:
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
示例1
输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例2
输入:nums = [2,0,1]
输出:[0,1,2]
题解:
直接利用双指针进行解题,步骤如下:
- 定义 i n d e x l e f t index_left indexleft 和 i n d e x r i g h t index_right indexright 指针,分别置为
0,对当前数组进行遍历- 如果 n u m s [ i ] = 1 nums[i]=1 nums[i]=1,交换当前位置和右指针的元素,右指针自增
- 如果 n u m s [ i ] = 0 nums[i]=0 nums[i]=0,交换当前位置和左指针的元素,左指针自增
- 如果 i n d e x l e f t < i n d e x r i g h t index_left<index_right indexleft<indexright,交换当前位置和右指针的元素(在父条件之后)
- 左右指针自增
- 右指针到达数组末尾,遍历结束
想法代码
class Solution
{public static void Main(String[] args){Solution solution = new Solution();int[] nums = { 2, 0, 2, 1, 1, 0 };solution.SortColors(nums);foreach (int i in nums){Console.Write(i + " ");}}public void SortColors(int[] nums){int index_left = 0;int index_right = 0;for (int i = 0; i < nums.Length; i++){if (nums[i] == 1){Swap(nums, i, index_right);index_right++;}else if (nums[i] == 0){Swap(nums, i, index_left);if (index_left < index_right){Swap(nums,i, index_right);}index_left++;index_right++;}}}public void Swap(int[] nums, int index_left, int index_right){int temp = nums[index_left];nums[index_left] = nums[index_right];nums[index_right] = temp;}
}
76. 最小覆盖子串
难度:困难
题目要求:
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
示例1
输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
示例2
输入:s = “a”, t = “a”
输出:“a”
示例3
输入:s = “a”, t = “aa”
输出:“”
题解
使用滑动窗口法,定义两个字典 n e e d need need 和 w i n d o w window window, n e e d need need 内部存储 t t t 的内容, w i n d o w window window 内部存储符合要求的内容
具体步骤如下:
- 对当前字符串 s s s 进行遍历,让 r i g h t right right 右移,直到 r i g h t right right 指针第一次找到 w i n d o w window window 包含 n e e d need need 里的全部内容
- 将 l e f t left left 右移,直到找到下一个在 n e e d need need 内容里的元素,继续遍历重复上一步步骤
- 将内容比较,长度短的内容保存
- 当 r i g h t right right 遍历到字符串 s s s 的最后一个内容的时候,遍历结束
返回最短的内容
想法代码
class Solution
{public static void Main(String[] args){Solution solution = new Solution();string s = "ADOBECODEBANC";string t = "ABC";Console.WriteLine(solution.MinWindow(s,t));}public string MinWindow(string s, string t){Dictionary<char,int> need = new Dictionary<char,int>();Dictionary<char,int> window = new Dictionary<char,int>();foreach (var a in t){if (need.ContainsKey(a)){need[a]++;}else{need.Add(a, 1);}}int left = 0;int right = 0;int start = 0;int count = 0;int len = Int32.MaxValue;while (right < s.Length){char c = s[right];right++;if (need.ContainsKey(c)){if (window.ContainsKey(c)){window[c]++;}else{window.Add(c, 1);}if (need[c] == window[c]){count++;}}while(count == need.Count){if (right - left < len){start = left;len = right - left;}char d = s[left];left++;if (need.ContainsKey(d)){if (window[d] == need[d]){count--;}window[d]--;}}}return len == Int32.MaxValue ? "" : s.Substring(start, len);}
}
相关文章:
算法进修Day-37
算法进修Day-37 73. 矩阵置零 难度:中等 题目要求 给定一个 _m_ x _n_ 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例1 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[…...
服务器之日常整活
文章目录 一,序二、服务器相关流水帐未完,待补充 一,序 假如你有一台服务器,你最想做哪些事? 等等,什么叫假如你有一台服务器,假如只有一台,肯定我想搞第二台,顺便第三台…...
交互式 Web 应用 0 基础入门
初探 Gradio:轻松构建交互式 Web 应用 文章目录 初探 Gradio:轻松构建交互式 Web 应用Why Gradio?安装 Gradio创建交互式界面1. gr.Interface2. gr.Blocks 强大的组件库输入输出组件控制组件布局组件 示例交互式数据可视化多组件同时(嵌套&a…...
JSONP的安全性较差,那么在跨域情况下,有没有其他更安全的替代方案呢?
在跨域情况下,为了保证安全性,有几种更安全的替代方案可以考虑使用: 1:CORS(Cross-Origin Resource Sharing): CORS 是一种现代化的跨域解决方案,通过在服务器端设置响应头来控制跨…...
Slax Linux 获得增强的会话管理和启动参数选项
Slax Linux 的创建者和维护者托马斯-马特吉切克(Tomas Matejicek)在自己生日这天(生日快乐!)发布了其小巧便携的 GNU/Linux 发行版的新版本,带来了各种增强功能和错误修复。 新发布的 Slax Linux 版本&…...
C/C++新冠疫情死亡率 2020年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
目录 C/C新冠疫情死亡率 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C新冠疫情死亡率 2020年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 2020年全世界爆发了新冠疫情,请…...
Adobe Photoshop 基本操作
PS快捷键 图层 选择图层 Ctrl T:可以对图层的大小和位置进行调整 填充图层 MAC: AltBackspace (前景) or CtrlBackspace (背景) WINDOWS: AltDelete (前景) or CtrlDelete (背景) 快速将图层填充为前景色或背景色 平面化图层(盖印图层)…...
SpringMVC原理及核心组件
一、SpringMVC原理及核心组件 1、 Spring MVC的工作原理 Spring MVC 是一个对javaWeb中Servlet 简化和封装, 1.首先SpringMVC 配置DispatcherServlet 来接受所有的请求,我们通过DispatcherServlet 响应的所有数据,DispatcherServlet 是Htt…...
【rk3568-linux】 rk3568x_linux-- 编译说明
概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 开发环境 开发环境:ubuntu18 文章目录 概述开发环境一、选择型号二、全自动编译三、…...
模拟计算器编程教程,中文编程开发语言工具编程实例
模拟计算器编程教程,中文编程开发语言工具编程实例 中文编程系统化教程,不需英语基础。学习链接 https://edu.csdn.net/course/detail/39036 课程安排:初级1 1 初级概述 2 熟悉构件取值赋值 3 折叠式菜单滑动面板编程 4 自定…...
Spring Security漏洞防护—HTTP 安全响应头
一、默认的 Security Header Spring Security提供了 一套默认的安全HTTP响应头,以提供安全默认值。虽然这些头信息中的每一个都被认为是最佳实践,但应该注意的是,并不是所有的客户端都使用这些头信息,所以鼓励进行额外的测试。 …...
Plooks大型视频在线一起看网站源码
在前段时间,因为想和异地的朋友一起看电影,但是发现有电影的地方没有一起看功能,有一起看功能的视频网站没有电影,所以就想自己做一个一起看网站,于是就有了Plooks。 Plooks是一个完整的视频网站,其中包括…...
图像处理中底层、高层特征、上下文信息理解
1.图像的语义信息: 图像的语义分为视觉层、对象层和概念层。 视觉层即通常所理解的底层,即颜色、纹理和形状等等,这些特征都被称为底层特征语义; 对象层即中间层,通常包含了属性特征等,就是某一对象在某一时刻的状态&a…...
负载均衡的算法(静态算法与动态算法)
1.静态算法 静态算法是不考虑服务器动态负载的算法,包括: (1)轮转算法:轮流将服务请求(任务)调度给不同的节点(即:服务器)。 (2)加…...
mac安装jdk
1、下载jdk(我的电脑要下载arm版,截图不对) Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#jdk17-mac 2、双击安装...
WIN11+OPENCV4.8 编译及下载失败处理方法
1. 基础准备 1. 下载Opencv和Contrib库 Opencv:Releases opencv/opencv GitHub Contrib:Tags opencv/opencv_contrib GitHub 2. 安装Visual Studio 或 MinGW64 MinGW:Tags opencv/opencv_contrib GitHub 这里安装1.12.0 MinGW 。 以…...
万宾科技智能井盖传感器怎么使用?
时代在进步,科技在更新,人们身边的万事万物都在随着时代的脚步不断的前进。各种各样高科技技术在城市基础设施建设的过程中得到应用,很多智能产品不仅施工方便,而且可以向政府部门提供精准的数据,提高了相关管理人员的…...
Server Name Indication(SNI),HTTP/TLS握手过程解析
Server Name Indication(SNI)是一种TLS扩展,用于在TLS握手过程中传递服务器的域名信息。在未使用SNI之前,客户端在建立TLS连接时只能发送单个IP地址,并且服务器无法知道客户端请求的具体域名。这导致服务器需要使用默认…...
react项目实现文件预览,比如PDF、txt、word、Excel、ppt等常见文件(腾讯云cos)
使用腾讯云文档预览,需要开通文档预览功能,该功能需要收费的。 使用限制 如果需要图片预览、视频或音频可以使用获取下载链接。 页面代码 <button onClick() > {handleClick(myself/文档.xlsx)}>预览</button><div style{{ height:…...
ES SearchAPI----Query DSL语言
文章目录 Getting Startedmatch_all查询全部sort排序from\size分页_source指定字段 match匹配查询match_phrase短语匹配multi_match多字段匹配range范围查询bool复合查询must必须匹配,可贡献得分must_not必须不匹配,可贡献得分should可有可无,…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
