题目的大意就是:
给定一个数组和一个值,就地删除该值的所有实例并返回新的长度。
要求时间复杂度为O(1),不能创建新的数组。
返回的删除元素后的数组长度n,要求删除后的前n个元素是别的未删除的元素。
也就是说:你在发现给定值的时候要把这个值给挪到数组最后。
其实python是很好实现的,以为python里面的数组就是list列表,它本身就有remove()的方法,但是Java的数组是没有这个方法的,ArrayList是有的,但是LeetCode给的输入时int[]类型。最后还是用了一种巧妙的方式实现了。
Java实现:
class Solution {
public int removeElement(int[] nums, int val) {
int length = 0; // 设置指针,指向数组起始位置
for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) { //若等于给定值就跳过去,不等就赋值,指针后移
nums[length] = nums[i];
length++;
}
}
return length;
}
}
Python3实现:
class Solution:
def removeElement(self, nums, val):
for num in sorted(nums):
if num == val:
nums.remove(val)
print(len(nums))