![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
从零开始冲算法
【江的福AC万物】
这个作者很懒,什么都没留下…
展开
-
江的福从零开始刷算法(递归回溯--二维小结)
LeetCode 79、单词搜索首先我们需要了解在本题中,每个点都可以作为起始点,即我们需要一个二层循环,来遍历每一个点,用这个起始点去走它的路线,判断是否可以达到题目要求。大体结构其实还是跟在一维的递归回溯一致的,有几点需要注意:1、在递归中,每次需要去当前点的上下左右四个点进行判断,因此我们可以用一个数组来对这个过程进行优化。2、在优化的基础上,需要判断新得到的其实点的是否在二维平面中,3、在以最起始那个点开始的一次查找中,所有的点不能够重复判断,因此定义一个二维的Boolean数原创 2020-06-20 09:48:29 · 272 阅读 · 0 评论 -
江的福从零开始刷算法(接昨天-递归算法小套路)
LeetCode 131、分割回文数这个题和昨天的最后一个题差不多是一样的,都是对某个字符串对其分割,因此需要一个start索引,对分割字符串的起点对其管理,还有就是这个题所要满足存入的条件是字符串为回文数,那么就是说,我们需要在循环中,先判断此时分割出来的字符串是不是一个回文,如果是的话再存入list。然后继续往下递归。class Solution { List<List<String>> res =new ArrayList<>(); pub原创 2020-06-19 10:16:46 · 233 阅读 · 0 评论 -
江的福从零开始刷算法(依旧递归-LeetCode 46 全排列等相似算法及小总结)
import java.util.ArrayList;import java.util.Arrays;import java.util.List;class Solution { private boolean[] flags ; private static int count=0; public List<List<Integer>> permute(int[] nums) { flags=new boolean[nums.le.原创 2020-06-18 23:35:12 · 227 阅读 · 0 评论 -
江的福从零开始刷算法(递归--电话号码的字母组合)
树形问题,使用递归。class Solution { public String[] str={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; public List<String> letterCombinations(String digits) { ArrayList<String> list=new ArrayList<String>(); ..原创 2020-06-17 21:45:53 · 168 阅读 · 0 评论 -
江的福从零开始刷算法(二叉树的下一个节点(剑指offer))
/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}*/public class Solution { public TreeLinkNode GetNext(.原创 2020-06-17 20:06:51 · 99 阅读 · 0 评论 -
江的福从零开始刷算法(哈希表)
hash表存在的意义:了解hash表有助于我们了解hashmap的底层原理,在1.7及之前,hashmap用数组加链表完成它的底层建设。首先我们得先有链表,然后将链表存放进专门存放链表的数组中。话不多说,直接代码吧,以存放雇员为例。package ACStudy.数据结构;public class HashTableDemo { public static void main(String[] args) { //创建hashtable HashTab原创 2020-06-17 11:55:17 · 99 阅读 · 0 评论 -
江的福从零开始刷算法(线性,二分,插值,斐波那契)
线性思路分析:遍历数组,等值则返回下标,或者存储之后继续遍历,直到遍历完成。二分思路分析:注意:该方法适应于已排好序的数组。1、 首先确定数组的中间下标。2、然后让需要查找的数findVal和arr[mid]比较。2.1 findVal>arr[mid] 说明要找的数在mid的右边。2.2 findVal<arr[mid] 说明要找的数在mid的左边2.3 findVal=arr[mid] 已找到,返回//什么时候结束递归。1)找到目标值。2)递归完整个数组。impor原创 2020-06-16 20:34:21 · 110 阅读 · 0 评论 -
江的福从零开始刷算法(基数排序)
思想:放置十个桶,每个桶表示当前判断位数的值。从个位开始到最高位,依次将其放入桶中,因为我们是从个位开始判断的,所以第一轮放置完成,并且将其移入原数组后。再对其进行第二轮(十位)的放置之后,如果所有的数都是两位数的话,就可以将整个数组进行排序了。比如 23 43 56 32 22 54-》32 22 | 23 43 | 54 | 56 -》22 23| 32 |43 |54 56import java.util.Arrays;public class RadixSort { pu原创 2020-06-16 12:01:49 · 110 阅读 · 0 评论 -
江的福从零开始冲算法(归并排序(分治))
归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略(将问题分成一些小的问题,然后递归求解,而治的阶段则将分成的阶段得到的个答案“修补”在一起,即分而治之)先分后合,要学会联想jvm的工作原理,一条分支结束后一步一步出栈,进入下一分支,也就是递归回溯。import java.util.Arrays;public class MergeSort { public static void main(String[] args) { int[] arr ={8,原创 2020-06-15 12:17:20 · 123 阅读 · 0 评论 -
江的福从零开始冲算法(插入排序希尔排序)
插入排序import java.util.Arrays;public class InsertSort { public static void main(String[] args) { long l = System.currentTimeMillis(); int[] arr=new int[8] ; for (int i = 0; i < 8; i++) { arr[i]= (int) (Math.ran原创 2020-06-14 21:49:02 · 98 阅读 · 0 评论 -
江的福从零开始冲算法(冒泡、选排)
首先,了解一下算法的时间复杂度:忽略常数,忽略低次项,忽略系数。冒泡排序:import java.util.Arrays;public class bubbleSort { public static void main(String[] args) { long l = System.currentTimeMillis(); int[] arr =new int[80000]; for (int i = 0; i原创 2020-06-13 17:07:08 · 136 阅读 · 0 评论 -
江的福从零开始冲算法(递归)
首先,了解jvm在方法执行时的逻辑。当程序执行到一个方法时,就会开辟一个独立的空间(栈)。栈中从上往下依次执行完方法。每个空间的局部变量是独立的。递归需要遵守的重要规则。1、执行一个方法时,就创建了一个新保护的独立空间(栈)2、每个栈中的局部变量都是独立的。3、但是如果方法中使用的是引用类型变量(比如数组),每个栈对其是共享的。4、递归必须向退出递归的条件逼近,否则就是无限递归,会出现栈溢出,即stackoverflow error。5、当一个方法执行完毕,或者遇到了return,就会返回,原创 2020-06-13 07:33:27 · 130 阅读 · 0 评论 -
江的福从零开始冲算法(栈,计算器的实现)
一、使用数组模拟栈。package ACStudy;public class StackDemo { public static void main(String[] args) { Stack stack = new Stack(4); stack.push(9); stack.push(2); stack.push(3); stack.pop(); stack.show(); }}.原创 2020-06-09 17:25:54 · 92 阅读 · 0 评论 -
江的福从零开始冲算法(链表、约瑟夫环问题)
链表是有序的列表,但它在内存中是这样存储的。1、链表是以节点的方式来存储。2、每个节点包括data域,next域指向下雨个节点。3、各个节点不一定是连续存储的。4、链表分带头节点的链表和不带头结点的链表。工作案例:public class SIngleLinkedListDemo { public static void main(String[] args) { SingleLinkedList singleLinkedList = new SingleLi原创 2020-06-08 22:30:45 · 121 阅读 · 0 评论 -
江的福从零开始冲算法(队列)
队列用数组模拟队列:import java.util.Scanner;public class Queue { public static void main(String[] args) { int[] Arr =new int[3]; ArrayQueue arrayQueue = new ArrayQueue(Arr); Scanner scanner =new Scanner(System.in); while (s原创 2020-06-07 17:36:52 · 94 阅读 · 0 评论 -
江的福从零开始刷算法(冒泡排序和快速排序)
来排排序吧。冒泡排序:从前到后,相邻比较。相邻元素逆序,则交换。进行数组大小减一次排序。每次确定一个当前比较的最大值。无优化:import java.util.Arrays;public class bubbleSort { public static void main(String[] args) { int[] arr ={2,34,53,32,1,5,6,12}; int temp=0; for (int i = 0; i原创 2020-06-07 10:08:32 · 94 阅读 · 0 评论 -
江的福从零开始冲算法(二维数组&稀疏数组)
这次学习的目的是为了让自己的逻辑更加系统化,希望能如愿以偿。稀疏数组:(五子棋存档)当一个数组的大部分元素为零时,可以使用稀疏数组以减小规模。记录几行几列,多少不同的值,以及行列值。二维数组–>稀疏数组1、遍历原始的二维数组,得到有效数据的个数。sum2、根据sum就可以创建稀疏数组sparsearr int【sum+1】3、将二维数组的有效数据存入到稀疏数组。稀疏数组–>原始的二维数组1、读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,2、在读取稀疏数组后几行原创 2020-06-06 10:14:28 · 123 阅读 · 0 评论