27.移动元素 - 力扣(LeetCode)

我不喜欢这个世界,我只喜欢LeeCode

大家好呀,小夜斗力扣打卡学习 day 4!

题目描述:
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:
给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。

  • 核心思想:元素覆盖法,定义俩变量指针 i i i , j j j i i i 的作用为记录值不为val元素的个数 j j j 的作用从队首遍历到对尾,遇到值不为val的元素,就将该元素值复制给 i i i对应的元素值
public int removeElement(int[] nums, int val)
{
    
    
	int i = 0; //i从0开始
	for (int j = 0; j < nums.length; j++)
	{
    
    
		// j也从0开始
		// 如果索引j对应的值不是要删除的元素
		if(nums[j] != val)
		{
    
    
			nums[i] = nums[j]  // 将索引j对应的值复制给索引i对应的值
			i++;  // i向后移动一位
		}
	}
	return i;  // 最终i的长度则为数组中值不为val元素的个数
}

在这里插入图片描述

上述题目是力扣官方的解,小夜斗通过自己的理解把自己的注释打上去了,后期可能还会自己制作动图补上去哈!

好啦,今天的分享就到这里啦,小夜斗要去练烧火棍啦!see you !

  • 在这个星球上,你很重要,请珍惜你的珍贵! ~~~夜斗小神社

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xtreallydance/article/details/113096182