每日LeetCode——数组去重
1、给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
public int removeElement(int[] nums, int val) {
//利用双指针,一个i 一个j 当j指向的值不是给定的值时,
//则需要将此值按照下标 i (因为j比i跑得快,只有在不出现指定元素时i才会往后移,否则只有j会
//往后移,直到j再一次寻找到与指定值不同的值,而且i此时刚好指向的是第一个与指定元素相同的
//值)依次重排数组元素。
int i = 0;
for (int j = 0; j < nums.length; j++) {
if (nums[j]!=val) {
nums[i] = nums[j];
i++;
}
}
return i;
}
2、
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
public int removeDuplicates(int[] nums) {
int i = 0;
for (int j = i+1; j < nums.length; j++) {
if (nums[i]!=nums[j]) {
i++;
nums[i] = nums[j];
}
}
return i+1;
}
这两道题思路一样,都是用了两个速度不一样的“指针”,i,j.所以第二题就不给详细画图啦,其实一个简单的数组问题,拥有类似的思路。其他何尝不是呢?
-------------------------------------------------------想多了一点-------------------------------------------------------
身置大三暑假马上大四,看到自己还有好多不会的,做到那些大公司的真题,都不会,笔试编程毫无头绪,内心的沮丧快要突破了自己的承受力,这也怪自己之前没有怎么去注重算法。现在才感到身心憔悴,也只能怪自己。所以我最近开始问自己,为啥一心想找工作,不去考研呢?我也不知道怎么回答自己,也许当时一心找个工作由于很多原因,我已经不是很明确那些原因怎么在一起的,但是我记得找工作对我的家庭来说是有用的。不过现在能想起来这个问题,也可能是在路上太迷茫啦,总觉得会迷路,找不到一个准确的方向。可是应该冷静一下,思考一下,你现在就算去考研啦!一定能考上一个理想的大学吗?身边有许多考研的,考研也不是一件说说的事,纳税回叙你会更加的焦虑,更加恨自己。凡事都没有固定的结局,但是却有一个不可变得开始。我不会去考虑考研的,即使最后结果不尽人意。想自己努力一下,看看自己是不是一事无成。希望那些奔波在考研路上的同学,还有找工作的道友。放弃很容易,但坚持下去一定很帅!一起努力!