0

我有两个数组,一个称为单词,另一个称为数据。我无法将字符串从数据转换为单词。到目前为止我有

    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"}

但是,它在最后移动了一个额外的时间。

4

3 回答 3

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;
}
于 2013-01-01T22:55:22.180 回答
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;  
}

但是这个算法可以改进。words现在它的复杂度是 O(n*m) 但如果将数组中的元素移动到位置而不是 1,它可以提高到 O(n + m) data.length。但是在这种情况下你需要更加小心,因为你可以得到ArrayOutOfBoundException.

于 2013-01-01T22:45:12.990 回答
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;
    }
于 2013-01-01T22:48:47.140 回答