
My code:
public class Solution {
public int removeElement(int[] nums, int val) {
if (nums == null || nums.length == 0)
return 0;
int del = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == val)
del++;
else
nums[i - del] = nums[i];
}
return nums.length - del;
}
public static void main(String[] args) {
Solution test = new Solution();
int[] nums = {4, 5};
System.out.println(test.removeElement(nums, 4));
}
}
My test result:

這次作業(yè)感覺(jué)有點(diǎn)問(wèn)題,他說(shuō)是讓我返回新數(shù)組的長(zhǎng)度,那么我就直接遍歷數(shù)組,統(tǒng)計(jì)出不同數(shù)字的個(gè)數(shù),返回,不就行了嗎?結(jié)果報(bào)錯(cuò)。
然后我又新建一個(gè)數(shù)組,把不同的數(shù)字放進(jìn)去,再讓nums用這個(gè)引用。結(jié)果還是報(bào)錯(cuò)。
按了下做法,只能在原數(shù)組進(jìn)行操作,那你說(shuō)清楚啊。
只不過(guò)這個(gè)做法還是相當(dāng)巧妙的。這道題沒(méi)做完,中途聽(tīng)了兩個(gè)多小時(shí),所以回來(lái)做思路已經(jīng)跟不上了。
補(bǔ):剛我想了下,為什么一定要按照這個(gè)辦法做呢?這個(gè)辦法坐下來(lái),尾巴部分也會(huì)有很多val的,清理的不干凈。但想了下又覺(jué)得很對(duì),為什么,因?yàn)樗祷亓薾ew length 啊。然后數(shù)組是引用,也被修改了。那么之后就可以。
for (int i = 0; i < removeElement(nums, 4); i++) {
// other operations
}
**
總結(jié):Array
今天是爺爺忌日,沒(méi)想到一晃9年過(guò)去了。那個(gè)時(shí)候的我怎么樣,現(xiàn)在的我又怎么樣。
**
Anyway, Good luck, Richardo!
My code:
public class Solution {
public int removeElement(int[] nums, int val) {
if (nums == null || nums.length == 0)
return 0;
int del = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == val)
del++;
else
nums[i - del] = nums[i];
}
return nums.length - del;
}
}
基本差不多。
Anyway, Good luck, Richardo!
My code:
public class Solution {
public int removeElement(int[] nums, int val) {
if (nums == null || nums.length == 0)
return 0;
int i = 0;
int j = nums.length - 1;
while (i <= j) {
while (i < nums.length - 1 && nums[i] != val) {
i++;
}
while (j >= 0 && nums[j] == val) {
j--;
}
if (i <= j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j--;
}
}
return i;
}
}
首先這道題目的前提是, 順序可改變。
那么最上面的做法存在問(wèn)題。
如果,整個(gè)數(shù)組中只存在幾個(gè)他要求刪除的value,而且這幾個(gè)value就在最前面,那么他每次遍歷一個(gè)元素的時(shí)候,都需要重新賦下值。效率不高。
如果采用現(xiàn)在這種做法,那么很多數(shù)都不用去動(dòng)。真正的內(nèi)存寫操作會(huì)很少。
Anyway, Good luck, Richardo! -- 09/12/2016