今天是刷LT的一天,好好干饭,好好努力,好好加油哦l
leetcode题目:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度
例子
输入:nums = [3,2,2,3], val = 3
输出:2
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5
这里也是用到pop函数,遍历nums的元素,如果元素与val一致,则pop走该元素。
pop() 函数用于移除列表中的一个元素(默认最后一个元素)
并且返回被删除元素的值,例子如下:
test = ['Google', 'Runoob', 'Taobao']
list_pop=test.pop()
print( "删除的项为 :", list_pop)
输出:
删除的项为 : Taobao
但是如果直接从前面来pop相同元素,即:
L = len(nums)-1
for i in range(L):
if (nums[i-j] == val):
nums.pop(i)
这样会导致每次pop一个元素出去,nums的其他元素位置往前进一位。然后pop函数会出现这样的error:IndexError: pop index out of range
所以,为了保持nums的元素位置,则从后面尾巴开始遍历,然后再pop元素,这样就不会影响前面的元素。
def removeElement(nums, val) -> int:
L = len(nums)-1
for i in range(L, -1, -1):
#从尾巴开始遍历
if(nums[i] == val):
nums.pop(i)
return len(nums)
leetcode题目:
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
例子:
输入: J = "aA", S = "aAAbbbb"
输出: 3
输入: J = "z", S = "ZZ"
输出: 0
直接把jewels用set函数放入列表,然后开始遍历stones,如果在列表里,即加上1
def numJewelsInStones(jewels, stones):
j = set(jewels)
d = 0
for s in stones:
if s in j:
d += 1
return d