
数据结构算法
刷题过程中关于算法的一些总结
Lavender-csdn
这个作者很懒,什么都没留下…
展开
-
并查集--leetcode
并查集作用:1、合并两个集合2、判断两个点是否在同一个集合中模板:// 找到父节点public static int find(int x) { if(p[x]!=x) p[x] = find(x); return p[x];}1、547. 省份数量以下为java代码:class Solution { static int[] p; public int findCircleNum(int[][] isConnected) { in原创 2021-09-12 12:28:47 · 364 阅读 · 0 评论 -
前缀和+哈希---leetcode
前缀和的基本概念题目:560. 和为 K 的子数组考察S[R]-S[L-1]是否等于k,哈希表的作用可以快速插入一个数、可以快速找到一个数、可以统计数出现的次数。以下为Java代码:class Solution { public int subarraySum(int[] nums, int k) { int result = 0; int sum = 0; //表示前缀和 Map<Integer,Integer> map = new H.原创 2021-09-12 10:44:40 · 214 阅读 · 0 评论 -
树的层次遍历(求树的深度、宽度、之字形打印二叉树等等)
对刷题过程中的牵扯到树的层次遍历的代码总结。1. 基础版,树的层次遍历java代码的实现(利用的是队列):/** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * ...原创 2020-04-01 15:49:12 · 1217 阅读 · 1 评论 -
回溯法
回溯的概念回溯法有“通用解题法”之美称,是一种比枚举“聪明”的效率更高的搜索技术。回溯法是一种试探求解的方法:通过对问题的归纳分析,找出求解问题的一个线索,沿着这一线索往前试探,若试探成功,即可得到解;若试探失败,就逐步往回退,换其他路线再往前试探。回溯法可以形象地概括为“向前走,碰壁回头”,若再往前走不可能得到解,就回溯,退一步另找线路,这样可以省去大量的无效操作,提高搜索效率。...原创 2020-03-31 14:28:29 · 2964 阅读 · 0 评论 -
贪心算法
概述贪心算法又称为贪婪算法,是一种着眼局部的简单而适应范围有限的优化策略。当一个问题具有最优子结构性质时,贪心算法有时比动态规划法求解更为简单有效。贪心算法在求解最优化问题时,从初始阶段开始,每个阶段总是做一个使局部最优的贪心选择,不断把问题转化为规模更小的子问题。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是局部最优选择,这样处理,对大多数优化问题来说能得到最优解,但是并不总是这...原创 2020-03-28 16:47:00 · 1035 阅读 · 0 评论 -
约瑟夫问题(模拟)----python、C++、Java
问题来历据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k...原创 2020-03-28 11:08:22 · 445 阅读 · 0 评论 -
实现排列组合
排列组合是组合数学的基础,从n个不同元素中任务m个,约定1<m<=n,按任意一种次序排成一列,称为排列,其排列种数记为A(n,m)。从n个不同元素中任取m个(约定1<m<n)成一组,称为一个组合,其组合种数记为C(n,m)。计算A(n,m)与C(n,m)只要简单进行乘运算即可,要具体展现出排列的每一列与组合的每一组,绝非轻而易举。我们应用递归设计来具体实现排列与组合...原创 2020-03-28 10:47:58 · 604 阅读 · 0 评论 -
递归
分治策略当求解一个规模很大的问题的时候,可以考虑分解,即把原问题分解为若干个较小规模的问题处理,以便各个击破,分而治之,这就是分治的设计思想如果求解的问题可以分解为k个子问题,且这些子问题都是可解的,并可利用这些子问题的解求出原问题的解,这种分治是可行的。递归递归是一个过程或者函数在其定义中直接或者间接调用自身的一种方法,就是利用系统堆栈,实现函数自身调用或者互相调用的过程。在通往...原创 2020-03-27 22:15:54 · 138 阅读 · 0 评论 -
动态规划
动态规划是算法中的难点与重点,面试的时候应该也会经常遇到。动态规划是运筹学的一个分支,是求解决策过程最优化的教学问题,其处理对象是多阶段决策问题。这种问题一般可以分解成为若干个相互联系的阶段,在每一个阶段都要做出决策,形成一个决策序列,该决策序列也成为一个策略。对于每一个决策序列,可以在满足问题的约束条件下用一个数值函数(即目标函数)衡量该策略的优劣。多阶段决策问题的最优化目标是获取导致问题最优值...原创 2020-03-26 23:31:23 · 388 阅读 · 0 评论 -
递推典型算法:猴子爬山,跳台阶,爬楼梯(牛客网)、魔法深渊(快手)----Python、Java
递推算法的基本思想是把一个复杂的、庞大的计算过程转化为简单过程的多次重复,其首要问题是得到相邻的数据项之间的关系,即递推关系。以猴子爬山为例。1.问题的提出一个顽猴在一座有30级太假的小山上爬山活跃,猴子上一步可跳1级或者3级,试求上山的30级台阶有多少种不同的爬法2.简单递推设计这一问题实际上是一个整数有序可重复拆分的问题。试应用数组递推求解,设爬k级台阶的不同爬法为f(k)种。...原创 2019-11-08 10:02:42 · 9681 阅读 · 1 评论