
程序设计(算法与数据结构篇)
学习算法,以应对程序设计竞赛
Handling[韩镇江]
一名游戏研发者,目前就业于网易互娱,游戏服务器开发,南阳理工学院腾飞游戏开发工作室17级负责人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
栈与队列:以队列之性质,完栈之功能!
利用队列实现栈话不多说,直接上思路直截了当,上代码话不多说,直接上思路所需条件:两个队列思路:队列间相互调动元素法我们举例讲解:操作: push(1) , push(2) , pop(), push(3) , pop(), push(1) ,按照栈的机制应该是(置顶而下):12,11,3,11,1,1我们使用队列模拟这种机制:入栈:入...原创 2020-03-20 18:37:22 · 209 阅读 · 0 评论 -
动态规划:记录结果再利用的 “动态规划”
2.3.1 记忆化搜索与动态规划01背包问题题目:有n 个重量和价值分别为 wi,vi的物品,从这些物品中挑选总重量不超过 W 的物品,求所有挑选方案中价值总和的最大值。const vector<pair<int,int>> thingVec{{2,3},{1,2},{3,4},{2,2}};const int N=4;const int W=5;//从第i...原创 2020-03-03 16:38:25 · 309 阅读 · 0 评论 -
贪心法: 一往直前,贪心法!
//在已有的硬币金额及数量 支付 指定人民币,获取其最小花费金币数//思路策略:尽量选大硬币来支付// 1. 使用coinDenominations保存硬币面额// 2. 循环递减硬币面额, 每次循环选择 金币面额数量与花费钱数所能花费的金币面额数量的最小值(int payCoinCount=min(coinMap.at(coinDenominations.at(i)),payRMB...原创 2020-02-19 11:11:10 · 412 阅读 · 0 评论 -
堆,优先队列,二叉搜索树,平衡二叉树与并查集: 加工并存储数据的数据结构
加工并存储数据的数据结构堆堆的时间复杂度:堆的实现标准库优先队列需要用到优先队列的题目Expedition(POJ 2431)Fence Repair二叉搜索树堆能够高效的利用二叉树解决 类似于优先队列操作的问题的数据结构叫 堆优先队列:只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大...原创 2020-03-01 07:05:41 · 685 阅读 · 0 评论 -
链表面试题带解析(超全超赞)
链表面试题原创 2020-07-29 15:25:19 · 754 阅读 · 0 评论 -
Leetcode : 两数,三数,四数之和问题剖析
两数,三数,四数之和问题剖析博主有话要吐槽话不多说,开始剖析问题讲论解法总结博主有话要吐槽话不多说,开始剖析问题你一定遇到以下问题,对其头脑发热:题目的目的: 给定一个序列(未排序),多数相加等于特定值,找出其所有符合条件的所有 多数 序列。讲论解法我们讲解以下 双数 的解法: 左右指针法(双指针)2. 左指针 L + 右指针 R 索引的序列元素值等于给定值,则记录其序列,并++L, – R 操作,缩短区间准备下一次查找 相加的值等于 目标值的 L,R 指向元素3. 左指原创 2020-07-21 08:27:10 · 208 阅读 · 0 评论 -
Leetcode 刷题归类大全
博客分类汇总数据结构与算法队列与栈堆,优先队列,二叉搜索树,平衡二叉树与并查集链表查找算法排序算法递归与循环深度优先搜索与广度优先搜索CPPUnityLinux程序员中医养生数据结构与算法队列与栈栈与队列:如何闲情雅致地理解栈实现队列?栈与队列:以队列之性质,完栈之功能!堆,优先队列,二叉搜索树,平衡二叉树与并查集堆,优先队列,二叉搜索树,平衡二叉树与并查集: 加工并存储数据的数据结构...原创 2020-04-28 12:02:08 · 684 阅读 · 0 评论 -
能力与素养恬阔与平时,欣赏与 Offer 展露在未来!
能力与素养恬阔与平时,欣赏与 Offer 展露在未来!1. 牢固的基础知识2. 高质量的代码3. 解决问题的思路4. 优化时间与空间效率5. 工作中面试中的各项能力。1. 牢固的基础知识面试官通常采用 概念题、代码分析题、以及编程题这 3 种常见题型来考察应聘者对某一编程语言的掌握程度。数据结构是面试考察重点。 其中 链表是面试题中使用频率最高的一种数据结构。 面试官加大难度的话就可能选用与 树(二叉树)相关问题,其中 栈 与 递归调用密切相关,队列在遍历时也会用到。算法是面试官喜欢考察的另一个重点原创 2020-05-18 22:48:34 · 537 阅读 · 0 评论 -
如何刻意的成为一个二叉树的孩子:二叉树的子结构问题
匹配二叉树的子结构问题概述 与 思路剖析问题概述思路剖析编写高质量的代码 与 手撕代码展示编写高质量代码的注意点:手撕代码问题概述 与 思路剖析问题概述匹配二叉树的子结构,(子结构为空树也视为不匹配)如下图所示:简单的说,我们将 二叉树与 子结构树 形象化后,子结构树 可以很清楚的看成 二叉树的一部分,且完全匹配(值相等,链接也相同)思路剖析由于是二叉树匹配 子结构,我们需要第...原创 2020-05-05 10:24:37 · 360 阅读 · 0 评论 -
合并两个排序链表问题 不会的有这篇文章就够了!!!
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2020-04-30 23:35:19 · 291 阅读 · 0 评论 -
逆转链序 !!! 反转链表思路解析
逆转链序 反转链表题目分析 与 解题思路反转链表代码反转链表题目分析 与 解题思路题目: 将链表的序列反转,并返回反转后的链表头部。解题思路分析:我们可以看一下图:我们首先将 1 节点与 2 节点的链断掉,使 1 节点与 3 节点连接,之后使 2 节点作为链表的头节点与 1 节点相连,这样就能达到逐步遍历 反转,直到 1 节点后不再有节点相连(1节点作为链表尾巴)即可。我们需要...原创 2020-04-29 23:59:30 · 568 阅读 · 0 评论 -
快慢指针法巧解链表中环的入口节点
快慢指针法巧解链表中环的入口节点问题描述分析 与 快慢指针巧解思路1. 求链表中环的入口节点2. 快慢指针解题思路快慢指针解题代码问题描述分析 与 快慢指针巧解思路1. 求链表中环的入口节点如果一个链表中包含环,如何找出环的入口呢?例如,在图示的链表中,环的入口节点是节点 3。2. 快慢指针解题思路解决这个问题的第一步应该是如何确定一个链表是否有环:确认链表中是否有环,我们仅仅需要...原创 2020-04-29 14:43:38 · 332 阅读 · 0 评论 -
快慢指针法巧解题目:链表中倒数第 k 个节点
快慢指针巧解链表中倒数第 k 个节点问题链表题目与快慢指针法介绍快慢指针解题代码实现样例测试:链表题目与快慢指针法介绍链表中倒数第k个节点:题目: 输入一个链表,输出该链表中倒数第 k 个节点。 为了符合大多数人的习惯,本题目从 1 开始计数,即链表的尾节点是倒数第 1 个节点。解决这个问题,我们都会想到以下几种方案:方案1 :为了得到倒数第 k 个节点,我们先走到链表的尾巴部位,之后再...原创 2020-04-28 21:39:09 · 435 阅读 · 0 评论 -
巧解数组分区问题:双指针交换法
双指针交换法数组分区与双指针交换法介绍编写进行分区操作的双指针交换法,考虑可扩展性数组分区与双指针交换法介绍数组分区的概念:其实就是指将数组的元素分为两部分,比如:分为偶数与奇数,分为非数字字符与数字字符,分为质数与非质数,分为大于 指定值的数,和小于指定值的数。双指针交换法介绍:由于需要分区,我们呢往往需要最快的分区速度,而仅需一次遍历就能完成分区操作,无需移动数组排列的双指针交换法...原创 2020-04-28 15:16:13 · 573 阅读 · 0 评论 -
最快删除指定链表节点 :Time = O(1)
最快删除指定链表节点删除链表节点的问题删除链表节点的问题题目:在 O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在 O(1)时间内删除该节点,链表节点和函数的定义如下:struct...原创 2020-04-27 23:47:26 · 419 阅读 · 0 评论 -
写给大忙人看的回溯法
如果你在匆匆忙忙地学习回溯,此不负您愿一级目录二级目录三级目录一级目录二级目录三级目录原创 2020-04-10 09:19:28 · 234 阅读 · 0 评论 -
“快速排序” 就应该这样快速理解
快速排序三级目录快速上手代码三级目录快速上手代码测试用例:功能测试:{9,3,4,5,6,2,1}边界值测试:{1},{2,1}重复值测试:{1,1,2,3,1,3,1,9,9,7,6,6}性能测试:{输入上千上万测试用例,进行压力测试}using sz=vector<int>::size_type ;int myParition(vector<int>...原创 2020-03-30 20:43:05 · 266 阅读 · 0 评论 -
面试官期待的实用斐波那契解法
面试官期待的实用斐波那契解法单说斐波那契数列挑剔的面试官不会喜欢的解法,效率很低面试官期待的解法1:记忆化数组优化重复计算面试官期待的解法2:直接利用循环过程累加计算单说斐波那契数列我们熟悉的斐波那契数列的问题即:写一个函数,输入 n , 求斐波那契数列的第 n 项 。斐波那契数列的定义如下 0 n=0f(n) = ...原创 2020-03-21 10:53:34 · 345 阅读 · 0 评论 -
栈与队列:如何闲情雅致地理解栈实现队列?
利用栈实现队列直截了当讲思路躁人之词多,话多伤气 ,我就不废话了,上代码直截了当讲思路思路:我们了解的队列操作思路(主要讲出队入队操作)例子:push(1) , push(2) , pop(), pop(), push(3)queue: 1queue: 1 , 2queue: 2queue: emptyqueue: 3如何利用栈来模拟队列的操作...原创 2020-03-20 20:44:32 · 181 阅读 · 0 评论 -
选择排序法
选择排序一 选择排序了解二 选择排序伪代码实现三 选择排序 c++ 代码实现四 选择排序时间复杂度与稳定性分析。一 选择排序了解选择排序法是一种非常直观的算法,他会在每个计算步骤中选出一个最小值,进而完成排序流程图:二 选择排序伪代码实现insertionSort(A,N)//包含N个元素的0起点数组A{ for i 从 1到 N-1 { V = A[i] j=...原创 2020-03-03 16:42:14 · 243 阅读 · 0 评论 -
冒泡排序法
冒泡排序法一 冒泡排序了解二 冒泡排序伪代码实现三 冒泡排序 c++ 代码实现四 插入排序时间复杂度与稳定性分析。一 冒泡排序了解冒泡排序法就是让数组元素像水中的气泡一样逐渐上浮,进而达到排序的目的。流程图:二 冒泡排序伪代码实现bubbleSort(A,N){ flag=1 i=0; //未排序部分的起始下标,因为每次遍历排序都会增加一个元素到排序部分 wh...原创 2019-12-23 12:01:57 · 746 阅读 · 0 评论 -
插入排序法
插入排序一 插入排序了解二 插入排序伪代码实现三 插入排序 c++ 代码实现四 插入排序时间复杂度与稳定性分析。一 插入排序了解插入排序法的思路与打扑克排列手牌的方法很像,比如我们单手拿牌,然后要将牌从左至右,由小到大排序。此时我们需要将牌一张张抽出来,分别插入到前面已经拍好序的手牌的适当位置,重复这个操作直到插入最后一张牌,整个排序就完成了。流程图:二 插入排序伪代码实现insert...原创 2019-12-23 11:26:19 · 316 阅读 · 0 评论 -
分治法:利用二分查找优化O(n^4)指数时间复杂度问题
#include <iostream>#include <vector>#include <algorithm>using namespace std;//二分查找 遵循迭代器原则,end迭代器指向最后一个元素的下一个位置,beg迭代器指向需要查找范围的第一个元素bool myBinary_search(const vector<int>...原创 2020-03-03 16:44:39 · 715 阅读 · 0 评论 -
深度优先搜索:Lake Counting (POJ No.2386)
#include <iostream>#include <vector>#include <algorithm>#include <stack>using namespace std;#define MAX_N 2147483647/* Lake Counting(POJ No.2386) * 有一个大小为N*M的院子,雨后堆积了水...原创 2020-03-03 16:43:48 · 254 阅读 · 0 评论 -
深度优先搜索:部分和问题
#include <iostream>#include <vector>#include <algorithm>#include <stack>#define MAX_N 2147483647using namespace std;/*深度优先搜索 * 搜索理解:从某个状态开始,不断地转移状态直到无法 转移,然后回退到前一步的状态,...原创 2020-03-03 16:41:01 · 257 阅读 · 0 评论 -
宽度优先搜索:迷宫的最短路径问题
vector<pair<int,int>> transferDir{{0,1}, {0,-1}, {1,0}, {-1,0}};using p=pair<int,int>;int INF=10000000;//开始点为's',终点为'd',障碍物为'#',其余均为'*'int MinStep...原创 2020-03-03 16:40:24 · 397 阅读 · 0 评论 -
思考与想象:POJ的题目Ants(蚂蚁爬杆问题)
#include <iostream>#include <vector>using namespace std;//// Created by Handling on 2020/1/26.//int max_time=0;int min_time=0; //max_intvoid solve(const vector<int> &iv...原创 2020-03-03 16:39:59 · 603 阅读 · 0 评论 -
程序设计常用技巧 (未完成)
程序设计常用技巧1. 尺取法 ( Subsequence POJ No.3061 )1. 尺取法 ( Subsequence POJ No.3061 )题述:给定长度为 n 的数列整数 a0,a1,。。。。an-1 以及整数 S ,求出总和不小于 S 的连续子序列的长度的最小值。如果解不存在,则输出 0。...原创 2020-03-03 16:36:27 · 206 阅读 · 0 评论 -
分治法:不光是查找值!“二分搜索” (未完成)
二分搜索法:是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。在程序设计竞赛或者刷题网站上,我们常常会见到,二分搜索法和其他算法结合的题目。下面我们来看几道二分搜索法的问题。1. 从有序数组中查找某个值( lower_bound )题述:给定长度为 n 的单调不下降数列 a0,------an-1 和一个数 k,求满足 ai>=k 条件的最小的 i。不存在的情况下输出 n。...原创 2020-03-03 16:07:25 · 307 阅读 · 0 评论 -
算法题:一起来挑战GCJ
一起来挑战GCJ学习博客:书本知识加上自身理解更好的描述分享与大家????2.7.1 Minimum Scalar Product题述: 有两个向量 v1={x1,x2,x3,…xn}和 v2 ={y1,y2,y3,y4…yn},允许任意交换 v1和v2各自的分量的顺序。请计算 v1 和 v2的内积x1y1+。。。+ xnyn 的最小值。题解:@1:如果我们先固定 v1的排列顺序,之后枚举 ...原创 2020-03-01 14:28:52 · 460 阅读 · 0 评论