欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每日LeetCode——数组去重

程序员文章站 2022-04-15 14:09:57
...

 

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;
	}

每日LeetCode——数组去重

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.所以第二题就不给详细画图啦,其实一个简单的数组问题,拥有类似的思路。其他何尝不是呢?

-------------------------------------------------------想多了一点-------------------------------------------------------

身置大三暑假马上大四,看到自己还有好多不会的,做到那些大公司的真题,都不会,笔试编程毫无头绪,内心的沮丧快要突破了自己的承受力,这也怪自己之前没有怎么去注重算法。现在才感到身心憔悴,也只能怪自己。所以我最近开始问自己,为啥一心想找工作,不去考研呢?我也不知道怎么回答自己,也许当时一心找个工作由于很多原因,我已经不是很明确那些原因怎么在一起的,但是我记得找工作对我的家庭来说是有用的。不过现在能想起来这个问题,也可能是在路上太迷茫啦,总觉得会迷路,找不到一个准确的方向。可是应该冷静一下,思考一下,你现在就算去考研啦!一定能考上一个理想的大学吗?身边有许多考研的,考研也不是一件说说的事,纳税回叙你会更加的焦虑,更加恨自己。凡事都没有固定的结局,但是却有一个不可变得开始。我不会去考虑考研的,即使最后结果不尽人意。想自己努力一下,看看自己是不是一事无成。希望那些奔波在考研路上的同学,还有找工作的道友。放弃很容易,但坚持下去一定很帅!一起努力!

 

相关标签: 数组 去重