数据结构及算法
W.J.Z
这个作者很懒,什么都没留下…
展开
-
百万行级排序算法比较与研究
问题描述      老板最近给了我一个空间数据压缩包,压缩包中包含10个文件,每一个文件中包含ID、X坐标、Y坐原创 2018-09-16 15:50:15 · 820 阅读 · 0 评论 -
O(n)复杂度:将二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。算法:层次遍历二叉树,需要记录每层节点数目以及初始化头节点。 vector<vector<int> > Print(TreeNode* pRoot) { vector<int> single; vector<vector<...原创 2018-10-29 13:14:16 · 540 阅读 · 0 评论 -
高效简洁判断对称二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。算法:对比相应的节点,如果不相同则退出。class Solution {public: bool isSymmetrical(TreeNode* pRoot) { if(pRoot==NULL) return true; ...原创 2018-10-29 13:46:08 · 506 阅读 · 0 评论 -
巧妙计算数组每一个元素出现的次数
给定一个数组,计算每一个元素出现的次数。算法思想:空间换时间,直接对元素对应的下标进行计算。问题变形:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。int MoreThanHalfNum_Solution(ve...原创 2018-10-26 17:56:23 · 1945 阅读 · 0 评论 -
判断栈的压入、弹出序列是否合法
问题描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)算法 bool IsPopOrder(vector&lt;int&gt; ...原创 2018-10-24 18:37:53 · 515 阅读 · 0 评论 -
有选择读取word表格中的数据并写入excel文件中
最近学院要举行科技报告会活动,许多同学积极参与,交了许多报名表到我这里,而我需要将这些信息进行汇总,整理出一个excel表格,看着一个个word文件放在我的工作文件夹中头发发麻,这一个个的整理好麻烦,不但速度慢而且容易出错,我就想用编程自动替我读取数据并写入目标文件。结果还真让我写成了,下面一一讲解步骤:问题描述:如下图所示,我需要提取姓名、学号、合作者、学院及专业、联系方式、指导老师、...原创 2018-10-31 21:37:23 · 7337 阅读 · 1 评论 -
简单实现k-means算法
前言最近老师布置的作业中含有Borderline-SMOTE算法,而k-means算法是其基础,我需要将论文中的模型改造为自己的模型,从论文中的伪代码写出自己的框架,下面是自己动手热身实现的第一版k-means算法,很简单,如有错误请多多指教。k-means算法该算法很简单,开始时随机选取k个核心,利用欧式距离不断将数据集的样本进行分类,直至核心不在变化或者收敛为止。本篇博客重点在于...原创 2018-12-04 10:02:06 · 2485 阅读 · 0 评论 -
动态规划
简要总结了动态规划的特点及解题步骤,本文中算法是从顶到底进行的,各位可以试着写出从底部到顶部的状态转移公式并写出代码加深理解。原创 2019-03-24 20:21:04 · 218 阅读 · 0 评论 -
公式求解
问题:”Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples:举例:[“2”, “1”, “+”, “3”,...原创 2019-03-29 19:21:39 · 475 阅读 · 0 评论 -
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
Given n points on a 2D plane, find the maximum number of points that lie on the samestraight line.原创 2019-04-10 12:09:52 · 224 阅读 · 0 评论 -
动态规划 &&网易合唱团笔试
问题描述:有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?...原创 2019-03-28 16:44:23 · 205 阅读 · 0 评论 -
非递归求而二叉树最短路径深度
原创 2019-03-28 21:00:59 · 265 阅读 · 0 评论 -
大整数相乘
问题描述有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。解决思路先进行相乘,然后进行存储,最后考虑进位。#include<iostream>#include<string>#define MAX 1000using namespace std;int main(){ string s...原创 2019-04-11 19:37:37 · 270 阅读 · 0 评论 -
2018拼多多笔试最大乘积问题(与网易合唱团动态规划相似)
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)动态规划算法#include<iostream>#include<vector>using namespace std;#define MAX 10000inline long long max(long long a,long lo...原创 2019-04-09 22:07:30 · 275 阅读 · 0 评论 -
顺时针输出矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,1本菜鸟的算法class Solution {public:bool result(int n,int m) { return n == m ? t...原创 2018-10-21 15:40:15 · 983 阅读 · 0 评论 -
二叉树反转
操作给定的二叉树,将其变换为源二叉树的镜像。思路,建立两个函数,主函数负责遍历二叉树,子函数负责对节点进行转置。so easy!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NUL...原创 2018-10-21 13:13:17 · 703 阅读 · 0 评论 -
判断二叉树B是否为二叉树B的子结构算法
问题表述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)最先的思路我最先想到的就是对A树进行层次遍历,寻找A树于B树根结点值相同的节点,然后以该结点为根结点建立子树,对子树和B树进行层次遍历判断B树是否为A树的子结构,直至A树遍历完毕或者B树遍历完毕。但在牛客网运行超过允许运行时间,不知道算法那里写错了还是太过于复杂。非递归代码stru...原创 2018-10-21 12:49:51 · 855 阅读 · 0 评论 -
重建二叉树
问题描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路采用在数据结构中所使用的方法,先序队列确定头结点,中序队列确定左右部分,采用递归方法,我使用的方法简单易懂,但不是最优的。代码演示/**...原创 2018-10-22 19:08:39 · 458 阅读 · 0 评论 -
变态调台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。嘿嘿,这就是2的(n-1)阶乘。class Solution {public: int jumpFloorII(int number) { return pow(2,number-1); }};...原创 2018-10-22 19:25:13 · 635 阅读 · 0 评论 -
跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。代码class Solution {public: int jumpFloor(int number) { if (number &lt;= 0) { return -1; } else if (numbe...原创 2018-10-22 19:27:33 · 440 阅读 · 0 评论 -
O(n)复杂度实现链表反转
输入一个链表,反转链表后,输出新链表的表头。插头法思想:将头结点断开,把后面的节点依次取出,插入到头部,可实现O(n)复杂度链表反转效果。演示代码#include&lt;iostream&gt;#include&lt;stdlib.h&gt;using namespace std;struct ListNode { int val; struct ListNod...原创 2018-10-20 18:53:27 · 782 阅读 · 0 评论 -
O(n)复杂度输出链表中倒数第k个结点。
输入一个链表,输出该链表中倒数第k个结点。算法思想:将两个指针当作尺子,用来杖量链表的长度。核心算法 ListNode* front; ListNode* tail; front=pListHead;tail=pListHead; for(int i = 0 ; i < k ;i++) { if(!tail...原创 2018-10-20 19:32:18 · 389 阅读 · 0 评论 -
O(n)复杂度合并两个单调递链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。算法思想:由于链表中没有使用空的头结点,算法复杂度稍微复杂一些,把思路想明白就可以。演示算法#include<iostream>#include<stdlib.h>using namespace std;struct ListNode { int va...原创 2018-10-20 21:32:56 · 558 阅读 · 0 评论 -
层次遍历二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。数据结构基本算法 vector<int> PrintFromTopToBottom(TreeNode* root) { //层次遍历二叉树 需要队列辅助 queue<TreeNode*> que; vector<int> ans; ...原创 2018-10-25 15:34:52 · 506 阅读 · 0 评论 -
递归算法:求二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。采用先序遍历的方法,计算每一条路径的长度,取最大路径。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x)...原创 2018-10-28 17:03:27 · 8846 阅读 · 0 评论 -
层次遍历:判断二叉树是否平衡
输入一棵二叉树,判断该二叉树是否是平衡二叉树。求每个节点左右子树深度,绝对差大于1则不是。class Solution {public: int count=0; int depth=0; bool IsBalanced_Solution(TreeNode* pRoot) { //递归算法,求每个节点的左右树高度 //层次遍历 ...原创 2018-10-28 17:21:41 · 732 阅读 · 0 评论 -
判断二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。算法思想最后一个节点为根结点,可将数组分成两部分,左边部分为左树,右边部分为右树,进行递归循环,如果右树含有比根结点小的数据就不是后序遍历,否则为正确的后序遍历。class Solution {public: bool VerifySquen...原创 2018-10-25 17:01:27 · 479 阅读 · 0 评论 -
二叉树中和为某一值的路径
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)class Solution {public: vector<vector<int> >ans; vector<int> myvecto...原创 2018-10-25 19:26:17 · 437 阅读 · 0 评论 -
复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)我的算法思想很简单,先复制next指针,然后采用类似冒泡算法复制random指针。/*struct RandomListNode { int label; st...原创 2018-10-25 19:55:51 · 449 阅读 · 0 评论 -
高效算法:将二叉搜索树转化为双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思想:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *r...原创 2018-10-25 21:15:30 · 520 阅读 · 0 评论 -
2018网易球队编程题
原创 2019-04-18 22:14:51 · 355 阅读 · 0 评论