![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 56
南一道街丶
在校大学生一枚,现主要研究Golang,平时会不定期分享Golang知识
展开
-
第一场力扣周赛
第一场力扣周赛,力扣周赛,339力扣周赛原创 2023-04-02 15:25:49 · 931 阅读 · 1 评论 -
广度优先搜索(BFS)
BFS问题简介BFS,英文全称是 Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。(open-closed表)我的理解最早我学广度优先遍历是在二叉树里面的 层序遍历, 广度优先搜索的做法是1.首先创建一个队列(queue),2.把根节点的存入队原创 2022-04-03 17:22:41 · 1568 阅读 · 0 评论 -
二叉树的层序遍历(BFS)
文章目录二叉树的层序遍历(bfs)思想:BFS:102.二叉树层序遍历题目思路103.二叉树的锯齿形层序遍历题目199.二叉树的右视图题目:代码二叉树的层序遍历(bfs)思想:二叉树的层序遍历主要是运用bfs的思想,进行一层一层的遍历BFS:创建队列Queue,然后从当前一层的节点进行取值操作,然后遍历下一层的节点,如此反复进行102.二叉树层序遍历题目思路class Solution {public List<List<Integer>> levelOrde原创 2022-03-29 17:55:37 · 5893 阅读 · 0 评论 -
回溯解决子集,组合,全排列问题
回溯框架思想回溯算法是类似于枚举的搜索过程,主要是在搜索过程中寻找问题的解,当79.子集题目思路:这是一个子集划分问题,我们每次添加一个数字形成组合即可Java版本class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new ArrayList<>(); res.add(ne原创 2022-03-14 09:25:22 · 284 阅读 · 1 评论 -
动态规划解决背包问题
文章目录背包问题框架1.状态和选择2.对dp数组的定义3.寻找状态转移方程框架leetcode 416 划分等和子集问题思路代码518 零钱划分问题思路代码背包问题框架1.状态和选择对于给定的背包,可以装的容量为W,可以装的个数为N个,那么这两个属性就是这个背包问题的状态,选择就是选择这个装到背包或者不选这个装到背包。2.对dp数组的定义在dp数组中 dp[i][W] 表示在选取第i个物体的时候,这个W的重量,那么我们的目的很简单,对于正常的情况来说,我们需要求到的结果是dp[N][W],我们可原创 2022-03-07 09:04:52 · 368 阅读 · 0 评论 -
链表的创建以及基础增删改查操作
文章目录Java版本链表创建增加操作展示操作修改操作删除操作总体Go版本Java版本链表创建class ListNode{ int value; String name; ListNode next; public ListNode(int value,String name){ this.value = value; this.name = name; } @Override public String toS原创 2022-02-19 20:04:54 · 348 阅读 · 0 评论 -
剑指OfferII019 最多删除一个字符得到回文
文章目录题目:思路:代码:优化:思路:代码:题目:思路:暴力破解,因为只让替换一个字符,我们双指针扫描的时候如果发现对不上,就先跳过让count=1,下次如果对不上并且count=1的时候,就返回false但是代码:class Solution { public static boolean validPalindrome(String s) { int left = 0,right = s.length()-1; int count =原创 2022-01-12 22:31:23 · 3434 阅读 · 1 评论 -
剑指Offer II 018.有效的回文
题目:暴力思路:判断该字符是否合法,然后取出s的值,用StringBuffer接收s的值进行reverse和原数比较代码:package LeetCode.MarchSoft.SwordTowards.Day3Sword;public class ZZ18 { public static void main(String[] args) { String s = "OP"; System.out.println(isPalindrome(s)); }原创 2022-01-12 22:28:37 · 300 阅读 · 0 评论 -
剑指OfferII 007 数组中和为0的三个数
文章目录Offer7 数组中和为0的三个数题目:我的思路:代码:双指针思路:代码:优化思路:代码:ps:Offer7 数组中和为0的三个数题目:我的思路:暴力破解,三重for循环遍历,然后map去重代码:class Solution { HashMap<Integer, List<Integer>> map = new HashMap<>(); public List<List<Integer>> threeSu原创 2022-01-12 22:26:44 · 158 阅读 · 0 评论 -
动态规划—路径下降和
题目思路第一步,首先分析问题,我们如果要找到路径跑到最后一行的最优状态,我们得知道他先前的状态dp[i-1],通过此题我们得知dp(matrix,i,j)是dp(matrix,i-1,j)和dp(matrix,i-1,j-1)和dp(matrix,i,j+1)三种状态取最小值过来的然后我们就取得了最后一行每一个空的最小值,最后我们只需遍历比较取最小值即可代码package LeetCode.labuladong.Dynamic;import java.util.Arrays;/**原创 2022-01-09 21:27:08 · 294 阅读 · 0 评论 -
算法趣味问题—打家劫舍I
题目:思路:动态规划涉及到最优子结构和重叠子问题,重叠子问题需要备忘录,最优子结构需要判断有没有出现代码:自顶向下class Solution { int[] memo ; public int rob(int[] nums) { //对于memo进行初始化 memo =new int[nums.length]; Arrays.fill(memo,-1); //从0开始对dp进行扫描 ret原创 2022-01-09 18:04:00 · 383 阅读 · 0 评论 -
算法趣味问题—打家劫舍III
文章目录打家劫舍III题目:思路:代码:打家劫舍III题目:思路:同样是找下层和下下层,只不过需要加备忘录并且变成子树的遍历代码:class Solution { HashMap<TreeNode,Integer> memo =new HashMap<>();public int rob(TreeNode root) { //为空 if(root==null) return 0; //判断是否在备忘录里面 if(memo.conta原创 2022-01-09 18:00:34 · 161 阅读 · 0 评论 -
算法趣味问题—打家劫舍II
文章目录打家劫舍II题目:思路:代码:打家劫舍II题目:思路:跟原来一样,只不过这一次头一个和最后一个不能同时抢了,只能抢第二个和最后一个,以及第一个和倒数第二个,我们只需更改stole里面的下标即可代码:class Solution { public int rob(int[] nums) { int n = nums.length; //0和1的情况都为0 if(n==1) return nums[0]; //写错原创 2022-01-09 17:58:01 · 179 阅读 · 0 评论 -
算法趣味问题—打家劫舍I
题目:思路:动态规划涉及到最优子结构和重叠子问题,对于最优子结构需要代码:自顶向下class Solution { int[] memo ; public int rob(int[] nums) { //对于memo进行初始化 memo =new int[nums.length]; Arrays.fill(memo,-1); //从0开始对dp进行扫描 return dp(nums,0);原创 2022-01-09 17:56:28 · 254 阅读 · 0 评论 -
最大子数组和
题目:思路:动态规划对于这个题,必须要是连续的子数组,所以我们需要判断的是要么当前dp[i]为num[i]和之前的dp[i-1]组成一个数组,要么dp[i] =num[i]组成一个新的数组优化前:class Solution { public int maxSubArray(int[] nums) { //从前到后 //先对dp数组初始化 int n = nums.length; int[] dp =new int[n];原创 2022-01-09 17:53:15 · 74 阅读 · 0 评论 -
单链表的解题思路
文章目录六种单链表的解题思想合并两个有序链表题目:解题思路:代码如下:单链表的倒数第 k 个节点题目:解题思路:代码如下:链表的中间节点题目:解题思路:代码如下:判断链表是否包括环题目:解题思路:代码如下:环形链表 II题目:解题思路:代码如下:判断两个链表是否相交题目:解题思路:代码如下:六种单链表的解题思想合并两个有序链表题目:解题思路:我们想让两个有序链表合并并且合并之后的链表仍为有序链表,就需要我们在合并的时候进行排序,首先创建一个临时结点dummy为-1,创建一个临时节点p为dummy原创 2021-12-16 15:32:30 · 1155 阅读 · 0 评论 -
不同的二叉搜索树
题目如下:第一种思路:用for循环遍历左右子树递归的结果之和为什么这样说呢,因为如果你设定中间的2为根的话,那么当前的不同二叉搜索树的结果就是根的左边的排列个数乘根的右边的排列个数,如果取1为中间值也是如此,所以就需要我们使用for循环遍历i(i为1到n)为根的所有情况,计算他们的情况之和代码如下:int numTrees(int n) { // 计算闭区间 [1, n] 组成的 BST 个数 return count(1, n);}/* 计算闭区间 [lo, hi] 组成原创 2021-12-03 15:40:35 · 560 阅读 · 0 评论 -
关于二叉搜索树的增,删,校验
二叉搜索树定义:对于一个根,他的左子树的左子节点的值都小于他的根节点的值,他的右子树的右子节点的值都大于他的根节点的值如图:二叉搜索树(BST)校验错误情况:下面这种情况是不正确的,因为要保证root的左子节点和root的右子结点分别都比root小和大boolean isValidBST(TreeNode root) { if (root == null) return true; if (root.left != null && root.val <=原创 2021-11-28 19:44:31 · 247 阅读 · 0 评论 -
二叉树框架技巧以及算法实践
文章目录二叉树的解题思路的理解实践题226.翻转二叉树思路分析代码114. 二叉树展开为链表思路分析代码654. 最大二叉树思路分析代码二叉树的解题思路的理解二叉树的相关的算法,首先就是要搞清楚root要做什么,然后选择进行遍历的方法是前序遍历,中序遍历还是后序遍历实践题226.翻转二叉树思路分析我们观察之后可以得到,每个二叉树的左右子节点交换,结果就是翻转二叉树,所以我们需要在root地方做的就是创建一个临时结点,用临时结点做结点替换,这个题还是比较容易的代码class Solution原创 2021-11-21 09:10:07 · 451 阅读 · 0 评论 -
力扣热题TOP100——3.求无重复字符最长子串
题目解题思路这个题主要是要找到字符串的子串不重复的最长值,而不是子序列,如果是子序列就直接找所有不一样的值就可以了,但是子串必须是相邻且不相同的,我首先想到的就是暴力破解,其次就是学习到了滑动窗口策略暴力破解暴力破解的思想是做一次双for循环,其中i表示子串的最左边,j表示子串的最右边(在子串满足不重复的前提下)package LeetCode;import java.util.HashSet;import java.util.Scanner;public class compete.原创 2021-11-04 17:46:11 · 271 阅读 · 0 评论 -
数据结构与算法之查找(Java版)
顺序查找代码实现:public class SeqSearch { public static void main(String[] args) { int[] arr ={1,9,11,-1,34,89}; int index = seqSearch(arr, 11); if (index == -1){ System.out.println("没有找到"); }else { Sys原创 2021-10-10 20:13:53 · 140 阅读 · 0 评论 -
数据结构与算法之排序(Java版)
数据结构与算法之排序(Java版)原创 2021-10-10 17:31:36 · 211 阅读 · 0 评论 -
数据结构与算法之递归(Java版)
递归迷宮问题思路分析:递归分四个方向寻找,有路就返回true,没路就返回false代码实现:方法: public static boolean selectWay(int[][] map, int i, int j) { if (map[6][5] == 2) { return true; } else { if (map[i][j] == 0) { //如果这个点没走过,我们标明原创 2021-10-10 17:27:21 · 62 阅读 · 0 评论 -
数据结构与算法之栈(Java版本)
栈实现思路:1.使用数组来模拟栈2.定义一个top来表示栈顶,代表-13.入栈操作,当有数据的时候,top++, stack[top] = data;4.出栈操作int value = stack[top];top --;return value;代码实现:定义类//定义一个类表示栈class ArrayStack { private int maxSize; //栈的大小 private int[] stack; //数组来模拟栈 private原创 2021-10-02 16:31:47 · 104 阅读 · 0 评论 -
数据结构与算法之链表(Java版)
1.应用场景2.数据结构的算法3.原理剖析4.分析实验步骤5.代码实现链表单链表完成添加的遍历package LinkedList;class HeroNode{ //编号 public int no; //名字 public String name; //昵称 public String niceName; //指针指向后面 public HeroNode next; public HeroNode(int n..原创 2021-09-30 16:59:26 · 374 阅读 · 0 评论 -
C语言实现家谱管理系统
文章目录head.hfamily.cppmain.cpphead.h#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#ifndef FAMILY_H_INCLUDED#define MAXSIZE 100#define FAMILY_H_INCLUDEDtypedef struct Infomation{ char name[20];原创 2021-06-27 12:34:41 · 7094 阅读 · 41 评论 -
二叉树的遍历和统计二叉树中度为0、度为1、度为2的结点个数
文章目录实验五 树的应用--二叉树的遍历一、实验目的:1、了解二叉树的逻辑结构和物理结构;2、掌握二叉树数据类型定义;3、熟练掌握二叉树在链式存储结构上的遍历操作;二、实验要求:三、实验任务:四、代码如下五、实验结果图实验五 树的应用–二叉树的遍历一、实验目的:1、了解二叉树的逻辑结构和物理结构;逻辑结构:1对多的关系,层次关系明显物理结构:在内存的存储结构,常用的有二叉链表和三叉链表2、掌握二叉树数据类型定义;3、熟练掌握二叉树在链式存储结构上的遍历操作;深度遍历:先序遍历、中序原创 2021-05-20 21:24:49 · 7279 阅读 · 3 评论