第一篇博客,今天似乎充满了鸡血,开始刷LeetCode,做一下记录。
题目为从排序的数组中删除重复的元素,还是没有什么思路,对于数组一无所知。看了一下discuss
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length <= 0){
return 0;
}
int j = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] != nums[j]){
nums[++j] = nums[i];
}
}
return j + 1;
}
}
在本地运行,不通,我知道肯定不通,就直接去judging,然后,出现错误,排错,了解了以下几点:
1. nums=0; 四不像,数组与数组元素的区分,nums 是数组名字,nums[]表示的是数组,nums[0]表示第一个元素。
本题需要判断是不是非空数组,判断的话应该用‘ == ’(我不知道怎么判[] ,用元素为零是不对的),所以用数组的长度。
2.数组名.length 表示的是数组的长度,可以不用指出来这是int型,这是数组的属性。
3.运行时出现Line 8: java.lang.ArrayIndexOutOfBoundsException: 2 删空格不对,原来是数组下标越界,也就是说你访问的元素索引大于了数组的个数-1。
回头检查我的代码,果然,没背准确,i与j 在赋值时出错,就说怎么不理解呢,应该是把j索引的重复元素,赋值到i索引的元素,j是去索引新的元素,所以是拿它去dosomething.
4.++i, 先赋给i,在加一,来确定新数组的长度,即返回值。