![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
qq_41177601
这个作者很懒,什么都没留下…
展开
-
java api
目录数组和链表转化数组和链表转化一维数组(流转化)Integer[] res = new Integer[list.size()];list.toArray(res);int [] ints;ints = Arrays.stream(res).mapToInt(Integer::valueOf).toArray();return ints;二维数组ArrayList<int[]> reslist = new ArrayList<>();return r原创 2020-11-16 09:51:02 · 60 阅读 · 0 评论 -
并查集
目录并查集模板题目账户合并并查集模板题目账户合并class Solution { public List<List<String>> accountsMerge(List<List<String>> accounts) { DSU dsu = new DSU(); Map<String, String> emailToName = new HashMap(); Map<Stri原创 2020-10-22 14:24:21 · 70 阅读 · 0 评论 -
双指针
目录双指针模板题目三数之和双指针模板题目三数之和注意重复元素判断,边界问题 public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); int len = nums.length; int left = 0,right = 0; List<List<Integer>> res = new Array原创 2020-10-22 09:00:28 · 70 阅读 · 0 评论 -
动态规划总结
目录动态规划综述一维思路题目最大连续子数组和最长上升子序列二维动态规划综述一维思路题目最大连续子数组和-注意边界条件,res赋值是nums[0],数组长度为1时需要单独提出。public int maxSubArray(int[] nums) { if (nums.length==1)return nums[0]; int res = nums[0]; int[] dp = new int[nums.length]; dp[0]原创 2020-10-20 21:10:08 · 69 阅读 · 0 评论 -
搜索算法总结
目录DFS思路模板题目岛屿数量岛屿最大面积打家劫舍3BFS思路模板题目二进制矩阵最短路径DFS思路等价于递归+回溯(编写简单)或者栈迭代(空间复杂度大)模板主函数定义:path (需要回溯)res(注意添加path需要new)flag(需要回溯,标记是否经过,一般都要有,减小时间复杂度同时避免结果集重复)grid,row,col等(初始数据及做出的选择)dfs(path,res,flag,grid,做出的选择)递归函数定义: dfs(path,res,flag,grid,做原创 2020-10-06 11:04:36 · 331 阅读 · 0 评论 -
二分法汇总
标准左边界(返回索引/第一个大于target的索引(包括数组长度))public static int searchInsert(int[] nums, int target) { if (nums.length==1) return nums[0]>=target?0:1; int left = 0,right = nums.length-1; while (left<=right){ int原创 2020-10-05 12:04:05 · 70 阅读 · 0 评论 -
栈汇总
计算器(栈)思路数字入栈左括号入栈右括号输出栈顶元素,直到遇到左括号(左括号出站,但不输出)其他运算符,不断去除所有运算优先级>=当前运算符的运算符,输出。最后新的符号入栈。栈中剩下的符号依次输出。代码// 下面代码摘自笔者 NOIP2005 等价表达式std::string convert(const std::string &s) { // 把中缀表达式转换为后缀表达式 std::stack<char> oper; std::string原创 2020-10-02 20:16:54 · 56 阅读 · 0 评论 -
排序总结
排序快排思路选取pivot划分,根据选取的pivot将数组划分成小于pivot的部分和大于pivot的部分递归求解小于pivot和大于pivot的部分划分方式这种方式会将数组划分为小于等于和大于等于pivot 的左右两部分,并且每一部分都不会为空,因为每次递归的时候数组的长度都会变小从而确保不会死循环。如果每次都选取数组最左边的元素来作为pivot,当数组已经是有序的时候每次递归数组的长度只会减少一,导致时间复杂度变为 O(n2)O(n2),这可以通过选中间元素作为pivot或者原创 2020-10-02 15:37:01 · 81 阅读 · 0 评论