- 博客(65)
- 收藏
- 关注
原创 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。来源:力扣(LeetCode)题解:每一个节点不能单纯的判断是否大于或者小于其父亲节点,而是应该在一个区间里面。这个区间有一个最大值和最小值,每次访问其左节点时,(这里有这样一个关系 a->b,我们必须保证b的右节点除了大于b外,还必须小于a)更新最大值。访问右节点时更新最
2022-01-26 11:47:50
306
原创 LeetCode:二叉树层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。题解:这里我们给出递归的方式遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {}
2022-01-22 10:05:03
520
转载 LeetCode 矩阵置零
给定一个 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]]来源:力扣(LeetCode)我们可以用矩阵的第一行和第一列代替方法一中的两个标
2022-01-16 20:05:06
215
原创 买卖股票的最好时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7
2021-12-23 15:11:45
76
原创 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6 。来源: 力扣(LeetCode)解题思路: 采用动态规划的思想,我们令dp[i]就是代表以第i 个数结尾的「连续子数组的最大和」.那么我们如何求 f(i) 呢?我们可以考虑nums[i] 单独成为一段还是加
2021-12-22 20:48:36
69
原创 Codeforces:Penalty
Consider a simplified penalty phase at the end of a football match.A penalty phase consists of at most 10 kicks, the first team takes the first kick, the second team takes the second kick, then the first team takes the third kick, and so on. The team that
2021-07-23 11:12:07
352
原创 Acwing每日一题:兔子跳
一只兔子位于二维平面的原点 (0,0) 处,它想通过一系列的跳跃,跳到点 (x,0) 处。给定一个长度为 n 的数组 a1,a2,…,an。兔子能从一个点跳到另一个点,当且仅当两点之间的距离等于上述数组中的某个元素的值。请问,兔子从 (0,0) 到 (x,0) 最少需要跳几次?注意,兔子可以跳到非整数坐标的点上。例如,当 x=4,a={1,3} 时,(0,0)→(1,0)→(4,0) 和 (0,0)→(2,5√)→(4,0) 均为合理最佳方案之一。输入格式第一行包含整数 T,表示共有 T 组测
2021-07-20 10:10:05
134
原创 Acwing暑假每日一题:最小的值
给定两个长度为 n 的 01 数组 a1,a2,…,an 和 b1,b2,…,bn。请你构造一个长度为 n 的正整数数组 p1,p2,…,pn。要求 ∑i=1nai×pi>∑i=1nbi×pi 成立。此外,maxi=1npi 需要尽可能小。输出最小可能值。输入格式第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。第三行包含 n 个整数 b1,b2,…,bn。输出格式输出 maxi=1npi 的最小可能值。如果不存在满足条件的数组 p,则输出 −1。数据范围1≤
2021-07-15 16:02:16
166
原创 Acwing暑假每日一题:数字矩阵
给定一个 n×m 的整数矩阵,其中第 i 行第 j 列的元素为 aij。你可以进行任意多次如下操作:选择矩阵中的两个相邻元素,将它们均乘以 −1。同一个元素可以被选中多次。你需要通过上述操作,使得矩阵中所有元素的和尽可能大。计算并输出这个和的最大可能值。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据第一行包含两个整数 n,m。接下来 n 行,每行包含 m 个整数,表示整个矩阵,其中第 i 行第 j 列的数为 aij。输出格式每组数据输出一行结果,表示矩阵的所有元素的最大
2021-07-14 16:57:28
766
原创 Acwing暑假每日一题:唯一最小数
给定一个长度为 n 的整数数组 a1,a2,…,an。请你找到数组中只出现过一次的数当中最小的那个数。输出找到的数的索引编号。a1 的索引编号为 1,a2 的索引编号为 2,…,an 的索引编号为 n。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。输出格式每组数据输出一行结果,即满足条件的数的索引编号,如果不存在满足条件的数,则输出 −1。数据范围1≤T≤2×104,1≤n≤2×105,1≤ai≤n,
2021-07-14 16:28:34
122
原创 JDBC工具类的实现
我们在使用jdbc时,如果需要获取数据库连接和关闭对象。其操作非常繁琐,我们可以写一个工具类,将获取数据库连接和关闭对象的代码封装起来,方便我们使用注意: 获取数据库对象时需要传递url,username,passwrod参数,非常麻烦,我们使用properties文件(在src目录下建名为jdbc的资源包),自动读取这些参数,每次获取不同数据库只需要修改这些参数即可。jdbc.properties文件url=jdbc:mysql://localhost:3306/em?characterEncodi
2021-06-17 09:49:32
74
原创 一个简易的jdbc的使用
写了一个简易的展示电脑商品列表的程序,用到了jdbc实现java和mysql数据库的交互。功能简介: 首先进入index.html页面,会显示进入商品展示的连接,点击进入后会显示商品信息,商品信息上有添加按钮,点击添加按钮会进入添加商品的页面,输入商品信息点击提交按钮后,会显示新的商品列表。代码实现分析: ①computer类定义了存储商品的信息格式②index.html页面转到商品展示类(computerlist)③computerlist类里面会进入到获取数据库的类(computerdao)和用来打
2021-05-25 21:50:00
157
1
原创 最长公共子序列
给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。输入格式第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤1000输入样例:4 5acbdabedc输出样例:3解:这里要区分子序列和子串的区别,子序列是包含而不定连续设两个字符串为a和bdp[
2021-05-18 19:47:12
104
原创 分组背包
有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i
2021-05-17 21:13:28
220
原创 多重背包
有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤20000<vi,wi,si≤1000输入样例4 5
2021-05-17 20:35:55
75
原创 完全背包
有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22
2021-05-11 21:19:30
174
原创 最大的和
给定一个长度为 n 的正整数数列 a1,a2,…,an。初始时,数列中的每个元素要么处于可选状态,要么处于不可选状态。你可以选择一个长度恰好为 k 的区间 [i,i+k−1],使得 ai∼ai+k−1 这 k 个元素的状态全部变为可选。请问,在经过此操作后,所有处于可选状态的元素之和最大是多少。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数 ai。第三行包含一个长度为 n 的 01 序列,如果第 i 个数为 1,表示 ai 的初始状态为可选,如果第 i 个数为 0,表示 ai
2021-05-11 19:54:25
116
原创 01背包及优化
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22
2021-05-10 21:29:49
77
原创 整数集合划分
给定一个包含 N 个正整数的集合,请你将它们划分为两个不相交的集合 A1 和 A2,其中 A1 包含 n1 个元素,A2 包含 n2 个元素。用 S1 表示集合 A1 内所有元素之和,S2 表示集合 A2 内所有元素之和。请你妥善划分,使得 |n1−n2| 尽可能小,并在此基础上 |S1−S2| 尽可能大。输入格式第一行包含整数 N。第二行包含 N 个正整数。输出格式再一行中输出 |n1−n2| 和 |S1−S2|,两数之间空格隔开。数据范围2≤N≤105,保证集合中各元素以及所有元素之
2021-01-25 22:21:08
1077
原创 滑雪设计
农夫约翰的农场上有 N 个山丘,每座山的高度都是整数。在冬天,约翰经常在这些山上举办滑雪训练营。不幸的是,从明年开始,国家将实行一个关于滑雪场的新税法。如果滑雪场的最高峰与最低峰的高度差大于17,国家就要收税。为了避免纳税,约翰决定对这些山峰的高度进行修整。已知,增加或减少一座山峰 x 单位的高度,需要花费 x^2 的金钱。约翰只愿意改变整数单位的高度。请问,约翰最少需要花费多少钱,才能够使得最高峰与最低峰的高度差不大于17。输入格式第一行包含整数 N。接下来 N 行,每行包含一个整数,
2021-01-25 21:58:14
96
原创 棋盘挑战
给定一个 N×N 的棋盘,请你在上面放置 N 个棋子,要求满足:每行每列都恰好有一个棋子每条对角线上都最多只能有一个棋子1 2 3 4 5 61 | | O | | | | |2 | | | | O | | |3 | | | | | | O |4 | O | | | | | |5 | | | O | | | |6 | | | | | O | |上图给
2021-01-22 10:06:20
347
原创 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。示例 1:输入: “()”输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true利用栈的特性来解题,算法设计思路如下1)凡出现左括号,则进栈;2)凡出现右括号,首先检查栈是否空。若栈空,则表明该“右括号”多余;否则和栈顶元素比较
2021-01-21 10:45:33
76
原创 三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。PS:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。我们将数组从大到小排序(长度为len),会有以下三种情况.我们首先规定,a=nums[0],b=nums[1],c=nums[2],c=nums[len-1],d=nums[len-2],e = nums[len-3]1:全是正数,毫无疑问是答案就是c×d×e2: 全是负数,则答案是c×d×c3:倒数第三个数及以前是负数,则此时要想结
2021-01-20 20:24:19
807
原创 PAT找硬币(二分,哈希,双指针)
有一天,她去了一家宇宙购物中心购物,结账时可以使用各种硬币付款。但是,有一个特殊的付款要求:每张帐单,她只能使用恰好两个硬币来准确的支付消费金额。给定她拥有的所有硬币的面额,请你帮她确定对于给定的金额,她是否可以找到两个硬币来支付。输入格式第一行包含两个整数 N 和 M,分别表示硬币数量以及需要支付的金额。第二行包含 N 个整数,表示每个硬币的面额。输出格式输出一行,包含两个整数 V1,V2,表示所选的两个硬币的面额,使得 V1≤V2 并且 V1+V2=M。如果答案不唯一,则输出 V1 最小
2021-01-19 09:45:14
100
原创 蓝桥杯:翻硬币
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:oo*oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作。输入格式两行等长的字符串,分别表示初始状态和要达到的目标状态。输出格式一个整数,表示最小操作步数数据范围输入字符串的长度均不超过100。数据
2021-01-18 10:23:46
140
原创 挤牛奶&&校门外的树
挤牛奶农夫去牛场给奶牛们挤奶。现在从 5 点开始按秒计时,第一名农夫在第 300 秒开始给牛挤奶,并在第 10001000 秒停止挤奶。第二名农夫在第 700 秒开始给牛挤奶,并在第 1200 秒停止挤奶。第三名农夫在第 1500 秒开始给牛挤奶,并在第 2100 秒停止挤奶。从开始挤奶到挤奶完全结束,这一期间,至少存在一名农夫正在挤奶的连续时间段的长度最长为 900 秒(第 300 秒至第 1200 秒),完全没有任何农夫在挤奶的连续时间段的长度最长为 300 秒(第 1200 秒至第 1500
2021-01-17 09:57:06
102
原创 acwing每日一题:剪绳子
有N根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对N根绳子进行任意裁剪(不能拼接),请你帮忙计算出这M根绳子最长的长度是多少。输入格式第一行包含2个正整数N、M,表示原始绳子的数量和需求绳子的数量。第二行包含N个整数,其中第 i 个整数Li表示第 i 根绳子的长度。输出格式输出一个数字,表示裁剪后最长的长度,保留两位小数。输入样例:3 43 5 4输出样例:2.50//利用二分的思想#include <iostream>#include <al
2021-01-14 09:22:01
229
原创 acwing回文平方
题目大意现在给定你一个整数 B,请你判断 1∼300 之间的所有整数中,有哪些整数的平方转化为 B 进制后,其 B 进制表示是回文数字。输入一个整数B输出每行包含两个在 B 进制下表示的数字。第一个表示满足平方值转化为 B 进制后是回文数字那个数,第二个数表示第一个数的平方。所有满足条件的数字按从小到大顺序依次输出。#include <iostream>#include <string.h>using namespace std;char arr[20];//存
2021-01-13 09:44:05
80
原创 acwing滑雪
直接暴力搜索会超时#include <iostream>using namespace std;typedef long long ll;ll arr[305][305];int book[305][305];int m, n;int maxx = -1;int nx[] = { -1,0,1,0 };int ny[] = { 0,1,0,-1 };void dfs(int x, int y,int len){ if (len > maxx)maxx = l
2021-01-12 15:58:50
137
原创 一维数组的二维应用
对于一道题目规定二维方阵 N*M,并指出要求 1<=n乘以m<=1000000,做题中若开一个二维的arr[1000000][1000000]必定会超内存,此时可以采取用一位数组存二维数组,或者采用vector动态二维数组的情况//vector动态数组的方法#include <iostream>#include <vector>using namespace std;vector<int>arr[1000005];int main(void){
2020-10-28 15:01:24
121
原创 小字辈
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。简单并查集用广搜,可以利用vector动态数组输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。输出格式:首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以
2020-10-21 08:37:17
151
原创 小字辈
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。简单并查集用广搜,可以利用vector动态数组输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。输出格式:首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以
2020-10-21 08:18:08
85
原创 深入虎穴
题目描述著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。内线告诉他,情报就藏在迷宫的最深处。但是这个迷宫太大了,他需要你的帮助 —— 请编程帮他找出距离入口最远的那扇门。输入样例1
2020-10-18 22:34:37
349
原创 动态顺序存储结构
动态顺序存储结构//动态存储结构#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define LIST_INIT_SIZE 100//当前所拥有的空间#define LISTINCREMENT 10//每次新开辟的空间#define OVERFLOW -2typedef struct { int *elem; int length; int listsize;}Sqlist;voi
2020-10-16 10:48:44
619
原创 java中基本数据类型和引用数据类型的区别
1:java中有两种不同的数据类型:基本数据类型和医用数据类型(1)基本数据类型:共有八种,包括①整数型(byte short int long)②浮点型(float double)③字符型char④布尔型boolean。基本数据类型直接储存在内存中的内存栈中,基本类型的访问是按值访问的,可以直接对值进行操作。其数据本身的值存放在栈里面。基本数据类型的比较是对于值的比较。基本数据类型变量调用方法作为参数时是按照值进行传递的,方法中对于形参的改变不会改变实参的数值。基本数据类型的值是不可变的(我们不能给基本
2020-10-16 10:31:33
233
原创 C++unique使用
C++中unique函数只能对相邻的数字进行去重,所以必须要对序列排序后再进行去重#include <iostream>#include <algorithm>using namespace std;int main(void){ int n; cin >> n; int arr[20]; for (int i = 0; i < n; i++) cin >> arr[i]; sort(
2020-09-23 08:47:08
196
原创 跑图
题目描述跑图是RPG游戏中很烦躁的事情。玩家需要跑到距离他最近的传送点的位置。现在给你一张N \times MN×M的方格图,每个方格中数值00表示为平地,数值11表示为传送点,你的任务是输出一张N \times MN×M的矩阵,Matrix_{xy}Matrixxy 表示从(x,y)(x,y)到距离它最近的传送点的距离。 这里的距离是曼哈顿距离,|x1-x2|+|y1-y2|思路如果对于每一个点bfs判断其到传送点的最短距离,一定会超时,所以将所有传送点加入队列,将传送点周围的点离传送点的距
2020-09-23 08:40:08
267
原创 c++unique去重函数
c++中unique函数实现的只是相邻相同元素的去重,因此实现方式跟我们想象的去重函数不完全一样。因此,unique函数本身是不能实现对未排序的序列的去重的。因此去重时需要先排序#include <iostream>#include <algorithm>using namespace std;int main(void){ int n; cin >> n; int arr[20]; for (int i = 0; i <
2020-09-23 08:24:03
894
原创 子段和问题
一:求一个序列的最大字段和采用动态规划的思想,直接看代码#include <iostream>#include <algorithm>using namespace std;int arr[100];int dp[100];int main(void){ int n; cin >> n; int sum = -99999999; for (int i = 0; i < n; i++) { cin
2020-09-13 10:06:58
353
原创 一个简单的推箱子小游戏
推箱子小游戏一个很简单的推箱子小游戏,增加了退回一步的功能(实现方式很传统,通过标记上一个按键的方向,逆向将地图变换)#include <stdio.h>#include <conio.h>//输入#include <windows.h>//清屏的头文件int flag;int old = 0;//记录上一次的方向int tui;int s;int sum=0;int map[9][11] = { {0,1,1,1,1,1,1,1,1,1,0
2020-08-27 09:09:18
505
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人