
Java练习
文章平均质量分 85
shall_zhao
这个作者很懒,什么都没留下…
展开
-
LeetCode322.零钱兑换
而在回溯法中,如果含有很多的重复的计算的时候,就可以使用记忆化的搜索,将可能出现的重复计算大状态使用一个数组来保存其值,在进行重复的计算的时候,就可以直接的调用数组中的值,较少了不必要的递归。记忆化搜索其实就是在递归的时候,把每个状态保存起来,这样我们递归过程中使用到的重复的结果的时候,不需要在去重新计算,直接从数组中取值,就可以加快速度了。从图中可以看出,里面有很多的重复节点,我们使用memo[]来保存节点,memo[n]表示钱币n可以被换取的最少的硬币数,不能换取的话赋值-1。原创 2024-06-06 11:29:05 · 1106 阅读 · 0 评论 -
Leetcode373.查找和最小的 K 对数字
我们其实的时候买把这n个序列的第一个元素(以二元组(i,j))入队(优先队列,或者是小根堆),其中 i 为该点对中 nums1[i] 的下标,j 为该点对中 nums2[j]的下标,这里可以有一个小优化,我们始终确保nums1为两数组中长度较小的那个,然后通过标记来记录是否发生过交换,确保答案的点顺序的正确性。输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3。输入: nums1 = [1,1,2], nums2 = [1,2,3], k = 2。原创 2024-05-29 21:52:24 · 1215 阅读 · 0 评论 -
Leetcode39.组合总和
如下图所示,先选 4 后选 5 与先选 5 后选 4 是两个不同的分支,但两者对应同一个子集。那为了实现非单调递增,我们可以首先将序列排序,这样保证了搜索的时候是有序的。例如,输入集合 {3,4,5}和目标整数 9,解为 {3,3,3},{4,5}。输入:candidates = [2,3,6,7], target = 7。输入: candidates = [2,3,5], target = 8。输出: [[2,2,2,2],[2,3,3],[3,5]]输出:[[2,2,3],[7]]原创 2024-05-12 08:34:26 · 778 阅读 · 1 评论 -
LeetCode 212.单词搜索II
输入:board = [[“o”,“a”,“a”,“n”],[“e”,“t”,“a”,“e”],[“i”,“h”,“k”,“r”],[“i”,“f”,“l”,“v”]], words = [“oath”,“pea”,“eat”,“rain”]单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。输入:board = [[“a”,“b”],[“c”,“d”]], words = [“abcb”]输出:[“eat”,“oath”]原创 2024-05-10 08:48:00 · 473 阅读 · 0 评论 -
Leetcode127.单词接龙
输入:beginWord = “hit”, endWord = “cog”, wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”]输入:beginWord = “hit”, endWord = “cog”, wordList = [“hot”,“dot”,“dog”,“lot”,“log”]解释:一个最短转换序列是 “hit” -> “hot” -> “dot” -> “dog” -> “cog”, 返回它的长度 5。wordList 中的所有字符串 互不相同。原创 2024-05-08 08:26:37 · 934 阅读 · 0 评论 -
LeetCode210.课程表II
对于一个节点 uuu,如果它的所有相邻节点都已经搜索完成,那么在搜索回溯到 uuu 的时候,uuu 本身也会变成一个已经搜索完成的节点。「已完成」:我们搜索过并且回溯过这个节点,即该节点已经入栈,并且所有该节点的相邻节点都出现在栈的更底部的位置,满足拓扑排序的要求。在整个深度优先搜索的过程结束后,如果我们没有找到图中的环,那么栈中存储这所有的 n 个节点,从栈顶到栈底的顺序即为一种拓扑排序。一个典型的拓扑排序的题目,如果存在拓扑排序,返回一个拓扑排序的结果,如果不存在返回一个空数组。原创 2024-05-06 09:02:09 · 1050 阅读 · 0 评论 -
Leetcode399.除法求值
下面这些内容摘抄自官方的题解,我也不会写[555~]原创 2024-05-05 09:01:43 · 866 阅读 · 0 评论 -
236.二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。输入:root = [1,2], p = 1, q = 2。b. 当root等于p,q,则直接返回root。原创 2024-04-30 12:26:47 · 384 阅读 · 0 评论 -
222.完全二叉树的节点个数
具体做法是,根据节点个数范围的上下界,确定当前要判断的节点个数mid,假如mid存在,那说明节点个数比mid多,在后一半搜索,如果,mid不存在,说明节点个数比mid少,在前一半搜索。,现在h=2,也就是4,5,6,7对应二进制分别为 100 101 110 111。不看最左边的1,从第二位开始,0表示向左,1表示向右,正好可以表示这个节点相对于根节点的位置。最后bit为0,说明已经找到编号为5的这个节点相对于根节点的位置,在看这个节点是不是空,不是空说明存在,exist返回真。原创 2024-04-29 11:31:12 · 574 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球[排序+贪心]
又因为右侧边界排序过后,是有序的,我们可以每次取当前右侧边界最小的气球,把这个气球的右边界作为发射箭的位置,只要所有的左边界比我这个位置小的都可以打中(因为右边界从小到大呀!我们考虑任意一种最优的方法,对于其中的任意一支箭,我们都通过上面描述的方法,将这支箭的位置移动到它对应的「原本引爆的气球中最靠左的右边界位置」,那么这些原本引爆的气球仍然被引爆。将这支箭的射出位置移动到这个右边界位置,这也是最远可以往右移动到的位置:如图 1-3 所示,只要我们再往右移动一点点,这个气球就无法被引爆了。原创 2024-04-20 09:07:43 · 562 阅读 · 0 评论 -
56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。输入:intervals = [[1,4],[4,5]]输出:[[1,6],[8,10],[15,18]]在从前往后扫描,使用List记录即可,输出:[[1,5]]原创 2024-04-19 21:30:37 · 371 阅读 · 0 评论 -
128. 最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9。原创 2024-04-19 13:18:34 · 226 阅读 · 0 评论 -
日历打印
已知2017年第一天是星期日 ,打印2017年某月的月历。输入输入月份输出输出提示:System.out.printf("%4s%4s%4s%4s%4s%4s%4s","日","一","二","三","四","五","六");System.out.println("*****"+year+"年"+month+"月份*****");System.out.printf("%3d",da...原创 2020-05-08 07:30:11 · 701 阅读 · 2 评论 -
编写程序,输入一个字符,判断它是否为小写字母,如果是,将它转换成大写字母,如果不是,原样输出。
输入字符输出字符输出难度入门输入示例a输出示例A代码展示:import java.util.Scanner;public class Abc { public static void main(String[] args) { Scanner input=new Scanner(System.in); String lin...原创 2020-05-08 07:12:18 · 6344 阅读 · 1 评论 -
String类的使用
题目描述:分析以下需求,并用代码实现:(1)从键盘循环录入一个字符串,直到所输入的字符串以"end"结尾,正式使用时字符串不包括"end"(2)将字符串中大写字母变成小写字母,小写字母变成大写字母,其它字符用"*"代替,并统计字母的个数举例:键盘录入:Hello12345Worldend输出结果:hELLO*****wORLD10输入Hello12345Worldend输出...原创 2020-05-08 06:34:06 · 185 阅读 · 0 评论 -
数列循环左移
代码展示:import java.util.Scanner;public class Abc { public static void main(String[] args){ Scanner input=new Scanner(System.in); String t=input.nextLine(); //以字符串的形式接收 ...原创 2020-05-08 06:26:03 · 456 阅读 · 0 评论 -
输出n以内的所有亲密数
题目描述:如果自然数m的所有因子(包括1但不包括自身)之和为n,而n的所有因子之和为m,则称m与n是一对“亲密数”,例如220的所有因子之和为1+2+4+5+10+11+20+22+44+55+110=284。而284的所有因子之和为1+2+4+71+142=220,听此220与284是一对亲密数。输出每对亲密数是,小数在前,大数在后,并去掉重复的对数。代码如下:import java...原创 2020-05-08 06:11:32 · 2480 阅读 · 0 评论 -
利用缓冲流向文件逐行写入这首诗
这是一个练习使用BufferedWriter向文件写入这首诗,记得利用循环,记得处理异常,还有就是记得关闭流。import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class FileDemo { publ...原创 2020-05-06 20:31:16 · 248 阅读 · 0 评论 -
利用FileReader和FileWruter向文件中写入并输出九九乘法表 代码如下:
需要特别注意的就是在输出的时候,利用char型数组,但是无法计算长度,如果随便给定一个长度的话,这个char数组的多余部分会输出小方框,所以,这里利用long a=file.length();先计算file的长度,但是long要强制转换为int型。谢谢!import java.io.File;import java.io.FileNotFoundException;import ...原创 2020-05-06 08:14:29 · 406 阅读 · 0 评论