基本上,我的一个任务是如果数组是奇数,删除中间元素或者如果数组是偶数,则删除中间的两个元素。
这是我的代码,这可能是草率的,因为这是我高中Java的第一年。
'(1 2 . 3)
= '(1 . (2 . 3))
= (cons 1 (cons 2 3))
如果我们遇到困难,我正在按照老师给我们的伪代码。当我运行它时,它会添加一个额外的元素。
例如,我的数组3,6,-2,8,9在运行后变为3,6,8,9,9,
创建一个名为" 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."]
有什么建议吗?
答案 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