java - 按索引从周期序列 0,1,2,3,2,1,0,1... 获取值的最简单方法是什么?

标签 java algorithm math language-agnostic

例如,我有一个周期性序列,从 0 开始,然后是 1,2,直到 3,然后开始下降到 2,1,然后是 0,然后又是 1。令函数为 f(min,max,x),其中 x 是索引,所以:

f(0,3,0)=0
f(0,3,1)=1
f(0,3,2)=2
f(0,3,3)=3
f(0,3,4)=2
.
.
.
f(0,3,9)=3

我试过类似的方法:

public static int f(int min,int max,int x){
    int r=min;
    int increment=1;
    for(int i=0;i<x;i++){
        if(r==max){
            increment=-1;
        }else if(r==min){
            increment=1;
        }
        r+=increment;
    }
    return r;
}

但我觉得它很长而且效率低下,有没有更简单的方法来实现 f(min,max,x)?

或者是否可以仅通过一行完成,例如 int result=(some +-*/,mod,ternary operator... to min,max,x)?

最佳答案

int f(int min, int max, int x) {
    const int len = (max - min) * 2;
    const int offset = (x + len - 1) % len;
    const int ans = (offset + 1) % len;
    return min + ans > max ? min + len - ans : min + ans;
}

查一下live here

关于java - 按索引从周期序列 0,1,2,3,2,1,0,1... 获取值的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693812/

相关文章:

c - 对非常大的数字进行算术运算的算法

python - 使用 numpy.fft 的时间带宽积(高斯宽度)

python - 给定三个坐标点,如何检测它们之间的角度何时超过 180 度?

java - unsafe.compareAndSwapInt 第一个参数 menanig

java - 使用 2D 三边测量查找对象的位置

java - Jackson 2.4 反序列化时寻找旧类

C++ : How can I calculate a cost of a method (Algorithm Analysis)

来自两行值等式的MySQL外键?

java - 在Android应用程序(Java)中保存首选项的最快方法?

java - Java中int a[5],int a[],int a[]={2,3}的区别