制作基本算法

时间:2016-04-13 14:21:13

标签: java

所以基本上我想找到一种更简单的方法:

 if(size == 2 || size == 6 || size == 10 || size == 14 || ...) unit /= 2;

所以基本上它从2开始然后检查是否等于之前的大小+4。

我需要达到256。

我想知道是否有一种简单的方法可以做到这一点。

编辑:对不起,我打算在一行中完成所有操作,而不是多行。

6 个答案:

答案 0 :(得分:5)

你可以这样做:

if ( size >= 2 && size <= 256 && size % 4 == 2 ) 
    unit /= 2;

答案 1 :(得分:2)

如果它持续增加4,你可以尝试使用module-4:

if ((size - 2) % 4 == 0 && size <= 256){
    unit /= 2;
}

或者,如果size可能是否定的,但应该是肯定的:

if ((size - 2) % 4 == 0 && size >= 0 && size <= 256){
    unit /= 2;
}

答案 2 :(得分:1)

您可以使用

在O(1)中对此进行控制
if ((size - 2) % 4 == 0){
    /*2, 6, 10 etc*/    
    unit >>= (Math.min(size, 256) + 2) / 4;
}

其中按位移位生成2的幂的适当乘法:用于了解运算符优先级的试金石。

现在问题已经更新,unit上的操作相当迟钝unit /= 2,您必须添加新引入的256大小的上限。 1}}。

答案 3 :(得分:1)

您可以使用switch语句执行以下操作:

<script>
    $(function() {
        CreateTable(GetSum('#displaytable'));
    });

    function GetSum(tableIdWithHash) {
        var Sum = [];
        var EventIds = [];
        var EventName = [];
        var Data = [];

        $(tableIdWithHash).find('.eventCounts').each(function(i){
        var Counte = $(this).html();
        var Ide = $(this).siblings('.Idevent').html();
        var eName = $(this).siblings('.eventNames').html();

            allSum.sort(function(a,b){
      if(a.eCount > b.eCount){
         return 1;
      } else if (a.eCount < b.eCount){
         return -1;
      } else{
         return 0;
      }
    }); 
        if (EventIds.indexOf(Ide) === -1) {
            EventIds.push(Ide);
            EventName.push(eName);
        }

        var index = EventIds.indexOf(Ide);
        if (Sum[index] == undefined) {
            Sum[index] = Number(Counte);
        }
        else {
            Sum[index] += Number(Counte);
        }
        });

        Data.push(EventIds);
        Data.push(EventName);
        Data.push(Sum);
        //"order": [[ 2, "desc" ]]
        return Data;
    }       
</script>

但这仍然很麻烦。另一种选择可能是:

switch(size) {
    case 2:
        unit /=2;
    case 4:
        unit /= 2;
    ....
}

答案 4 :(得分:1)

我只是使用一系列可能的除数。

如果要更改的数字,请将其扩展为class

如果存在某种数学进展(例如d[n+1] = d[n] + 4),则即时得出除数。

int[] divisors = {2, 6, 10};

int doIt(int n, int unit) {
    for (int i : divisors) {
        if (n == i) {
            unit /= 2;
        }
    }
    return unit;
}

答案 5 :(得分:1)

一种神秘的方式:

unit >>= ((size & -253) == 2) ? 1 : 0;

说明:

  • 2-254范围内的数字也在0-255范围内。您可以使用~255 = 0xffffff00进行按位AND;如果该值不为零,则超出该范围;
  • 要检查计算number % 4,请使用3进行按位AND;将其与2进行比较,看看是否number % 4 == 2

因此,要检查数字是否满足这两个条件,我们可以使用上面两个位掩码的按位AND计算size的按位AND:如果满足两个条件,则结果为2。

因此:

(size & (~255 | 3)) == 2   (simplifies to)   (size & -253) == 2.