制约因素:
这不是一个家庭作业问题,只是我遇到的一个有趣的问题.
以下是我能想到的一些解决方案,但在给定的约束条件下没有任何解决方案.
方法1
*带O(n)内存*
方法2
在O(n log n)时间内
方法3
如果定义了数字范围
如果情况是数字在特定范围内,那么我可以初始化一个int说track = 0; 当我遇到数组中的数字时设置适当的位,例如(1 << a [2]).1.将字母交换到数组2的前半部分.在轨道变量3中标记数字.稍后使用轨道填充数组的后半部分.
方法4 如果我们想要删除整数范围的约束但是它需要更多的内存,我们可以将方法3与HashMap一起使用.
想不出更好的方法来解决O(1)时间和O(n)空间中的泛型问题.
这里的一般问题是指:
给定序列x1y1x2y2x3y3 .... xnyn其中x1,x2是字母x1 <x2 <.... <xn和y1y2 ... yn是整数.y1 <y2 <.... <yn将输出排列为x1x2 ... xny1y2 ... yn
有什么建议 ?
我们正在编写一个C#应用程序,它将帮助删除不必要的数据中继器.只有在收到的所有数据都被其他中继器接收的情况下,才能删除转发器.下面将解释我们作为第一步所需要的内容:
例如,我有int数组的集合
一个.{1,2,3,4,5}
湾 {2,4,6,7}
C.{1,3,5,8,11,100}
它可能是数千个这样的阵列.我需要找到可以删除的数组.只有在其所有数字都包含在其他数组中的情况下才能删除数组.在上面的示例中,可以删除数组a,因为数字2和4在数组b中,数字1,3,5在数组c中.
做这种手术的最佳方法是什么?
我想对数组进行排序,并按排序顺序查找每个元素的索引.例如,如果我在数组上运行它:
[3,2,4]
Run Code Online (Sandbox Code Playgroud)
我得到:
[1,0,2]
Run Code Online (Sandbox Code Playgroud)
在Java中有一种简单的方法吗?
编写一个比较n个列表并返回所有未出现在所有列表中的值的方法的最有效方法是什么,以便
var lists = new List<List<int>> {
new List<int> { 1, 2, 3, 4 },
new List<int> { 2, 3, 4, 5, 8 },
new List<int> { 2, 3, 4, 5, 9, 9 },
new List<int> { 2, 3, 3, 4, 9, 10 }
};
public IEnumerable<T> GetNonShared(this IEnumerable<IEnumerable<T>> lists)
{
//...fast algorithm here
}
Run Code Online (Sandbox Code Playgroud)
以便
lists.GetNonShared();
返回1,5,8,9,10
我有
public IEnumerable<T> GetNonShared(this IEnumerable<IEnumerable<T>> lists)
{
return list.SelectMany(item => item)
.Except(lists.Aggregate((a, b) => a.Intersect(b));
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否有效.订单无关紧要.谢谢!
换句话说,找到数组中不存在的最低正整数。该数组也可以包含重复项和负数。Stripe在编程采访中曾问过这个问题。我为以下设计了一种解决方案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr[]={1,-1,-5,-3,3,4,2,8};
int size= sizeof(arr)/sizeof(arr[0]);
sort(arr, arr+size);
int min=1;
for(int i=0; i<size; i++){
if(arr[i]>min) break;
if(arr[i]==min) min=min+1;
}
cout<<min;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我首先对数组进行排序,然后遍历数组一次。在遍历数组之前,我已将名为“ min”的变量初始化为1。现在,在遍历数组时,当我们获得等于min的整数时,我们只需增加min的值即可。这样可以确保min变量保存尚未出现的最新的最小正整数。您能想到更好的方法吗?提前致谢。
可能吗?如果没有,给定一个大小为n的数组,我怎么知道它是否更好地排序数组?
给定是整数对(a1,b1),...,(an,bn).如果和,对i是" 配对" .什么是快速确定不受任何其他对支配的对列表的算法?jai < ajbi < bj
我们可以检查所有对,并且对于每对,通过再次遍历所有对来检查它是否被任何其他对支配.这个算法是有序的n^2.有订购算法n还是n log n?
我有一个问题,一个OK-ish解决方案.我希望那里有更好的解决方案.
问题
我有一个大约200,000个整数的数组.给定两个索引i1和i2,我需要计算i1和i2之间所有元素的总和.数组中的每个整数都介于1和4之间.例如:
a = [1, 3, 2, 4, 3, 2, 4, 1];
subsection_sum(a, 0, 3); // returns 6: (1 + 3 + 2)
Run Code Online (Sandbox Code Playgroud)
此操作将执行大约200,000次,因此需要非常快.for循环中的一个简单计数器是O(n),而且太慢了.在构建之后,阵列永远不会被修改,因此可以拥有相对昂贵的预处理阶段.
迄今为止我的最佳解决方案
该算法在O(log n)时间内工作:
首先用零填充原始数组,直到其长度为2的幂.接下来,将数组拆分为两个相等的部分并存储每个的总和.然后将数组拆分为四分之一并存储每个数组的总和.然后是八分之一.继续这样做,直到数组被分成2个元素长的部分.对于上面的8元素数组,这需要两个步骤:
halves = [(a[0] + a[1] + a[2] + a[3]), (a[4] + a[5] + a[6] + a[7])]
quarters = [(a[0] + a[1]), (a[2] + a[3]), (a[4] + a[5]), (a[6] + a[7])]
Run Code Online (Sandbox Code Playgroud)
然后给出两个索引,现在可以在O(log n)时间内计算出subsection_sum.例如,subsection_sum(a,2,7)== quarters [1] + halfves [1].
你有一个n = 2k + 2个元素的数组,其中2个元素没有配对.8个elemets数组的示例:1 2 3 47 3 1 2 0."47"和"0"没有数组配对.如果我有只有1个元素没有配对的数组,我用XOR解决了这个问题.但我有2个不配对的元素!我能做什么?解决方案可以是O(n)时间性能和O(1)额外存储器.
在中位数的中位数算法,我们需要将阵列分成大小五大块我不知道怎么的算法发明者与神奇数字想出了"5",而不是,可能是7或9或别的什么?