![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 刷题
文章平均质量分 55
柠砸
这个作者很懒,什么都没留下…
展开
-
java算法常用模板
1.Dijkstra①模板import java.util.Arrays;import java.util.Scanner;public class dijkstra模板 { static int[] dis = new int[505]; // 距离 static int[] vis = new int[505]; // 标记是否已经访问 static int[][] tab = new int[505][505]; // 邻接矩阵 static int[原创 2022-04-04 20:47:27 · 413 阅读 · 0 评论 -
深度和广度优先算法题
1.深度优先搜索算法:深度优先搜索属于图算法的一种,英文缩写为DFS(Depth First Search.)其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。DFS适合题目:给定初始状态跟目标状态,要求判断从初始状态到目标状态是否有解。解决必须走到最深处(例如对于树,须走到它的叶子节点)才能得到一个解的问题通常利用递归实现,所以 每次递归开始的时候要判断是否达到收敛条件,若达到了则得到一个可行解,若...原创 2022-03-31 20:26:21 · 1138 阅读 · 0 评论 -
回溯算法题
注意体会做选择和撤销选择题目一:输入一组不重复的数字,返回它们的全排列做选择为:向下加入某个节点取消选择为:递归后这个选择已经做完了,回溯回去上面的节点做右子树的选择,所以要删除以前做的选择题目二:n皇后问题做选择为:该位置上放皇后取消选择为:当前位置不放皇后...原创 2022-03-22 22:57:39 · 668 阅读 · 0 评论 -
图的算法。
1.k算法在无相图中,用最短的路径使所有的节点连通,从最小的开始加,能形成环的边不加难点:如何判断是否形成环将每个节点放入不同的集合里,当连通这两个节点的时候,把to节点放入from节点的集合里面若目前添加的边已经是同一集合里面的了,则不加这条边public class Code04_Kruskal { // Union-Find Set public static class UnionFind { private HashMap<Node, Node> fat原创 2022-03-22 16:00:27 · 601 阅读 · 0 评论 -
蓝桥杯字符串处理问题
1.猜字母思路1:采用字符串形式public class 猜字母 { public static void main(String[] args) { StringBuilder a=new StringBuilder("abcdefghijklmnopqrs"); //StringBuilder效率更高 for (int i = 1; i <106 ; i++) { a.append("abcdefghi.原创 2022-03-21 21:51:45 · 417 阅读 · 0 评论 -
蓝桥杯日期API问题
Java因为拥有Calendar这个日期API,故只需重点掌握这个api即可1.世纪末的星期这里我们通过设置年月份,然后判断是否是星期天,如果是则直接输出答案public class 世纪末的星期 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); for (int year = 1999; year <10000 ; ye原创 2022-03-21 21:23:44 · 649 阅读 · 0 评论 -
第十二届蓝桥杯javaB组刷题day2
1.直线我们思路:暴力解法,将所有可能的情况列举出来,故需要两个坐标的横纵坐标,便需要四个for循环来进行遍历,出现问题:①需要排除斜率为0的情况,后面再单独进行相加②因为需要set来加入斜率,而一条斜线y=kx+b,包括k和b,set只能包含key,所以我们需要定义一个直线类进行添加★使用HashSet存储自定义对象需要重写equals方法和HashSet方法import java.util.HashSet;public class Main { ...原创 2022-03-21 19:56:12 · 621 阅读 · 0 评论 -
ssm踩过的坑
1.Caused by: com.mysql.cj.exceptions.WrongArgumentException启动服务器后抛出上面异常,页面出现500原因:url有问题jdbc.properties中的url使用了转义字符解决办法:将其换成" & "即可2.com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure启动服务器后抛出以上问题,页面出现500原因:原创 2022-03-20 23:24:29 · 1009 阅读 · 0 评论 -
滑动窗口(220320)
1.代码实现:class Solution { public int lengthOfLongestSubstring(String s) { //1.暴力递归(x) //2.set(x) //3.双指针(√)使用滑动窗口进行解题 if(s.length() == 0){ return 0; } //定义左指针 int left = 0; .原创 2022-03-20 12:04:05 · 181 阅读 · 0 评论 -
220319(位运算,广搜)
1.位运算中的技巧:★num = (num - 1) & num题目一:利用循环,定义一个计数器,将这个整数变为0即可c语言代码实现:#include<stdio.h>int main(){ int num = 9; int count = 0; while (num != 0) { num = (num - 1) & num; count++; } printf("%d\n", count); return 0;}.原创 2022-03-19 21:58:22 · 940 阅读 · 0 评论 -
220318(滑动窗口,广深搜)
1.滑动窗口:2.广搜深搜:暴力递归法:注意:下面会出现栈溢出的问题 public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { //注意点 //因为是递归,故在使用时应该注意,下面进行判断的image[sc][sc]是会改变的 //对上面像素进行判断递归 if(image[sc][sc] == image[sc -.原创 2022-03-18 22:39:04 · 638 阅读 · 0 评论 -
220317
1.注意链表临界条件的判断:本题很任意想到使用快慢指针进行遍历。但在书写代码时:class Solution { public ListNode middleNode(ListNode head) { ListNode fast = head; ListNode slow = head; while(fast != null && fast.next != null){ slow = slow.原创 2022-03-17 22:58:33 · 254 阅读 · 0 评论 -
220315
1.双指针题初始暴力解法:使用了两个for循环进行判断,超时了class Solution { public int[] twoSum(int[] numbers, int target) { int[] arr = new int[2]; for(int p = 0;p < numbers.length;p++){ for(int q = p + 1;q < numbers.length;q++){ .原创 2022-03-15 22:57:14 · 202 阅读 · 0 评论 -
220314
1.快慢指针主要用于链表遍历节点的功能class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { //要想能够返回头节点,需要给head节点添加一个头节点,便于返回结果 ListNode dummyNode = new ListNode(0); dummyNode.next = head; //定义快慢指针 Lis原创 2022-03-14 22:57:48 · 532 阅读 · 0 评论 -
220311(二叉树)
1.二叉树二叉树常用套路★要有大局观的思维,把头节点设为x,然后再想想左子树和左子树要达到什么才能满足条件,再判断左右子树递归后需要返回什么给你①判断是否是平衡二叉树首先:设头节点为x,要想该树为平衡二叉树,左子树必须是平衡二叉树,右子树也必须是平衡二叉树,且左子树的高度-右子树的高度不能大于1然后:我们想想那这样需要什么才能形成递归,头节点需要知道左右节点什么 a)知道左右子树是否为平衡二叉树 b)知道左右子树的高度public clas...原创 2022-03-11 16:56:53 · 594 阅读 · 0 评论 -
220310(链表)
1.链表:在链表结构中,简单题体现算法的题不多,几乎都是使用指针的遍历链表技巧:快慢指针在实际应用链表中,往往需要获取链表的中间节点,这时候我们就可以定义一对快慢指针,慢指针走两步时,快指针走两步,当快指针遍历完的时候,慢指针就来到了中间节点。但特殊题目时,我们需要对快慢指针进行定制,比如慢指针要来到中间节点的前一个,我们需要做一些调整。链表技巧:哈希表例题1:2.二叉树递归求前中后序遍历①先写出改二叉树的递归数②只...原创 2022-03-10 16:46:25 · 604 阅读 · 0 评论 -
220309
1.异或运算★异或交换arr[i] = arr[i] ^arr[j]arr[j] = arr[i] ^arr[j]arr[i] = arr[i] ^arr[j]原理:a^0=a a^a=0异或运算满足结合律和交换律,故arr[i] = arr[i] ^arr[j] arr[i]=arr[i] ^arr[j] arr[j] = arr[j]arr[j] = arr[i] ^arr[j] arr[i] =arr[i] ^arr[j] ...原创 2022-03-09 11:47:37 · 459 阅读 · 0 评论 -
220307
1.存在重复元素错误思路:使用两个for进行暴力查找,然而超时了★思路1:使用set因为set具有不重复性,故我们可以利用这个性质class Solution { public boolean containsDuplicate(int[] nums) { Set<Integer> set = new HashSet<Integer>(); for (int x : nums) { if (!s原创 2022-03-07 11:15:35 · 123 阅读 · 0 评论 -
220305(动态规划)
1.动态规划动态规划的思想类似于数学归纳法,当知道所有 i<n 的情况时,我们可以通过某种算法算出 i=n 的情况。想想能不能找出n-1和n的规律★括号生成本题最核心的思想是,考虑i=n时相比n-1组括号增加的那一组括号的位置。思路:当我们清楚所有 i<n 时括号的可能生成排列后,对与 i=n 的情况,我们考虑整个括号排列中最左边的括号。它一定是一个左括号,那么它可以和它对应的右括号组成一组完整的括号 "( )",我们认为这一组是相比 n-1 增加进来的括号。...原创 2022-03-05 09:38:57 · 61 阅读 · 0 评论 -
220303
1.链表:⚪两数相加将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 00,比如 987 + 23 = 987 + 023 = 1010 每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值 如果两个链表全部遍历完毕后,进位值为 11,则在新链表最前方添加节点 11链表小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而.原创 2022-03-03 11:57:17 · 117 阅读 · 0 评论 -
220302(摩尔投票法)
1.摩尔投票法:应用理解:核心就是对拼消耗。玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。最后能剩下的必定是自己人。应用实例:⚪多数元素思路解析:候选人(cand_num)初始化为nums[0],票数count初原创 2022-03-02 14:43:57 · 98 阅读 · 0 评论 -
220301
1.字符串反转交换有两种方式:①一种就是常见的交换数值:inttmp=s[i];s[i]=s[j];s[j]=tmp;②一种就是通过位运算:s[i] ^= s[j];s[j] ^= s[i];s[i] ^= s[j];法一:双指针法我们可以通过两个指针,一个指向数组头,一个指向数组尾进行比较遍历:void reverseString(char* s, int sSize){ int left = 0; int right =...原创 2022-03-01 11:05:09 · 68 阅读 · 0 评论 -
java 刷题笔记(day3)
一.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。????思路:将分子分母分开来看,分子依次是2,3,5,8,13,21,除开第一项和第二项之外,其他的每一项都与前两项有直接的关系(前两项求和),所以明显是递归算法的特征,分母也是一样,所以该题通过递归方法求解。public class QiuHe { public static void main(String[] args){ float total=0;原创 2021-11-12 17:18:31 · 594 阅读 · 0 评论 -
java 刷题笔记(day2)
1两字符串和两字符串和样例:示例1:输入:A = "99"B = "111"输出: "11010"解释: 因为 9 + 1 = 10, 9 + 1 = 10, 0 + 1 = 1,连接解法:public String SumofTwoStrings(String A, String B) { // write your code here String result = ""; int lenA = A.length(), l原创 2021-11-10 22:45:48 · 617 阅读 · 0 评论 -
java 刷题笔记(day1)
一.大小写转换 #ASCII码中小写字母与对应的大写字母相差32A 的为 65;a 的为97;二,判断是数字还是字母数字:c>='0'&&c<='9' ;字母:c>='a'&&c<='z',c>='A'&&c<='Z' ;三,主元素题目给定一个整型数组,找出主元素,它在数组中的出现次数大于数组元素个数的二分之一。思路:可以排序的情况下,代码只需要...原创 2021-11-08 22:37:08 · 208 阅读 · 0 评论