摘要: ​ 问题描述 一个8×8的棋盘上有一个马初始位置为(a,b),他想跳到(c,d),问是否可以?如果可以,最少要跳几步? 输入格式 一行四个数字a,b,c,d。 输出格式 如果跳不到,输出-1;否则输出最少跳到的步数。 核心思想:BFS算法(宽搜) (不讲解bfs算法,大家可以去b站基本了解,有助于看 阅读全文
posted @ 2022-03-17 18:00 星辉与你 阅读(185) 评论(0) 推荐(0)
摘要: ​ 算法: 使用到的算法是dfs(深搜)+回溯。这里不讲算法原理,可以自己去找材料看一下,花点时间即可。 伪代码:(不一定全,只做思想参考) dfs(step =1){ if(基本情况:A数组有a[o],并且step>a.length) sout(输出数组) } for(a数组的元素集){ if(看 阅读全文
posted @ 2022-03-17 17:59 星辉与你 阅读(106) 评论(0) 推荐(0)
摘要: 1.栈: 定义:一个连续的内存空间,类似数组。具有自己的特点:后进先出。和算法dfs有关。 用法:背景(java),类:Stack (归属于Java.util.Stack) 是Vector的子类,可以直接使用 Stack<引用数据类型> a = new Stack<引用数据类型>() 方法有:pus 阅读全文
posted @ 2022-03-16 12:27 星辉与你 阅读(49) 评论(0) 推荐(0)
摘要: 1.定义 1.1回溯是配合递归使用的,相当于递归的一种工具。递归是穷举搜索法的一种,效率不高,所以需要工具。回溯法就是通过剪枝技术来加快穷举搜索的速度。 1.2dfs算法当中,单一的递归解决不了问题的时候,就需要回溯来辅助配合,将递归前的节点操作取消。 1.3回溯的步骤是在递归函数下面,复杂,但是也 阅读全文
posted @ 2022-03-15 09:42 星辉与你 阅读(125) 评论(0) 推荐(0)
摘要: 1.核心思想 双指针本质其实就是两个指针,只是不同的玩法而已 2.解决问题: 2.1滑动窗口 2.2移动队列 (都是对双指针的高级应用) 3.常见例题应用 3.1二分查找 3.2两数之和 3.3不重复最长字串。(有点贪心的感觉) 阅读全文
posted @ 2022-03-15 09:28 星辉与你 阅读(37) 评论(0) 推荐(0)
摘要: 1.核心思想 和贪心一样,也是分解成小问题之后解决,但是和贪心不一样,动态规划是有一根线链接的,当前状态是和上一个状态有关,当前最优+上一最优,而不断递推回去,最后初始状态肯定是可以确定的, 就能得到最后最优的状态 2.问题分类: 2.1基础题目 2.2背包问题 3.2打家劫舍 3.3股票问题 3. 阅读全文
posted @ 2022-03-14 22:12 星辉与你 阅读(56) 评论(0) 推荐(0)
摘要: 1.核心思想: 将问题分为子问题,而解决子问题当中,只要满足局部最优,最后可以达到全局最优解。 2.问题分类: 1.分配问题 求最大数,给单位1分配的最优,集合之后就是分配的全部最优 2.区间问题 求最小值,处理一块最大覆盖区间则为当前最优 3.股票买卖 只求买卖数,满足今天买明天可以卖即可,不要考 阅读全文
posted @ 2022-03-14 22:08 星辉与你 阅读(49) 评论(0) 推荐(0)
摘要: 暴力的核心就是枚举出所有的可能性 比较经典的是蓝桥杯的粘木棍。 通过二进制10001,的方式来表示第几根木棍使用了,再通过位运算和与运算来比较是否包含。 经典例题: 无聊的逗 阅读全文
posted @ 2022-03-14 22:06 星辉与你 阅读(187) 评论(0) 推荐(0)
摘要: 一:选择排序 1.核心思想 准备一个指针,默认第一个值是最小值,从第二个值开始遍历,每次循环都让指针指向最小值的下标,再和当前的循环下标交换数值。 比如 1 3 0 1、 外围要循环3次,(要选择出3个最小值或者最大值,)内围要循环的次数是外围+1 到最后一位(也就是外围是i 内围是j 的话,j= 阅读全文
posted @ 2022-03-14 22:04 星辉与你 阅读(189) 评论(0) 推荐(0)
摘要: 知识点: 一:核心思想 两个指针,left,right.分别指向头0 和尾部n-1.在一个已经有序的数组当中,根据 mid = (left+right)/2 来不断缩小查找目标所在的下标,最终实现查找的时间复杂度是(log n)只查找一半的数组就能完成。 二:查找对象分类 一个:直接简单查找就行 多 阅读全文
posted @ 2022-03-13 21:58 星辉与你 阅读(47) 评论(0) 推荐(0)