随笔分类 - 算法
摘要:主要问题 1.查找有无 set set (实现collection接口) 实现类: hashset(hashcode()和equals()保证唯一性) treeset(对象排序)(红黑树) linkedhashset(双向链表和哈希表) 底层实现:hashmap 对应value是一个静态object
阅读全文
摘要:应用及优点: 1.可用于解决数组或者字符串的子元素问题。 2.用单循环代替了嵌套循环问题,时间复杂度低。 3.用双指针维护动态窗口。 相关算法题: Longest Substring Without Repeating Characters无重复最长子串 Find All Anagrams in a
阅读全文
摘要:class Solution { public boolean isRectangleOverlap(int[] rec1, int[] rec2) { if(rec1[2]<=rec2[0]||rec1[0]>=rec2[2]||rec1[1]>=rec2[3]||rec1[3]<=rec2[1]
阅读全文
摘要:class Solution { public int subarraySum(int[] nums, int k) { HashMap<Integer,Integer> h=new HashMap<>(); int sum=0; int count=0; h.put(0,1); for(int i=0;i<nums.length;i++){ sum+=nums[i]; if(h.contains
阅读全文
摘要:import java.util.ArrayList; public class Solution { public ArrayList > FindContinuousSequence(int sum) { ArrayList> res=new ArrayList> (); if(sum==0)return res; int left=...
阅读全文
摘要:二叉树深度 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree 二叉树反转 226. Invert Binary Tree 二叉树是否相同 100. Same Tree 101. Symmetric Tree 完全二
阅读全文
摘要:class Solution { public boolean wordBreak(String s, List wordDict) { //动态规划 s[i]以i结尾的子串是否满足题干条件 boolean [] dp=new boolean[s.length()]; Set set1=new HashSet(); //把w...
阅读全文
摘要:class Solution { public int lengthOfLongestSubstring(String s) { //滑动窗口 Set set1=new HashSet(); int ans=0;int i=0;int j=0; int n=s.length(); while(i<n&...
阅读全文
摘要:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ //递归 回溯 class Solution {...
阅读全文
摘要:java容器有两类框架,一类是collection,一类是map collection接口 Map接口 object中的类 散列表 树对应的容器类 hashmap解决冲突的方法 1.再哈希 2.链表法 底层实现原理 数组+链表 哈希表 数组+链表+红黑树 技术本质 数据存储(数据结构+算法) 数组:
阅读全文
摘要:01背包 完全背包 多重背包 混合背包 二维费用背包 分组背包 背包问题求方案数 求背包问题方案 有依赖的背包问题 跳台阶 f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, f(n) = f(n-1) + f(n-2) 矩形覆盖 f(n) = f(n-1) + f(n-
阅读全文
摘要:动态规划状态方程 二维数组 dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i]); i=1....n;j=0......v 一维数组 dp[j]=max(dp[j],dp[j-c[i]]+w[i]); i=1....n,j=v....0
阅读全文
摘要:1.将排序序列造成一个大顶堆(升序); 2.与末尾元素交换,此时末尾为最大值; 3.剩下的值执行重复执行上述操作。 从最后一个非叶子节点开始,
阅读全文
摘要:class Solution { public void back(int n,ArrayList nums,List> output,int first){ if(first==n)output.add(new ArrayList(nums)); for(int i=first;i> permute(int[] nums) { int n...
阅读全文
摘要:class Solution { public List> threeSum(int[] nums) { //这题采用双指针解法。 //首先对数组排序。 //然后固定第一个值i,再定义两个指针,一个low指针指向i的下一个数,一个high指针指向最后一个数 //通过三个数的和判断。因为low和high在同一层移动,所以时间复...
阅读全文
摘要:从arr[1,n]n个数中,找到最大的K个数。 1.排序 时间复杂度 n*lgn 2.局部排序 冒泡 每冒一次泡,找到一个最大值,直到k个。时间复杂度n*k。 堆 只找到topk,不排序topk。 先用k个元素生成一个小顶堆,这个小顶堆用于存储当前最大的k个元素; 接着,从第k+1个元素开始扫描,和
阅读全文
摘要:内部排序(内存) 插入排序(直接插入 希尔排序) 选择排序(简单选择 堆排序) 交换排序(冒泡 快排) 归并排序 基数排序 外部排序(外部存储) 主要考虑时间复杂度,用空间换时间(缓存)
阅读全文
摘要:递归 程序每执行到一个方法时,会开辟一个独立的空间(栈)。 方法的局部变量独立。 方法中使用的是引用类型变量,则会共享该引用类型的数据。多个栈共享同一个数组。 递归必须向退出递归的条件逼近。否则栈溢出。 应用场景 数学问题:8皇后问题,汉诺塔,迷宫,秋和篮子 算法问题:快排,归并排序,二分查找,分治
阅读全文

浙公网安备 33010602011771号