
408
繁星蓝雨
Happy coding!
-
原创 2018年的408算法题
文章目录0 结果1 题目2 思路3 实现0 结果1 题目2 思路因为时间高效,则采用空间换时间的方法。方法:打表计数【数组大小设为n,即元素的个数】。遍历数组出现number,如果范围在[1,n]之间,则记[number-1]次数为1,遍历完数组后,指标i从[0,n)开始递增判断表值是否为0,是则跳出循环,最后输出i+1。3 实现#include <cstdio>#include <cstdlib>int Func(int A[], int n){2020-12-18 01:01:54124
0
-
原创 2013年的408算法题
文章目录0 结果1 题目2 思路3 实现0 结果1 题目2 思路思路一:使用hash映射打表,每出现一次次数加1,如果次数有超过n/2,则存在主元素,反之,则不存在。(缺点:需要辅助数组)思路二:两两相互抵消。如果数组中存在大于一般的相同元素,首先假设第一个元素为主元素的候选元素【统计个数为1】,如果目前元素统计的个数大于0,遇到相同的数字——个数加1,不同的数字——个数减1;当元素统计的个数为0时,将遇到的数字变更为候选的主元素。循环结束时,如果个数大于0,则3 实现#include2020-12-18 00:38:5859
0
-
原创 2011年408的算法题
文章目录0 结果1 题目2 思路3 实现0 结果1 题目2 思路倒置数组,将数组从头到尾逆置一遍,再从1到p和p+1到n再分别逆置。3 实现#include <cstdio>#include <cstdlib>const int n = 6;//数组大小void Reverse(int* &L, int l, int r){//倒置数组 for(int i = 0;i < (r - l + 1)/2; i++){ in2020-12-17 23:59:3278
0
-
原创 2009年408的算法题
文章目录0 结果1 题目2 思路3 实现0 结果1 题目2 思路设q指向末尾第k个结点,p指向最后一个结点(假设为n2020-12-17 23:12:0137
0
-
原创 2012年408的算法题
文章目录0 结果1 题目2 思路3 实现0 结果1 题目2 思路1 分别求两个链表的长度(len1,len2)2 用指针p指向长的链表的表头,接着让p指向和短的链表相同长度的前一个结点【假设len1>len2,就让p不断指向下一个结点len1-len2次】3 用q指向短的链表的表头,分别比较p->next和q->next是否相同(指针地址是否相同),如果相同则返回,否则,直到条件p->next为空,返回空结点。3 实现#include <cstdio&g2020-12-16 22:47:2760
0
-
原创 2015年408专业的算法题
文章目录0 结果1 题目2 思路3 实现0 结果1 题目2 思路使用数组记录每个数字的绝对值出现的次数,如果出现次数大于1,则进行删除结点操作。3 实现#include <cstdio>#include <cstdlib>typedef struct node{ int data; struct node* link;}NODE;void func(NODE* &L, int n){ NODE* p = L, *q;2020-12-16 19:57:0593
0
-
原创 2019年专业408的算法题
文章目录0 结果1 题目2 思路3 实现0 结果对于奇数:对于偶数:1 题目2 思路1 首先找到链表的中间结点(n/2);例如偶数个数据对于1,2,3,4,5,6,中间结点为3,第一段数据为1,2,3,第二段数据为4,5,6;奇数个数据对于1,2,3,4,5,中间结点为3,第一段数据为1,2,3,第二段数据为4,5;2 把第二段数据逆置,使用头插法或者原地逆置法;3 把逆置后的第二段数据一次插入到第一段数据中。备注:原地逆置法:将结点的next指向其原结点的前驱。2020-12-16 18:18:5477
0
-
原创 2020年专业408的算法题
文章目录1 题目2 解法一(朴素算法)3 解法二1 题目定义三元组(a,b,c)(a,b,c均为整数)的距离D=∣a−b∣+∣b−c∣+∣c−a∣D=|a-b| + |b-c|+|c-a|D=∣a−b∣+∣b−c∣+∣c−a∣。给定3个非空整数集合S1,S2和S3,按升序分别存储在3个数组中。请设计一种尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1,b∈S2,c∈S3a \in S1,b \in S2,c \in S3a∈S1,b∈S2,c∈S3)中的最小距离。例如,S1={-12020-09-26 00:16:40813
0