![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法很美
文章平均质量分 73
Serayah
菜地不知所措
展开
-
动态规划之寻找最长上升子序列
动态规划之寻找最长上升子序列暴力破解//最长子序列的长度之暴力法public class Main2 { static int maxl=0; public static void main(String[] args) { System.out.print(f("42315")); } private static int f(String s) { for(int j=0;j<s.length();j++) { int l=1; char原创 2021-04-16 21:47:30 · 154 阅读 · 0 评论 -
动态规划
动态规划1、动态规划代表一类问题(最优子结构或子问题最优解)的一般解法,是设计方法或者策略,不是具体算法。2、本质是递推,核心是状态转移的方式,写出dp方程。在展开的子问题中存在重叠的情况。3、形式:记忆型递归 递推4、01背包问题有n个重量和价值分别为wi、vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有方案中价值总和的最大值。(一个物品是拿或者不拿:0或者1)非记忆型递归//01背包问题public class Main { static int n=4; static原创 2021-04-13 23:10:47 · 119 阅读 · 0 评论 -
用dfs思想解决的一些问题
用dfs思想解决的一些问题数独游戏算法思想:利用dfs一条路走到黑(不满足条件)的思想,在每一个空位置依次填1-9九个数字,检验其合理性,若出现矛盾就回溯;若能走到底,则直接返回到最高层。import java.util.Scanner;public class dfs { public static void main(String[] args){ Scanner sc=new Scanner(System.in); //数独的整个方格 char[][] table=new ch原创 2021-03-11 23:30:13 · 505 阅读 · 0 评论 -
(算法很美)排序小总结
一、桶排序1、通过 “分配”和 “收集”过程来实现排序;设计k个桶(编号0-k-1),然后n个输入数分布到各个桶中去,对各个桶中的数进行排序,然后按照次序把各个桶中的元素列出来即可。2、实现需要链表(后面到链表时再写代码)3、桶排序算法复杂度分析:如果数据比较均匀则复杂度为O(N)如果数据全部都分布到了一个桶里,那么用快排,时间复杂度为NlgN设M为桶的数量,则时间复杂度为O(N+N(lgN-lgM)) (O(N+C)).4、适用于数据较为均匀的情况二、基数排序1、从低位开始,根据其最低位原创 2021-03-08 23:56:25 · 122 阅读 · 0 评论 -
查找和排序 堆排序和计数排序
查找排序 堆排序一、用数组表示一棵二叉树1、一个下标为 节点左儿子是 ,父节点是 。2、先序、中序、后序遍历。 //用数组表示的二叉树 //先序遍历 public static void preOrder(int[] A,int i){ if(i>=A.length){ return; } System.out.print(A[i]); preOrder(A,2*i+1);//遍历左子树 preOrder(A,2*i+2);//遍历右子树 } //中序遍历原创 2021-03-03 19:15:26 · 122 阅读 · 0 评论 -
(算法很美)查找和排序第三部分
有关快排和归并的一些题目宋晓童 2019091613030一、分治模式的完美诠释:归并排序1、归并排序主要要解决合并的问题 //归并排序 //将数组A的q到r进行归并排序 public static void part1(int[] A,int p,int r){ if(p<r){ int mid=p+((r-p)>>1);//加减的优先级高于左右移 part1(A,p,mid);//对左边进行归并排序 part1(A,mid+1,r);//对原创 2021-02-22 19:29:08 · 104 阅读 · 0 评论 -
(算法很美)查找和排序第二部分
(算法很美)查找和排序第二部分3.1 分治法(10种排序算法要熟练掌握)一、分治法1、分治法:将原问题划分为若干个规模较小的而结构与原问题一致的子问题;递归地解决这些子问题,然后再合并其结果,就得到问题的解。2、分治算法优点之一:容易确定运行时间3、分治算法在每一层都有三个步骤:(1)分解:将原问题分解成一系列子问题(2)解决:递归地解各子问题。若子问题足够小,则直接有解(3)合并:将子问题的结果合并成原问题的解4、使用分治的目的:(1)解决问题 (2)提升效率3.2 快速排序算法快原创 2021-02-20 13:45:24 · 146 阅读 · 1 评论 -
(算法很美)查找和排序学习第一部分
(算法很美)查找和排序学习第一部分2.1 什么是递归一、目标:1、对递归,建立起感觉2、学会评估算法性能3、能大致预估程序的执行时间二、递归设计经验1、找重复(更小规模的子问题)(最重要,父问题转化为子问题)2、找重复中的变化量->参数(如果感觉递归无法进行下去,很有可能是缺参数了)3、找边界->设计出口三、练习策略1、循环改递归2、经典递归3、大量练习,总结规律,掌握套路4、找到感觉,挑战高难度四、三种思维方式1、切蛋糕思维(划分方法):求阶乘、打印i到j、数原创 2021-02-15 00:23:14 · 248 阅读 · 0 评论