算法练习(6):牛客在线编程06 递归/回溯
package jz.bm;import java.io.PushbackInputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;public class bm6 {/*** BM55 没有重复项数字的全排列*/ArrayList<ArrayList<Integer>> res = new ArrayList<>();public ArrayList<ArrayList<Integer>> permute(int[] num) {if (num.length == 0) {return res;}Arrays.sort(num);boolean[] used = new boolean[num.length];Arrays.fill(used, false);dfs(num, used, new ArrayList<>());return res;}private void dfs(int[] num, boolean[] used, ArrayList<Integer> list) {if (list.size() == num.length) {res.add(new ArrayList<>(list));} else {for (int i = 0; i < num.length; i++) {if (used[i]) {continue;}used[i] = true;list.add(num[i]);dfs(num, used, list);used[i] = false;list.remove(list.size() - 1);}}}/*** BM56 有重复项数字的全排列*/public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {if (num.length == 0) {return res;}Arrays.sort(num);boolean[] used = new boolean[num.length];Arrays.fill(used, false);dfs56(num, used, new ArrayList<>());return res;}private void dfs56(int[] num, boolean[] used, ArrayList<Integer> list) {if (list.size() == num.length) {res.add(new ArrayList<>(list));} else {for (int i = 0; i < num.length; i++) {if (used[i]) {continue;}if (i > 0 && num[i] == num[i - 1] && used[i - 1]) {continue;}used[i] = true;list.add(num[i]);dfs56(num, used, list);used[i] = false;list.remove(list.size() - 1);}}}/*** BM57 岛屿数量*/public int solve (char[][] grid) {int m = grid.length;if (m == 0) {return 0;}int n = grid[0].length;if (n == 0) {return 0;}int res = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') {res++;dfs57(grid, m, n, i, j);}}}return res;}private void dfs57(char[][] grid, int m, int n, int i, int j) {grid[i][j] = '0';if (i - 1 >= 0 && grid[i - 1][j] == '1') {dfs57(grid, m, n, i - 1, j);}if (i + 1 < m && grid[i + 1][j] == '1') {dfs57(grid, m, n, i + 1, j);}if (j - 1 >= 0 && grid[i][j - 1] == '1') {dfs57(grid, m, n, i, j - 1);}if (j + 1 < n && grid[i][j + 1] == '1') {dfs57(grid, m, n, i, j + 1);}}/*** BM58 字符串的排列*/ArrayList<String> strings = new ArrayList<>();public ArrayList<String> Permutation(String str) {if (str == null || "".equals(str)) {return strings;}char[] chars = str.toCharArray();Arrays.sort(chars);boolean[] used = new boolean[chars.length];Arrays.fill(used, false);dfs58(chars, used, new StringBuilder());return strings;}private void dfs58(char[] chars, boolean[] used, StringBuilder stringBuilder) {if (stringBuilder.length() == chars.length) {strings.add(new String(stringBuilder));} else {for (int i = 0; i < chars.length; i++) {if (used[i]) {continue;}if (i > 0 && chars[i] == chars[i - 1] && used[i - 1]) {continue;}stringBuilder.append(chars[i]);used[i] = true;dfs58(chars, used, stringBuilder);used[i] = false;stringBuilder.deleteCharAt(stringBuilder.length() - 1);}}}/*** BM60 括号生成*/ArrayList<String> arrayList = new ArrayList<>();public ArrayList<String> generateParenthesis (int n) {if (n == 0) {return arrayList;}dfs60(n, 0, 0, new StringBuilder());return arrayList;}private void dfs60(int n, int left, int right, StringBuilder stringBuilder) {if (left == n && right == n) {arrayList.add(new String(stringBuilder));return;}if (left < n) {stringBuilder.append("(");dfs60(n, left + 1, right, stringBuilder);stringBuilder.deleteCharAt(left + right);}if (right < left && right < n) {stringBuilder.append(")");dfs60(n, left, right + 1, stringBuilder);stringBuilder.deleteCharAt(left + right);}}/*** BM61 矩阵最长递增路径*/int max = 0;public int solve (int[][] matrix) {int m = matrix.length;int n = matrix[0].length;//这题dfs不需要记录visited, 因为能走的路径是单向的for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dfs61(matrix, m, n, i, j, 1);}}return max;}private void dfs61(int[][] matrix, int m, int n, int i, int j, int count) {if (i - 1 >= 0 && matrix[i - 1][j] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i - 1, j, count + 1);}if (i + 1 < m && matrix[i + 1][j] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i + 1, j, count + 1);}if (j - 1 >= 0 && matrix[i][j - 1] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i, j - 1, count + 1);}if (j + 1 < n && matrix[i][j + 1] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i, j + 1, count + 1);}}
}相关文章:
算法练习(6):牛客在线编程06 递归/回溯
package jz.bm;import java.io.PushbackInputStream; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays;public class bm6 {/*** BM55 没有重复项数字的全排列*/ArrayList<ArrayList<Integer>> res new ArrayList<>()…...
C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例
本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果...
MySQL多表关联查询
目录 1. inner join: 2. left join: 3. right join: 4.自连接 5.交叉连接: 6、联合查询 7、子查询 1. inner join: 代表选择的是两个表的交差部分。 内连接就是表间的主键与外键相连,只取得键值一致…...
flutter开发实战-CustomClipper裁剪长图帧动画效果
flutter开发实战-CustomClipper裁剪长图帧动画效果 在开发过程中,经常遇到帧动画的每一帧图显示在超长图上,需要处理这种帧动画效果。我这里使用的是CustomClipper 一、CustomClipper CustomClipper继承于Listenable abstract class CustomClipper e…...
CSS 中的优先级规则是怎样的?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐内联样式(Inline Styles)⭐ID 选择器(ID Selectors)⭐类选择器、属性选择器和伪类选择器(Class, Attribute, and Pseudo-class Selectors)⭐元素选择器和伪元素选择器…...
概率图模型(Probabilistic Graphical Model,PGM)
概率图模型(Probabilistic Graphical Model,PGM),是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布,进行有效的推理和学习,以及解决各种实际问题,如图…...
Oracle 知识篇+会话级全局临时表在不同连接模式中的表现
标签:会话级临时表、全局临时表、幻读释义:Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式:不同应用会话只能访问自己的数据 ✔ 共享服务器模式:不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式:不同应…...
MySQL 数据库文件的导入导出
目录 数据库的导出 导出整个数据库 导出数据库中的数据表 导出数据库结构 导出数据库中表的表结构 导出多个数据库 导出所有数据库 数据库的导入 数据库的导出 mysqldump -h IP地址 -P 端口 -u 用户名 -p 数据库名 > 导出的文件名 用管理员权限打开cmd进入MySQL的bi…...
找不到资产文件project.assets.json
NuGet 在“obj”文件夹中写入名为 project.assets.json 的文件,.NET SDK 使用该文件来获取有关要传递到编译器的包的信息 。 如果在生成过程中找不到资产文件 project.assets.json,则会发生此错误。 1.执行命令的方式解决 点击工具,分别展开命…...
【python】python将json字符串导出excel | pandas处理json字符串保存为csv
如何将json转为csv 1、通过json直接转为csv 在Python中,你可以使用pandas库来处理DataFrame(数据帧)和将JSON数据转换为CSV格式。下面是一个简单的示例代码,展示了如何使用pandas库将JSON数据转换为CSV文件: import p…...
opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()
注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…...
分布式系统理论
以前的架构...
Gartner发布2023年的存储技术成熟曲线
技术路线说明 Gartner自1995年起开始采用技术成熟度曲线,它描述创新的典型发展过程,即从过热期发展到幻灭低谷期,再到人们最终理解创新在市场或领域内的意义和角色。 一项技术 (或相关创新)在发展到最终成熟期的过程中经历多个阶段࿱…...
c++ 有元
友元分为两部分内容 友元函数友元类 友元函数 问题:当我们尝试去重载operator<<,然后发现没办法将operator<<重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。…...
安卓:网络框架okhttp
目录 一、okhttp介绍 1. OkHttpClient类: 常用方法: 2. Request类: 常用方法: 3. Response类: 常用方法: 4. Call类: 常用方法: 5. Interceptor接口: 常用方法&…...
Python爬虫 爬取图片
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没…...
【云原生】Pod详讲
目录 一、Pod基础概念1.1//在Kubrenetes集群中Pod有如下两种使用方式:1.2pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。1.3kubernetes中的pause容器主要为每个容器提供以下功能:1.4Kubernetes设计这样的Pod概念和特殊组成结构有…...
先进先出的队
文章目录 队列特点队列实现 队列特点 先进先出,后进后出 队列实现 queue.c#define _CRT_SECURE_NO_WARNINGS 1 #include"Queue.h" //初始化 void QueInit(Queue* pq) {assert(pq);pq->head NULL;pq->tail NULL;pq->size 0; } //入队&#…...
怎样学会单片机
0、学单片机首先要明白,一个单片机啥也干不了,学单片机的目的是学习怎么用单片机驱动外部设备,比如数码管,电机,液晶屏等,这个需要外围电路的配合,所以学习单片机在这个层面上可以等同为学习单片…...
数据结构笔记--常见二叉树分类及判断实现
目录 1--搜索二叉树 2--完全二叉树 3--平衡二叉树 4--满二叉树 1--搜索二叉树 搜索二叉树的性质:左子树的节点值都比根节点小,右子树的节点值都比根节点大; 如何判断一颗二叉树是搜索二叉树? 主要思路: 递归自底向…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了,系统很多命…...
