2
A
回答
1
看看截图,你似乎想从列表中选择一个随机分类,没有2个选项在3个以内。 此代码需要一个数组,并为您提供满足该条件的数组的子集。 您也可以指定最大选择数量,尽管您可能并不总是那么多。
var src = [0,1,2,3,4,5,6,7,8,9,10,11,12];
var getRnd = function(max){
var output = [];
var newSrc = src.slice();
var test, index, i, safe;
while (newSrc.length > 0 && output.length < max){
index = Math.floor(Math.random()*newSrc.length);
test = newSrc.splice(index,1);
//Make sure it's not within 3
safe = true;
for (i=0; i<output.length;i++){
if(Math.abs(test-output[i]) < 3){
//abort!
safe=false;
}
}
if(safe){
output.push(test);
}
}
return output;
};
alert(getRnd(4));
+0
正是我想要做的。谢谢! – RyanLynch 2011-02-23 02:59:44
0
甲方式(likley不是fastes)将是:
- 排序阵列
- 挑开始与新的洗牌数组随机元素(在排序后的数组标记元件所用或删除)
- 使用二分查找找到最后一个元素为+3或-3的下一个元素(在-3和+3之间随机选择)。确保元素未被标记为以前使用(否则找到另一个)
- 重复3,直到您可以找到元素。
- 你要么从已排序数组中选取所有元素,要么这样的洗牌是不可能的。
我认为你得到O(N * logN)与此(排序N * logN和选择N个元素logN为每个serch)。
0
假设数组中的值不能重复。
function one(array, mod){
var modArray = [];
for(var index in array){
var item = array[index];
var itemMod = item%3;
if(itemMod === mod){
modArray.push(item);
}
}
return modArray();
}
function two(modArray){
var sortedArray = // sort highest to lowest
for(var index in sortedArray){
var item = array[index];
if(index > 0 && item[index-1] === item[index]-3){
}else{return false;}
}
return sortedArray.length;
}
function main(array){
var a1 = one(array, 0);
var a2 = one(array, 1);
var a3 = one(array, 2);
var a1c = two(a1);
var a2c = two(a2);
var a3c = two(a3);
return // if a1c is greatest then a1, if a2c greatest then a2 ... etc
}
0
我认为你必须以某种非标准方式使用短语“shuffle”。如果所有的数字已经在彼此的+3以内,那么对数组进行排序会使它们按正确的顺序排列,除非有重复的数据。
更多的例子可能会有所帮助。例如,这些例子是否有效,以及您正在寻找的东西?
[0, 3, 3] -> [3, 0, 3]
[9, 3, 6, 0, 6] -> [0, 3, 6, 9, 6]
[3, 3, 6, 0, 6] -> [0, 3, 6, 3, 6]
感觉就像这大概是图论解决的问题 - 某种网络穿越的一个最大/最小成本函数。
相关问题
- 1. 用随机数填充数组
- 2. 用随机数字填充数组android_java
- 3. 用随机数填充我的数组?
- 4. 用随机整数值填充数组
- 5. 随机嵌套和填充数组
- 6. 用随机排列填充数组
- 7. 用随机数填充int []
- 8. CSS随机填充
- 9. 填充空对象数组用充满随机在C#
- 10. 我的数组中的随机数由上一个随机数填充
- 11. Javascript随机数组
- 12. 随机填充2d阵列
- 13. 填充二维数组随机整数相同数
- 14. 填充一个ListView用随机数据
- 15. 填充的5个随机整数
- 16. 用随机数据填充内存
- 17. 用随机数据填充表格
- 18. SQL填充表用随机数据
- 19. 填充在IMG SRC随机数
- 20. 用Pyspark中的随机数填充na
- 21. 如何使用指针填充随机数的二维数组
- 22. 程序中的内存错误,用随机数填充数组
- 23. 用C++中的随机数填充二维数组
- 24. 用随机数字填充二维数组
- 25. 用非重复的随机数填充数组
- 26. 如何填充具有特定随机数的数组(java)
- 27. 帮助在二维数组中填充随机数
- 28. 用随机数填充数组在目标-c
- 29. 二维数组填充随机数和输出索引C++
- 30. 用随机数填充数组并打印到屏幕
这并不总是可能的 - 你举一个例子,它不是。一般来说,你不会总是能够做到这一点。你试图解决的根本问题是什么? – tvanfosson 2011-02-23 02:14:42
是的,我知道这并不总是可能的..基本上我试图建立一个突出随机图像的“图像网格” - 它循环 - 突出显示的图像有一个标签,如果它们太靠近 - 看看这个截图(这可能比试图解释它更好)http://cl.ly/261Y2F0200442e220y3z – RyanLynch 2011-02-23 02:30:25