19-9-30

Posted newliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19-9-30相关的知识,希望对你有一定的参考价值。

1.独一无二的出现次数:https://leetcode-cn.com/problems/unique-number-of-occurrences/

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。

如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

自己的方法:

 1 class Solution(object):
 2     def uniqueOccurrences(self, arr):
 3         """
 4         :type arr: List[int]
 5         :rtype: bool
 6         """
 7         count_list = list()
 8         one_arr = set(arr)
 9         for each_arr in one_arr:
10             count_list.append(arr.count(each_arr))
11         if len(count_list)==len(set(count_list)):
12             return True
13         else:
14             return False

思路:通过set来进行二次去重

收获:发现了一个好东西就是Counter,可以调用Counter生成字典 from collections import Counter 

2.分糖果

给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。

https://leetcode-cn.com/problems/distribute-candies/

class Solution(object):
    def distributeCandies(self, candies):
        """
        :type candies: List[int]
        :rtype: int
        """
        a = len(candies)/2
        b = len(set(candies))
        result_num = a if b>a else b
        return result_num

思路:很曲折 开始以为要统计数 后来发现偶数长度这个条件很关键

3.泰波那契序列 https://leetcode-cn.com/problems/n-th-tribonacci-number/

泰波那契序列 Tn 定义如下: 

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

class Solution(object):
    def tribonacci(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n==0:
            return 0
        if n==1:
            return 1
        if n==2:
            return 1
        a = 0
        b = 1
        c = 1
        for num in range(3,n+1):
            sum = a + b + c
            a = b
            b = c
            c = sum
        return sum

思路:累加,看了别人的代码学了个缓存的,有空下来研究一哈

import functools

@functools.lru_cache(None)

4.买卖股票的最佳时机 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        result = 0
        for i in range(1, len(prices)):
            tmp = prices[i] - prices[i - 1]
            if tmp > 0: result += tmp
        return result

思路:这个题 我没做出来TAT 看了别人的思路

单独的交易日:前一天买,今天卖,收益就是p2-p1

连续的增长:我们第一天买,最后一天卖就可以,相当于每天都在买卖pn-p1 = (p2-p1)+(p3-p2)+...+(pn-pn-1)

连续的减少:别买卖了

5.有效的字母异位词 https://leetcode-cn.com/problems/valid-anagram/

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if len(s)!=len(t):
            return False
        s_list = list(s)
        t_list = list(t)
        s_list.sort()
        t_list.sort()
        for num in range(0,len(s)):
            if s_list[num]!=t_list[num]:
                return False
        return True

思路:自己思路就是,如果长度不一样就一定不是,然后对两个进行排序后对比

看到别人的一个思路,通过set去重复来得到这个词用的字母都是什么,然后通过对两个

进行count,如果两个count一致就是异位词

6.复写零 https://leetcode-cn.com/problems/duplicate-zeros/submissions/

给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

注意:请不要在超过该数组长度的位置写入元素。

要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

class Solution(object):
    def duplicateZeros(self, arr):
        """
        :type arr: List[int]
        :rtype: None Do not return anything, modify arr in-place instead.
        """
        num = 0
        while num<len(arr):
            if arr[num]==0:
                arr.insert(num,0)
                arr.pop()
                num = num + 2
            else:
                num = num + 1

思路:没啥思路 是0就insert 然后pop 记得跳过下一个 因为下一个0 是你自己insert的

看了一下不用insert方法

发现index为0后,对range(index,len(arr))进行换值处理,最后index+1 = 0

7.移除元素 https://leetcode-cn.com/problems/remove-element/

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        num = 0
        while num < len(nums):
            if nums[num]==val:
                nums.remove(nums[num])
            else:
                num = num + 1

思路:没啥思路 就是开始就想到了remove但是突然对remove的原理有点懵,有空复习一下

以上是关于19-9-30的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器