如果长度为奇数,则需要帮助删除数组中的中间元素,如果是偶数,则需要帮助删除中间元素

时间:2016-01-07 03:27:56

标签: java arrays

基本上,我的一个任务是如果数组是奇数,删除中间元素或者如果数组是偶数,则删除中间的两个元素。

这是我的代码,这可能是草率的,因为这是我高中Java的第一年。

'(1 2 . 3) 
= '(1 . (2 . 3))
= (cons 1 (cons 2 3))

如果我们遇到困难,我正在按照老师给我们的伪代码。当我运行它时,它会添加一个额外的元素。

例如,我的数组3,6,-2,8,9在运行后变为3,6,8,9,9,

  1. 创建一个名为" size"的局部变量它存储传入的数组的长度。

    class LossyTrie
      def initialize; @dict = {}; end
    
      def add(str)
        # Break the new string apart into characters, traversing down the trie at each step.
        # As a side effect, if a prefix of str was already present, it will be forgotten.
        # Similarly, if str itself is a prefix of an existing string, nothing will change.
        dict = @dict
        str.each_char do |c|
          dict = (dict[c] ||= {})
        end
      end
    
      def all_strings
        strs = []
        def traverse(dict, so_far, &block)
          for k, v in dict
            if v.empty?
              block.call(so_far + k)
            else
              traverse(v, so_far + k, &block)
            end
          end
        end
        traverse(@dict, "") { |leaf| strs << leaf }
        strs
      end
    end
    
    strs = ["Bochum", "Stu", "Stut", "Stuttt", "Stutt", "Stuttgart", "Heesestr.", "Berl", "Berlin"]
    
    trie = LossyTrie.new
    strs.each { |s| trie.add(s) }
    
    trie.all_strings # => ["Bochum", "Berlin", "Stuttt", "Stuttgart", "Heesestr."]
    
  2. 有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题。

是不是说,例如,如果数组的大小为8(8个元素), 在方法返回一个包含6个元素的新数组后返回的新数组?

我首先将您提供的方法的返回类型更改为int []。

您可以尝试实现堆栈或队列,或者只是坚持使用带有一堆条件的数组。

int size = arr.length;
int newArr[];
if(size % 2 ==0) {
    newArr = new int[size-2];
    for (int i = 0; i < (newArr.length/2); i++) {
        newArr[i] = arr[i];
        System.out.println(newArr[i]);
    }
    for (int i = (newArr.length/2); i < newArr.length; i++) {
        newArr[i] = arr[i+2];
        System.out.println(newArr[i]);
    }
}
else {
    newArr = new int[size-1];
    for(int i = 0; i < (newArr.length/2); i++) {
        newArr[i] = arr[i];
        System.out.println(newArr[i]);
    }
    for (int i = (newArr.length/2); i < newArr.length; i++) {
        newArr[i] = arr[i+1];
        System.out.println(newArr[i]);
    }
}

如果输入为123456,则产生1256 如果输入是12345,则产生1245

答案 1 :(得分:0)

在我看来,在“even”if子句中,你应该只改变

for(int i = x; i <= arr.length - 2; i++)

for(int i = x; i < arr.length - 2; i++)

你需要从1,2,3,4,5,6得到像1,2,5,6,5,6或1,2,5,6这样的数组吗?

答案 2 :(得分:0)

要从数组中删除元素,您需要从现有数组中创建一个新数组,然后返回结果,或者将原始数组的引用更改为新创建的数组。

public static void removeMiddle(int[] myArray)
        {
            int size = myArray.length;
            int[] resultArray;
            if(size % 2 ==0)
            {
                resultArray = new int [myArray.length-2];
            }
            else
            {
                 resultArray = new int [myArray.length-1];

            }
            int mid1 =  myArray.length/2;
            int mid2 = myArray.length/2 - 1;
            int index = 0;
            for(int i=0;i<myArray.length;i++)
            {
                if(size % 2 ==0 && (i==mid1 || i==mid2))
                {
                    continue;
                }
                else if(!((size % 2) ==0) && i==mid1)
                {
                    continue;
                }

                resultArray[index] = myArray[i];
                index++;
            }

            for(int i=0;i<resultArray.length;i++)
            {
                System.out.println("array[" + i + "] = " + resultArray[i]);
            }
        }

如果myArray将值保持为1,2,3,4,5,6,7,则输出将如下所示

array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 5
array[4] = 6
array[5] = 7

如果它将值打为1,2,3,4,5,6,则输出将如下所示

array[0] = 1
array[1] = 2
array[2] = 5
array[3] = 6