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