Tag: algorithm

什么是一个有效的algorithm来找出一个单链表是否是循环的/循环的?

我怎样才能find一个单链表是循环/循环的? 我试图search,但找不到一个令人满意的解决scheme。 如果可能的话,你能提供一个伪代码还是Java实现? 例如: 1 → 3 → 5 → 71 → 45 → 7 → 5 ,其中第二个5实际上是列表的第三个元素。

在地图元素上使用for_each

我有一个地图,我想在每个数据types对象成员函数上执行调用。 我还知道如何在任何序列上做到这一点,但有可能在关联容器上做到这一点? 我能find的最接近的答案是: Boost.Bind访问std :: for_each中的std :: map元素 。 但是我不能在我的项目中使用boost,所以,有没有一个STL的替代品,我错过了提高::绑定? 如果不可能的话,我想创build一个指向数据对象的临时序列,然后在它上面调用for_each,如下所示: class MyClass { public: void Method() const; } std::map<int, MyClass> Map; //… std::vector<MyClass*> Vector; std::transform(Map.begin(), Map.end(), std::back_inserter(Vector), std::mem_fun_ref(&std::map<int, MyClass>::value_type::second)); std::for_each(Vector.begin(), Vector.end(), std::mem_fun(&MyClass::Method)); 它看起来太混乱,我不太喜欢它。 有什么build议么?

如何实现一个数组的3个堆栈?

有时,我遇到以下面试问题:如何实现一个数组的3个堆栈? 当然,任何静态分配都不是解决scheme。

调整图像大小以适应边界框

一个简单的问题,但由于某种原因,我今天无法弄清楚这一点。 我需要调整图像的大小,以适应边界框,同时保持纵横比。 基本上我正在寻找代码来填写这个function: void CalcNewDimensions(ref int w, ref int h, int MaxWidth, int MaxHeight); 其中w&h是原始高度和宽度(in),新的高度和宽度(out)以及MaxWidth和MaxHeight定义图像必须适合的边界框。

什么是泡沫sorting?

泡沫sorting有没有真正的世界使用? 每当我看到一个提到的,它总是: 用于学习的sortingalgorithm。 不使用sortingalgorithm的一个例子。

你可以使用算术运算符在0和1之间翻转

有没有一种方法,而不使用逻辑和位运算符,算术运算符,以0和1之间的整数之间翻转? 即。 “variables?=variables”将使variables1,如果它是0或0,如果它是一个

线性search和二进制search有什么区别?

线性search和二进制search有什么区别?

'git log –graph'或'hg graphlog'是如何工作的?

我知道Git中的历史存储在一个名为DAG的数据结构中。 我听说过DFS,知道这有点相关。 我很好奇,程序如git log –graph或者hg graphlog绘制历史? 我一直认为用这样一个好方法来画道和一切都是相当复杂的。 有人可以写一些伪代码来演示它吗? 注意:我试着环顾Git或者Hg的代码,但是很难跟踪并得到一个大概的想法。

find最大平衡子阵的空间高效algorithm?

给定一个0和1的数组,find最大的子数组,使得零和1的数量相等。 这需要在O(n)时间和O(1)空间中完成。 我有一个algorithm,它在O(n)时间和O(n)空间。 它使用前缀sum数组并利用这样的事实,即如果0和1的数目相同,那么sumOfSubarray = lengthOfSubarray / 2 #include<iostream> #define M 15 using namespace std; void getSum(int arr[],int prefixsum[],int size) { int i; prefixsum[0]=arr[0]=0; prefixsum[1]=arr[1]; for (i=2;i<=size;i++) { prefixsum[i]=prefixsum[i-1]+arr[i]; } } void find(int a[],int &start,int &end) { while(start < end) { int mid = (start +end )/2; if((end-start+1) == 2 * (a[end] – a[start-1])) break; […]

Firefox如何优化这个循环?

当n很小时,用Ω(n)循环方法显示我的Ω(log n)数字填充algorithm,Firefox 9.0.1令我感到惊讶。 在我见过的每一个浏览器中,循环速度都比较慢 ,即使对于很小的n值也是如此。 我知道所有的浏览器都在优化JS,但是由于所有其他的浏览器都显示循环速度较慢,是否有解释Firefox 9的行为? // Ω(log n) function padNumberMath(number, length) { var N = Math.pow(10, length); return number < N ? ("" + (N + number)).slice(1) : "" + number } // Ω(n): function padNumberLoop(number, length) { var my_string = '' + number; while (my_string.length < length) { my_string = '0' + […]