python 刷leetcode 题目(36)

347前K个高频元素

给定一个非空的整数数组,返回其中出现频率前 高的元素。

例如,

给定数组 [1,1,1,2,2,3] , 和 k = 2,返回 [1,2]

注意:

  • 你可以假设给定的 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , 是数组的大小。

思路:运用python的内置函数

class Solution(object):
    def topKFrequent(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        #### 最先想到就是python的内置函数来解决这个问题
        # from collections import Counter
        # c = Counter(nums)
        # res = []
        # for item in c.most_common(k):
        #     res.append(item[0])
        # return res
        
        #### the second method
        data, res = {}, []
        for num in nums:
            data[num] = data[num] + 1 if num in data else 1
        sorted_data= sorted(data.items(), key=lambda x: x[1], reverse=True)
        for i in range(k):
            res.append(sorted_data[i][0])
        return res
    
        

python几种根据的value值进行排序的方法:

sorted_data= sorted(data.items(), key=lambda x: x[1], reverse=True)  ### 利用内置函数 

import operator
sorted_data = sorted(data.items(), key = operator.itemgetter(1), reverse=True) #### 借助operator

f = zip(data.values(),data.keys())  ### zip 函数,zip 之后,zip函数默认会对第一个元素进行排序的,如何取消排序?测试没有成功
sorted_data = sorted(f, reverse=False)

数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

代码:

class Solution(object):
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        #### the first method
        # nums = sorted(nums, reverse = True)
        # return nums[k-1]
        
        #### the second method,使用的是冒泡排序,很遗憾,超时了
        for i in range(len(nums)-1, -1, -1):
            for j in range(i):
                if nums[j] < nums[j + 1]:
                #     temp = nums[j]
                #     nums[j] = nums[j + 1]
                #     nums[j + 1] = temp
                    nums[j], nums[j+ 1] = nums[j+1], nums[j]
        return  nums[k-1]
    


你可能感兴趣的:(python)