算法
David Wolfowitz
愿在最好的青春做成最想做的事
展开
-
分治算法【一】—— 基本概念与思路
1)分治算法【二】——应用:Leetcode169:多数元素一、什么是分治算法?分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。二、分治算法的基本思想?当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些原创 2020-07-05 00:05:23 · 750 阅读 · 0 评论 -
数据结构-动态规划【1】- 基本的思路和实例分析
动态规划(dynamic programming) 是通过组合子问题的解来求解原问题,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的的子子问题。动态规划在这个过程中对每一个子问题只求解一次,将其保存在一个表格中,从而无需每次求解一个子问题时都重新计算,避免不必要的计算工作。一、基本概念用途:动态规划通常用来求解最优化问题(多阶段决策问题)。这类问题可以有很多可行解,每一个解都有一个值,我们希望寻找具有最优解(最大值或最小值)的解,我们称这样的解为问题的一个最优解,而不是最优解,因为可能有多个解原创 2020-06-24 22:09:25 · 353 阅读 · 0 评论 -
数据结构-栈(stack)的应用【1】
题目Trapping Rain WaterGiven n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.思路:(1)首先给出暴力求解的方法:(这种方法我提交的时候是时间超出的,但我们后面去改进的,还是很有用的)这个思路的关键点就是我们在每个位置去计算出该位置原创 2020-05-27 21:49:14 · 253 阅读 · 0 评论 -
数据结构-链表的应用【2】
19. Remove Nth Node From End of List题目Given a linked list, remove the n-th node from the end of list and return its head.简单来说就是给定一个链表, 叫你删除从后往前数第N个节点,然后返回。思路我开始想的时候觉得这题挺简单的, 的确是, 但是还是要注意一些细节.首先...原创 2020-05-07 00:27:12 · 126 阅读 · 0 评论 -
数据结构- 链表的应用【1】
复制带随机指针的链表题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果...原创 2020-05-05 23:41:35 · 652 阅读 · 0 评论 -
DFS和BFS
一、DFS(深度优先搜素算法)1、基本概念深度优先搜索算法(depth first search, 简称dfs) 是一种用于遍历或搜索树或图的算法。沿着数的深度遍历树的节点,尽可能深的搜索树的分支。当节点v所在边都已被探寻或者在搜索时节点不满足条件, 搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有满足条件的所有节点被访问为止。2、算法思路深度优先遍历图的方法是,从...原创 2020-04-30 00:23:09 · 2674 阅读 · 0 评论 -
插入排序与分治算法
一、插入排序问题描述:给一个n个数的输入序列<a1, a2, … ,an>,希望得到的输出序列位<a1’, a2’, … , an’>, 满足a1’ <= a2’ <= … <= an’。思想:插入排序的思想就相当于排序扑克牌。开始时,我们的手中是没有扑克牌的,并且桌上的扑克牌的牌面向下,我们每次从桌上拿走一张扑克牌,并将他插入到手中正确的位置,为...原创 2019-10-20 16:46:12 · 726 阅读 · 0 评论 -
二分法查找
二分法(Bisection method)即一分为二的方法。设[a, b]为定义的区间, 我们先寻找到其中间值的index,判断其对应的value与target的关系,例如:我们要找一个target在一个递增有序数组中的位置,我们先求出mid对应的值T,进行比较,如果T大于target,我们就将b赋值mid - 1, 否则将a赋值mid,然后依次类推(这相当于一个递归)。这样一个算法的时间复杂度...原创 2019-09-19 21:56:24 · 2958 阅读 · 0 评论