我有两个数组,一个叫做单词,另一个叫做数据。我无法将字符串从数据转换为单词。到目前为止我有
public String[] shiftRightX(String[] words, String[] data)
{
for(int i= words.length - 1; i>0; i--)
{
words[i]=words[i-1];
for (int x = 0; x < data.length; x++)
{
words [0] = data[x];
}
}
return words;
}
例如,这应该导致:
shiftRightX({"1", "2", "3"}, {"1", "2"}) → {"2", "1", "1"}
shiftRightX({"1", "2", "3"}, {"1"}) → {"1", "1", "2"}
shiftRightX({"1", "2"}, {"1", "2"}) → {"2", "1"}
但是,它最后会增加一个额外的时间。
答案 0 :(得分:1)
更快的版本:
public String[] shiftRightX(String[] words, String[] data)
{
if (data.length < words.length)
System.arraycopy(words, 0, words, data.length, words.length - data.length);
for (int i = Math.max(0, data.length - words.length); i < data.length; i++)
words[data.length - i - 1] = data[i];
return words;
}
答案 1 :(得分:0)
尝试交换循环:
public String[] shiftRightX(String[] words, String[] data)
{
for (int x = 0; x < data.length; x++)
{
for(int i= words.length - 1; i>0; i--)
{
words[i]=words[i-1];
}
words[0] = data[x];
}
return words;
}
但是这个算法可以改进。现在它的复杂度是O(n * m),但是如果将words
数组中的移位元素转换为data.length
位置而不是1,则可以将其改进为O(n + m)。但是你需要更加小心在这种情况下,因为您可以获得ArrayOutOfBoundException
。
答案 2 :(得分:0)
我认为你要做的是这样的事情:
public String[] shiftRightX(final String[] words, final String[] data){
String[] result = new String[words.length];
int i = 0;
for(String str : data){
result[i] = str;
i++;
}
for(int j=0;i<words.length;j++){
result[i] = words[j];
i++;
}
return result;
}