美文网首页
刷题3-排序3

刷题3-排序3

作者: 喵姬Amy | 来源:发表于2019-03-23 14:01 被阅读0次

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]

输出: [2,2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

输出: [4,9]

说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。

我们可以不考虑输出结果的顺序。

进阶:

如果给定的数组已经排好序呢?你将如何优化你的算法?

如果 nums1 的大小比 nums2 小很多,哪种方法更优?

如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

class Solution:

    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:

        mylist = []

        for i in nums1:

            if i in nums2 and len(nums2) != 0:

                mylist.append(i)

                nums2.remove(i)

        return mylist

if __name__ == '__main__':

    res = Solution()

    rt = res.intersect([1,2,2,1],[2,2])

    print(rt)

复习了list的remove函数,是在源列表上操作,会改变源列表

但是我的代码运行时间还有运行内存太高,故而我换成如下操作:

思路:用字典

把list的各个元素当做key值,value值同一为1,有key有重复的话,value加1

第二个列表对比,且满足key所对应的value不等于0的条件下,才会追加mylist列表

class Solution:

    def func(self,nums1,nums2):

        mydict = {}

        mylist = []

        for j in range(len(nums1)):

            mydict[nums1[j]] = 0

        for i in range(len(nums1)):

            if nums1[i] in nums1:

                mydict[nums1[i]] += 1

            else:

                mydict[nums1[i]] = 1

        for iter in range(len(nums2)):

            if mydict.__contains__(nums2[iter]) and mydict[nums2[iter]] > 0:

                mylist.append(nums2[iter])

                mydict[nums2[iter]] -= 1

        return mylist

if __name__ == '__main__':

    res = Solution()

    rt = res.func([1,2,2,1],[2,2])

    print(rt)

总结:dict的key检查是否在这个字典中,Python2中是用has_key()函数,而在python3中删了这个函数,可以用__contains__方法。还有列表转化为字典的方法。这是一个列表转化为字典的方法。

两个列表转化字典的方法有dict(zip(列表1,列表2));其中列表1为key,列表2为value,且一短的列表为标尺。例如:

>>> a

[1, 2, 2, 3, 4]

>>> b

[12, 34, 4, 123, 123, 4534, 1323, 423434]

>>> dict(zip(a,b))

{1: 12, 2: 4, 3: 123, 4: 123}

相关文章

  • 刷题3-排序3

    给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2...

  • OJ lintcode 链表插入排序

    用插入排序对链表排序您在真实的面试中是否遇到过这个题?Yes样例Given 1->3->2->0->null, r...

  • 173. 链表插入排序

    用插入排序对链表排序样例Given 1->3->2->0->null, return 0->1->2->3->nu...

  • 有序链表删除重复节点

    问题1 删除排序链表中重复元素,例如l1 为 1->2->2->3->3->4,删除之后为,1->2->3->4,...

  • OJ lintcode 合并两个排序链表

    将两个排序链表合并为一个新的排序链表您在真实的面试中是否遇到过这个题?Yes样例给出 1->3->8->11->1...

  • 028-Remove All Duplicates frou S

    描述 在一个排序的单链表中移除所有的重复元素。 输入: ​ 1->2->3->3->4->4->5 返回 ​ ...

  • LeetCode 148 [Sort List]

    原题 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。 样例给出 1->3->2->null...

  • 归并算法在于链表排序

    题目:对链表进行排序。 示例 1:输入: 4->2->1->3输出: 1->2->3->4 单向链表在排序的时候,...

  • 希尔排序、堆排序、归并排序

    -希尔排序 克服插入排序每次只能交换一对元素的缺点5-间隔的排序,3-间隔的排序,1-间隔排序(最后必须是1-间隔...

  • 刷题-排序4

    题目: 给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。 对数组进行排序,以便当 A[i] 为奇...

网友评论

      本文标题:刷题3-排序3

      本文链接:https://www.haomeiwen.com/subject/gcksvqtx.html