数据结构相关
sky天
这个作者很懒,什么都没留下…
展开
-
选择排序、冒泡排序、插入如排序、归并排序、C++代码
选择排序void selectsort(vector<int>&arr){ if (arr.size() < 2) return; for (int i = 0; i < arr.size() - 1; i++) { int MIN = i; for (int j = i + 1; j < arr.size(); j++) { MIN = arr[MIN] < arr[j] ? MIN : j; } swap(arr[MIN],原创 2021-03-23 10:13:01 · 90 阅读 · 0 评论 -
设计RandomPool结构
设计RandomPool结构【题目】 设计一种结构, 在该结构中有如下三个功能:insert(key): 将某个key加入到该结构, 做到不重复加入。delete(key): 将原本在结构中的某个key移除。 getRandom():等概率随机返回结构中的任何一个key。【要求】 Insert、 delete和getRandom方法的时间复杂度都是O(1)// 设计RandomPool结构.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<原创 2020-07-17 17:14:39 · 140 阅读 · 0 评论 -
二叉树寻找后继结点
题目在二叉树中找到一个节点的后继节点【题目】 现在有一种新的二叉树节点类型如下:public class Node { public int value; public Node left;public Node right; public Node parent;public Node(int data) { this.value = data; }} 该结构比普通二叉树节点结构多...原创 2020-03-08 17:09:13 · 344 阅读 · 0 评论 -
两个单链表相交的一系列问题c++
题目在本题中, 单链表可能有环, 也可能无环。 给定两个单链表的头节点 head1和head2, 这两个链表可能相交, 也可能不相交。 请实现一个函数, 如果两个链表相交, 请返回相交的第一个节点; 如果不相交, 返回null 即可。 要求: 如果链表1的长度为N, 链表2的长度为M, 时间复杂度请达到 O(N+M), 额外空间复杂度请达到O(1)分析这道题涵盖了链表相交的一系列问题 也是左...原创 2020-03-02 12:13:11 · 275 阅读 · 0 评论 -
给定一个数组, 求如果排序之后, 相邻两数的最大差值, 要求时 间复杂度O(N), 且要求不能用非基于比较的排序。
题目给定一个数组, 求如果排序之后, 相邻两数的最大差值, 要求时间复杂度O(N), 且要求不能用非基于比较的排序。分析题目限制不能使用非基于比较的排序,也就是不允许使用桶排序的方法,但可以借鉴桶排序的思想,原数组有N个数,则创建N+1个桶,数组的最小值放在第0号桶里,数组的最大值放在最后一个桶里,然后遍历数组,桶内只放该区域的最大值和最小值。遍历到最后一定会有一个空桶,设置空桶的目的是为...原创 2020-02-23 20:25:14 · 284 阅读 · 0 评论 -
C++设计一个栈可以随时返回栈中元素最小值
题目实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返回栈中最小元素的操作。【要求】1. pop、 push、 getMin操作的时间复杂度都是O(1)。2. 设计的栈类型可以使用现成的栈结构。分析先放着,过后整理代码// 获得栈中最小值操作.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream...原创 2020-02-22 13:39:53 · 422 阅读 · 1 评论 -
c++数组实现大小固定的数列
代码// 数组构造固定大小的队列.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;#define NUM 5class ArrayQuene{public: ArrayQuene(int N); ~ArrayQuene(); void push(in...原创 2020-02-21 23:05:24 · 615 阅读 · 0 评论 -
c++用数组实现大小固定的栈
代码// 数组结构实现大小固定的栈.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>#include<vector>using namespace std;#define NUM 5class ArrayStack{public: ArrayStack(int N); ~Arr...原创 2020-02-21 23:04:35 · 172 阅读 · 0 评论 -
归并排序之小和问题
题目在一个数组中, 每一个数左边比当前数小的数累加起来, 叫做这个数组的小和。 求一个数组的小和。例子:[1,3,4,2,5]1左边比1小的数, 没有;3左边比3小的数, 1;4左边比4小的数, 1、 3;2左边比2小的数, 1;5左边比5小的数, 1、 3、 4、 2;所以小和为1+1+3+1+1+3+4+2=16分析先放着,等有空写代码#include "stdaf...原创 2020-02-15 15:39:57 · 96 阅读 · 0 评论 -
《剑指offer》----------第一个只出现一次的字符
题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).分析由于题目与字符出现的次数相关,我们是不是可以统计每个字符在该字符串中出现的次数?要达到这个目的,我们需要 一个数据容器来存放每个字符的出现次数。在这个数据容器中可以根据字符来查找它出现的次数,也就是说这个容器的作用是把一个字...转载 2020-02-12 16:46:53 · 66 阅读 · 0 评论 -
《剑指offer》-----------------数组中重复的数字
题目在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。方法一数组中的所有数字都为0到n-1,可以把这些数字当做数组下标,数值用来统计个数,即i为下标,map[i]为个数,如果ma...原创 2020-02-10 15:14:10 · 89 阅读 · 0 评论 -
《剑指offer》-------------------------和为S的两个数字
题目输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。分析这道题乍一看觉得很难,找出这两个数并不困难,可以有很多方法,但是要求输出两个数乘积最小的感觉有些困难,我一开始就是想的,把所有加和等于数字S的数字都另存下,然后再分别比较哪组数据乘积最小最后选择输出他,但是看到大家的博客就懂了。我们给当前数组设立一个头指针...原创 2020-02-08 20:19:42 · 76 阅读 · 0 评论 -
《剑指offer》-------------反转链表
题目输入一个链表,反转链表后,输出新链表的表头。分析辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指...转载 2020-02-08 13:52:28 · 86 阅读 · 0 评论 -
《剑指offer》-------------孩子们的游戏(圆圈中最后剩下的数)
题目·每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个...原创 2020-02-06 16:21:32 · 99 阅读 · 0 评论 -
《剑指offer》-----------数组中只出现一次的数字
题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析没错 ,菜的一逼的我拿到手一开始觉得很简单,但是写出来也不对,后来看了好多大神的博客大家都推荐按位异或的方法去做,看完真是佩服。说到异或那就先讲讲它的性质:两个相同的数异或等于0,且遵循按位异或,例如1和2异或 把他们化成2进制形式按位异或,就是001和010得到结果为011,也就是十进制...原创 2020-02-05 21:01:56 · 62 阅读 · 0 评论 -
《剑指offer》----------------数字在排序数组中出现的次数
题目统计一个数字在排序数组中出现的次数方法一暴力法 咔咔的循环就往上整就得了,但是违背了出题的本意,想考察你排序数组,没体现出来。但是好歹也算一个方法,写上去哈哈代码class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int n=data.size(); ...原创 2020-02-04 15:22:33 · 71 阅读 · 0 评论 -
《剑指offer》------------------链表中环的入口结点
题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。分析1 首先判断一个链表是否存在环?设置两个指针,一个为slow,一个为fast,从头开始依次遍历链表,当slow每走一步时,fast走两步。如果存在环的话,fast和slow指针肯定会相遇,而且会返回相遇结点,如果不存在环,则fast指针会指向NULL而退出。2.判断存在后开始计算出环的结点数设置一个结点为...原创 2020-01-09 20:21:28 · 65 阅读 · 0 评论 -
《剑指offer》-----左旋转字符串
题目汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!方法一通过进行几次翻转来实现,例如S=“abcXYZdef”, n=3.将S分为两部分,S1=“ab...原创 2020-01-09 12:29:57 · 153 阅读 · 0 评论 -
《剑指offer》-----------旋转数组的最小数字
题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。方法一暴力法 ,遍历每一个元素,找出最小值为止,但这种思路好像跟旋转矩阵没啥关系,应该不符合要求代码clas...原创 2020-01-06 21:04:17 · 75 阅读 · 0 评论 -
《剑指offer》---------整数中1出现的次数
题目求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。方法一暴力法:挨个遍历求出每个数中一的个数,还是比较好理解的,第一个函数就是...原创 2020-01-05 15:35:14 · 74 阅读 · 0 评论 -
《剑指offer》--------矩形覆盖问题
题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析乍一看有点懵逼,没办法一眼看不出规律,只好用手写下前几个的规律:由图可知0<=n<=2时,有n种方法;当n>2时,有f(n)=f(n-1)+f(n-2)种方法;也就是斐波那契数列,所以代码就很简单了;代码class Solution...原创 2020-01-03 20:32:23 · 87 阅读 · 0 评论 -
《剑指offer》--------不用加减乘除做加法
题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析加法运算可以拆解成不考虑进位的加法和只计算进位值两部分。(1)对于10进制 例如 5+8=13;分三步走:1.相加各位的值,不考虑进位情况,得到结果为32.计算进位值,得到10.如果这一步进位值为0,那么第一步结果就是最终的结果。3.重复上述步骤,相加的值变成上述两步的·结果3和10.得到13.进位...原创 2020-01-02 11:09:25 · 69 阅读 · 0 评论 -
《剑指offer》--------------构建乘积数组
题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。分析可以把B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1].看成A[0]A[1]…A[i-1]和A[i+1]…A[n-2]A[n-1]两部分的乘积。设B0[i]=A[0]A[1]…A[i-1...原创 2020-01-01 16:19:51 · 74 阅读 · 0 评论 -
《剑指offer》-------------两个链表的第一个公共结点
题目输入两个链表,找出它们的第一个公共结点。方法一 暴力法运用嵌套循环查找 第一个链表的第一个结点下 依次遍历第二个链表的每个结点,如果找到就返回,没找到就在第一个链表下的第二个结点下 依次遍历第二个链表的每个结点,按此顺序依次查找直到找到为止。代码class Solution {public: ListNode* FindFirstCommonNode( ListNode* p...原创 2019-12-31 10:47:59 · 88 阅读 · 1 评论 -
《剑指offer》--------二进制中1的个数
题目·输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。方法一最容易想到的思路就是将二进制数进行右移依次与1相与,并记录下相与结果为1的次数,该次数就是二进制中1的个数,这对于正数来说是可以的,但是负数不可以 ,数值在计算机中就是以补码形式存储的,负数最高符号位为1,当进行移位时最高位会进行补位为1 所以移位会陷入死循环。为避免上述失误出现 ,我们反其道而行之,将比较位1进行...原创 2019-12-30 16:25:14 · 86 阅读 · 1 评论 -
《剑指offer》-----跳台阶和变态跳台阶问题
跳台阶问题题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析分别写出前几次的规律:f(n=1)=1;f(n=2)=2;f(n=3)=3;f(n=4)=5;…f(n)=f(n-1)+f(n-2);(此时n>=3) 当n=1或2时 单独讨论就好,其实就是找规律,多写几组就出来了,到最后发现它就是斐波那...原创 2019-12-29 16:16:52 · 95 阅读 · 2 评论 -
《剑指offer》-----二维数组中的查找
题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一暴力遍历查找方法思路很简单,一行一列的遍历到每个元素并与目标元素进行比较。class Solution {public: bool Find(int target, vecto...原创 2019-12-24 16:28:18 · 60 阅读 · 0 评论 -
《剑指Offer》----求1+2+3+...+n
题目求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。方法一:采用递归,利用逻辑与的短路特性具体什么是短路特性 ,可以参考这位博主的博客链接如下:https://blog.csdn.net/xiaoquantouer/article/details/71023448代码class Solution ...原创 2019-12-19 10:52:53 · 88 阅读 · 0 评论 -
《剑指offer》---用两个栈实现队列(c++实现)
题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型解析栈的特性是先进后出,队列的特性是先进先出,要想办法将两个栈组合成一个队列,假如第一个栈将1.2.3.4.5依次按顺序入栈,那么出栈的顺序肯定是5.4.3.2.1,这是我们将第一个栈出栈顺序的元素再依次放入第二个栈里也就是以5.4.3.2.1的方式入栈,那么从第二个栈里出来的顺序就是1.2.3.4.5.经...原创 2019-12-18 17:17:48 · 150 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集 小白专场: 二叉树同构的判断
题目给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此...原创 2019-12-18 09:52:46 · 170 阅读 · 0 评论 -
《数据结构》-----题目集--字符匹配相关--HDU 2203 亲和串
题目人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。Inp...原创 2019-12-16 22:02:17 · 107 阅读 · 0 评论 -
《数据结构》题目集--------------HDU 1711 Number Sequence
题目题目:Given two sequences of numbers : a[1], a[2], … , a[N], and b[1], b[2], … , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1...原创 2019-12-16 18:39:11 · 115 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集--Pop Sequence
题目Pop Sequence(25 分)Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possib...原创 2019-12-13 20:46:39 · 446 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集 --线性结构3 Reversing Linked List
题目Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K...原创 2019-12-13 09:00:03 · 98 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集 小白专场:一元多项式的加法与乘法运算
题目要求实现代码#include "stdafx.h"#include<iostream>#include <string> #include <cctype> using namespace std;typedef struct PolyNode* Polynomial;struct PolyNode{ int coef; int e...原创 2019-12-11 10:33:48 · 166 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集 习题2.5 两个有序链表序列的合并 解答
题目要求思路:通过尾插法创建两个(指定数量结点的)链表,并依次输入数据域,最后通过比较法进行合并并依次输出`代码#include"stdafx.h"#include using namespace std;typedef int ElementType;typedef struct Node* PtrToNode;struct Node {ElementType Data;P...原创 2019-12-07 21:32:14 · 230 阅读 · 0 评论