
数据结构与算法
小白基础算法与数据结构
Sky-木落
程序猿!热爱编程、旅行、摄影、轻音乐等、
展开
-
5. 最长回文子串
1、暴力解法package leetcode;class Solution { public static void main(String[] args) { Solution solution = new Solution(); String str = "cbbd"; System.out.println(solution.longestPalindrome(str)); } public String longestPa原创 2021-10-04 17:32:23 · 138 阅读 · 0 评论 -
双向链表的实现(LinkedList)
package com.muluo.test1003;public class MyLinkedList { public static void main(String[] args) { MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addLast(1); myLinkedList.addLast(5); myLinkedList.addLast(2); myLinkedList.addLast(8);原创 2021-10-04 13:17:32 · 238 阅读 · 0 评论 -
树的建立——Java
package com.muluo.tree;public class TreeNode { int value; TreeNode leftNode; TreeNode rightNode; public TreeNode(int value) { this.value = value; } public void setLeftNode(TreeNode leftNode) { this.leftNode = leftNode; } public void setRig原创 2021-10-04 12:34:29 · 1494 阅读 · 0 评论 -
第 5 天 双指针
876. 链表的中间结点第一种方法快慢指针,当快的指针到最后一个元素时,那个慢的刚好到中间;第二种方法是直接遍历一遍,确定元素总个数,然后确定出中间元素/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } *原创 2021-08-09 21:19:45 · 100 阅读 · 0 评论 -
第 4 天 双指针
344. 反转字符串分别定义一个左指针,和右指针,while循环退出的条件是,当左右指针相遇时即可退出while循环class Solution { public void reverseString(char[] s) { int i = 0, j = s.length - 1; while (i < j) { char t = s[i]; s[i] = s[j]; s[j] =原创 2021-08-08 21:17:19 · 108 阅读 · 0 评论 -
五大常用算法之分支限界法
1.分支限界法的基本概念分支限界法通常以广度优先或以最小耗费,最大收益优先的方式所搜问题的解空间树,问题的解空间树是表示问题解空间的一颗有序树,常见的有子集树和排序树2. 分支限界法与回溯法的比较分支限界法类似回溯法,但是一般情况下分支限界法与回溯法的求解目标不同,回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或技校的解,即在某种意义下的最优解3. 分支限界法的算法框架队列是(FI原创 2020-12-20 11:00:03 · 2037 阅读 · 2 评论 -
五大常用算法之回溯法
1. 回溯法的基本概念用回溯法求解问题时,应明确问题的解空间,问题的解空间至少应包含问题的一个最优解,确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间,这个开始结点成为活结点,同时成为当前的扩展结点,在当前扩展结点处,如果在当前扩展结点处不能在向纵深方向移动,则当前扩展结点就成为死结点,此时应往回移动(回溯)至最近的一个活结点处,并让这个活结点成为当前的扩展结点,回溯法以这种工作方式递归的在解空间中搜索,直至找到所要求的的解或解空间中已无活结点时为止2. 回溯法原创 2020-12-20 10:45:48 · 2069 阅读 · 1 评论 -
五大常用算法之贪心算法
1.贪心算法的基本概念贪心算法通过一系列的选择来得到问题的解,所做的每个选择都是当前状态下局部最好的选择,即贪心选择2. 贪心算法与动态规划算法的比较贪心算法与动太规划算法都要求问题具有最优子结构性质,这是两个算法的一个共同点, 贪心选择性质是指:所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到,这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别3. 动态规划的基本要素最优结构性质贪心选择性质4. 采用贪心算法解决的经典问题活动安排问题最原创 2020-12-20 10:24:17 · 432 阅读 · 1 评论 -
五大常用算法之动态规划
1.动态规划的基本概念其基本思想是将求带解决的问题分解成若干子问题,向求解子问题,再结合这些子问题的解得到原问题的解,2. 动态规划与分治法的比较与分治法不同的是,使用动态规划求解的问题经分解得到的子问题往往不是相互独立的,若用分治法来解决这类问题则分解得到的子问题数目太多,以致最后解决原问题需要耗费指数级时间3. 动态规划的基本要素最优结构性质重叠子问题性质4. 动态规划算法的步骤找出最优解的性质,并刻画其结构特征递归的定义最优质以自底向上的方式计算得到最优质根据计算最原创 2020-12-20 10:10:34 · 210 阅读 · 1 评论 -
五大常用算法之递归与分治策略
1.递归的概念直接或间接的调用自身的算法称为递归算法2. 分支法的基本思想分治法的基本思想是将一个规模为n的问题分解成为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解决这些子问题,,然后将各个子问题的解合并到原问题的解3.采用递归策略解决的经典问题汉诺塔(hanoi)4.采用分治策略解决的经典问题二分搜索技术大整数乘法Strassen矩阵乘法棋盘覆盖合并排序和快速排序线性时间选择最接近点对问题循环赛日程表...原创 2020-12-20 09:48:20 · 426 阅读 · 1 评论 -
算法的基本概念
1. 什么是算法算法是由若干条指令组成的有穷序列,且满足下列四条性质① 输入: 有零个或多个由外部提供的量作为算法的输入;②输出:算法至少产生一个量作为输出;③确定性L:组成算法的每条指令是清晰的,无歧义的;④有限性: 算法中每条指令的执行次数是有限的执行每条指令的时间也是有限的。2.算法的复杂性算法的复杂性有时间复杂性和空间复杂性之分...原创 2020-12-20 09:36:30 · 1981 阅读 · 1 评论 -
泛型数组的CRUD
可进行动态扩容和缩容,实现了泛型package array;public class ArrayTest { public static void main(String[] args) { Array array = new Array(10); array.addLast("kk"); array.addLast(2); array.addLast(7); array.addLast(10);原创 2020-11-27 21:32:24 · 86 阅读 · 0 评论 -
稀疏数组——棋盘案例实现
package array;import javax.swing.text.html.HTMLDocument;public class SpareArray { public static void main(String[] args) { // chessArr1表示一个棋盘 // 0表示没有落子,1表示白字,2表示黑子 int[][] chessArr1 = new int[11][11]; chessArr1[1][2原创 2020-11-27 21:28:13 · 128 阅读 · 0 评论