Efficient way to store array with repeating values?
Without a better understanding of what the data is or how you intend to use it it's impossible to give you real recommendations.

However it is simple enough to store your data in flash memory. 

Since X is just a sequential value it can, as you have noted, be ignored.

For the rest, a simple array in flash which you then read with pgm_read_&lt;X&gt;() where &lt;X&gt; is the data size that you are using.

All this can be read on the Arduino PROGMEM Reference Page although the documentation is not great.

So here's a little example:

const int values[] PROGMEM = {
   100, 399, 2847, 1, -497, 32, 4370
};

void setup() {
    Serial.begin(115200);
    for (int i = 0; i &lt; 7; i++) {
        Serial.println((int)pgm_read_word(&amp;values[i]));
    }
}

void loop() {
}


The casting of the return from pgm_read_word as an int is needed to interpret the sign bit properly (it returns unsigned by default).