算法题

以下是为您整理出来关于【算法题】合集内容,如果觉得还不错,请帮忙转发推荐。

【算法题】技术教程文章

3-15(二叉树的算法题)

今天主要完成了二叉树的一些算法题,难度不是很大,但是自己很菜,不会做1、二叉树的高度思想:利用后序遍历,将左右树算出高度,然后取大值,再加1,就是二叉树的高度。2、反转二叉树思想:前序遍历,将左右看着左右孩子,互换地址值,然后递归每个节点即可。3、相同的树思想:前序遍历,将根对比,然后递归比较即可4、对称二叉树:思想就是将左右树做个相同对比即可。5、二叉树前序遍历思想:前序遍历6、平衡二叉树思想:将每个节...

C/C++语言算法题——替换【代码】【图】

【问题】Description给定一个有限长度的非负整数序列。一次操作是指从第一个元素开始,依次把数列中的每个数替换为它右边比它小的数的个数。对该数列不断进行这个操作。总有一个时刻该数列将不再发生改变(即此时每个数都恰好等于它右边比它小的数的个数)。例如给定数列:5, 44, 19, 6, 49, 1, 27, 19, 50, 20连续进行五次操作后,依次得到新数列如下:1, 6, 2, 1, 4, 0, 2, 0, 1, 03, 8, 5, 3, 5, 0, 3, 0, 1, 04, 8, 6, 4, 5,...

[面试算法题重做]翻转句子中单词的顺序【代码】

话说工作中算法用的真的多么??????虽然工作中用不到,但是你总得换工作吧,防不住笔试面试中问你些这么个玩意。而且,多思考,有助于活跃头脑了。深深扎入项目中童鞋们还可以活跃活跃,防止生锈。话不多说,题目如下:题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。在...

LeetCode算法题-Second Minimum Node In a Binary Tree(Java实现)【代码】

这是悦乐书的第285次更新,第302篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第153题(顺位题号是671)。给定非空的特殊二叉树,其由具有非负值的节点组成,其中该树中的每个节点具有恰好两个或零个子节点。 如果节点具有两个子节点,则该节点的值是其两个子节点中的较小值。给定这样的二叉树,您需要输出由整个树中所有节点的值组成的集合中的第二个最小值。如果不存在这样的第二个最小值,则输出-1。例如: 2/...

算法题——合并两条有序的链表【代码】

题目:给定两个已排序的链表,返回合并后的链表。 思路:将链表L2的每个结点插入到链表L1中,时间复杂度为O(m+n),m、n分别为两条链表的长度。 代码: 1struct ListNode2{3int value;4 ListNode *next;5 ListNode(int v): value(v), next(NULL)6 {7 }8};910 ListNode *mergeSortedList(ListNode *L1, ListNode *L2) 11{ 12 ListNode dummy(-1), *p1 = &dummy, *p2 = L2; //L1的辅助头结点dummy,因为可能在头部...

顺序表算法题【代码】

在长度为n(n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。 Input 第一行输入表的长度n; 第二行依次输入顺序表初始存放的n个元素值。 Output 第一行输出完成多余元素删除以后顺序表的元素个数; 第二行依次输出完成删除后的顺序表元素。 ...

复杂链表的复制(一道算法题)【代码】【图】

这是一道算法题。想写篇blog记录一下这道题的解法。题目是这样的:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)这道题什么意思呢?它的意思就是说,我有一个节点类型,这个节点类型有三个成员,其中一个成员存放值,另外另个成员分别是两个指针,一个...

算法题,打印沙漏【代码】【图】

#include <iostream> using namespace std; int sak(int z) {return 1 + 4 * z + 2 * z * z; } int main() {int x;char a;cin >> x >> a;//cout << x << a << endl;int n = 0;//cout << sak(n + 1) << endl;while(!((x >= sak(n)) && (x < sak(n + 1)))){n++;//cout << n << endl;}//cout << n;int k = n;int r = 0;for (; k != 0; k--,r++){ int s = 2 * k + 1;for (int i = 0; i < r; i++){cout << " ";}for (int j = 0; ...

有趣的算法题-3【图】

1.链表中环的入口节点 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程) 当快慢指针相遇的时候: 此时慢指针走的路程为Sslow = x + m * c + a 快指针走的路程为Sfast = x + n * c + a 2 Sslow = Sfast 2 * ( x + m*c + a ) = (x + n *c + a) 从而可以推导出: x = (n - 2 * m )*c - a = (n - 2 *m -1 )*c + c - a 即环前面的路程 = 数个环的长度(为可能为0)...

趣味算法题-1

1.在一维坐标轴上有n个区间段(坐标),求重合区间最长的两个区间段 1.先按有坐标排序。 2.用递归算法解决从后往前找长度。public class point { //定义点类int x;int y;public point() {// TODO Auto-generated constructor stub}public point(int x, int y){this.x = x;this.y = y;}} public static point comSegment(point p1, point p2)//求两个点是否相交,相交的话求相交的起点和终点{point comPoint = new point();if(p1.y ...