Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无连续相等约束的排序_Javascript_Algorithm_Sorting - Fatal编程技术网

Javascript 无连续相等约束的排序

Javascript 无连续相等约束的排序,javascript,algorithm,sorting,Javascript,Algorithm,Sorting,我想根据创建的日期对新闻提要进行排序,这很简单,但我不希望连续发布两篇具有相同userId字段的文章 这在理论上可能是不可能的,因为如果我只有两篇文章具有相同的userId字段呢 我正在寻找一种算法,它根据fieldA排序,但不具有具有相同fieldB的两个连续元素 对于同一用户的不同帖子之间所需的不同帖子数量,最好有一个参数化算法。(在第一种情况下,此参数为1) 我不是在寻找性能(O(n^2)可以),而是一种聪明而简单的方法,可能需要5行代码 语言不重要,但Javascript是首选。将atr

我想根据创建的日期对新闻提要进行排序,这很简单,但我不希望连续发布两篇具有相同userId字段的文章

这在理论上可能是不可能的,因为如果我只有两篇文章具有相同的userId字段呢

我正在寻找一种算法,它根据fieldA排序,但不具有具有相同fieldB的两个连续元素

对于同一用户的不同帖子之间所需的不同帖子数量,最好有一个参数化算法。(在第一种情况下,此参数为1)

我不是在寻找性能(O(n^2)可以),而是一种聪明而简单的方法,可能需要5行代码


语言不重要,但Javascript是首选。

将atributes放入一个数组中,并对该数组进行排序:

arr.sort();
将第二个atribute放入另一个数组中,并根据第一个数组对该数组进行排序

var newarr = [arr[0]];
for (var i=1; i<arr.length; i++) {
   if (arr[i]!=arr[i-1]) newarr.push(arr[i]);
}
var newarr=[arr[0]];

对于(var i=1;i来说,用5行代码来解决这个问题有点困难,我试图给出一个简短的伪代码,您可以将其翻译成js

首先,我们将输入分组为A[1]、A[2]、…、A[k]。A[i]是包含第i个用户的所有帖子的容器,这可以通过O(n)扫描轻松完成

代码:

i=1到k的

lastOccurPosition[i]=-intervalLength;//这是参数指定的间隔长度
对于i=1到k
排序(A[i]);
对于i=1到n
minElement=INF;//查找最小值
minUserId=-1;//日志为minimun的记录
对于j=1到k

如果(i-lastOccurPosition[i]1)排序2)根据您的规则进行筛选/散布如果按日期排序给您提供了ABAB,您希望将其重新排列到ABAB吗?或者你想删除第三个
A
post,给ABAB?
for i = 1 to k
    lastOccurPosition[i] = -intervalLength; //that is the interval length specified by parameter 
for i = 1 to k
    sort(A[i]);
for i = 1 to n
    minElement = INF; //find the minimum
    minUserId = -1;  //record whose post is minimun
    for j = 1 to k
        if(i - lastOccurPosition[i] <= intervalLength) //if the user has occured within interval length,the user's post shouldn't be choosen
            continue;
        if(A[j][1] < minElement)
            minElement = A[j][1];
            minUserId = j;
    answer[i] = minElement; //put min element into answer array
    lastOccurPosition[minUserId] = i; //update choosen user's last occur position
    A[minUserId].pop_front(); //delele first element