[英]Invert Elements in ArrayList<Integer> Java
好的,所以此方法的重點是反轉類型為ArrayList的元素。 因此,如果我有以下要素:
5 6 7 8 9 10
一旦調用該方法,元素的位置應按如下方式反轉:
10 9 8 7 6 5
這是方法,任何建議將不勝感激:)。
public void invertElements()
{
for (int i = list.size()-1; i <= -1; i--)
{
int temp = list.get(i);
for(int j = 0; j < list.size()-1; j++)
{
list.set(j, temp);
}
}
}
list是我的ArrayList的名稱。
更新:只是這樣嘗試過:
public void invertElements()
{
int index = 0;
for (int i = list.size()-1; i > -1; i--)
{
int temp = list.get(i);
list.set(index, temp);
index++;
if(index == list.size()-1)
{
break;
}
}
}
輸出為:10、9、8、9、10。有人可以向我解釋為什么嗎?
您可以在每次迭代時獲取列表的末端並交換它們:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
for (int i = 0; i < list.size()/2; i++){
int temp = list.get(i);
int temp2 = list.get(list.size()-1-i);
list.set(i, temp2);
list.set(list.size()-1-i, temp);
}
for(Integer i : list)
System.out.print(i+"-");
給出輸出:
10-9-8-7-6-5-4-3-2-1-
在第一次迭代中: temp = 1 / temp2 = 10
:我們交換它們
在第二次迭代中: temp = 2 / temp2 = 9
:我們交換它們
然后循環,直到遍歷列表的所有元素,即列表的大小除以2。
解決方法是
public void invertElems(List<Integer> list) {
for (int i = 0; i < list.size() / 2; ++i) { // we only need iterating half of the size of list
int elem = list.get(i); // we store element in additional variable
list.set(i, list.get(list.size() - i - 1)); // we set i-th elementh with i-th element from the back
list.set(list.size() - i - 1, elem);
}
}
線性時間。 隨意問的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.