【特别重要!!!快排的partition思想】【leetcode题解】【M】【71】Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

Note: 
You may assume k is always valid, 1 ≤ k ≤ array's length.

Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.

Subscribe to see which companies asked this question


思路:使用快拍的partition函数:

  • O(N) best case / O(N^2) worst case running time + O(1) memory
The smart approach for this problem is to use the selection algorithm (based on the partion method - the same one as used in quicksort).

快速排序算法里的partition函数用来解决这样一个问题:给定一个数组arr[]和数组中任意一个元素a,重排数组使得a左边都小于它,右边都不小于它。
start、end分别为数组第一个元素和最后一个元素的索引

 // povitIndex为数组中任意选中的数的索引




class Solution(object):

    def partition(self,nums,start,end):
        pivot = nums[end]

        temp = start

        for i in range(start,end):
            if nums[i] < pivot:
                #print nums[i]
                nums[i],nums[temp] = nums[temp],nums[i]
                temp += 1
                #print nums,temp
        nums[end],nums[temp] = nums[temp],nums[end]
        #print nums
        return temp

    def findKthLargest(self, nums, k):
        low = 0
        high = len(nums) - 1

        k = len(nums) - k
        #print k
        while low < high:
            j = self.partition(nums,low,high)
            #print j
            if j < k:
                low = j + 1
            elif j > k:
                high = j - 1
            else:
                break
        return nums[k]

        '''
        nums.sort()
        return nums[-k]
        '''
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """



当你使用gdisk工具对磁盘进行分区操作时,出现“Error! Couldn't seek to partition table”错误提示,通常表示gdisk无法正确读取或定位到磁盘的分区表。以下是一些可能的原因和解决方法: ### 可能的原因 1. **磁盘损坏**:磁盘可能存在物理损坏或文件系统损坏。 2. **分区表损坏**:分区表可能被破坏或丢失。 3. **磁盘被占用**:磁盘可能正在被其他进程使用,导致gdisk无法访问。 4. **权限问题**:当前用户可能没有足够的权限访问磁盘设备。 ### 解决方法 1. **检查磁盘状态**: 使用`lsblk`或`fdisk -l`命令检查磁盘状态,确认磁盘是否被正确识别。 ```sh lsblk sudo fdisk -l ``` 2. **尝试修复分区表**: 使用`fsck`命令检查并修复文件系统错误。 ```sh sudo fsck /dev/sdX ``` 其中`/dev/sdX`是你的磁盘设备名。 3. **使用其他工具**: 尝试使用`fdisk`或`parted`等工具查看和修复分区表。 ```sh sudo fdisk /dev/sdX sudo parted /dev/sdX ``` 4. **检查磁盘健康状态**: 使用`smartctl`工具检查磁盘的健康状态。 ```sh sudo smartctl -a /dev/sdX ``` 5. **权限问题**: 确保以root用户或具有足够权限的用户运行gdisk。 ```sh sudo gdisk /dev/sdX ``` 6. **磁盘被占用**: 确认没有其他进程正在使用该磁盘。可以使用`lsof`命令检查。 ```sh sudo lsof /dev/sdX ``` ### 总结 出现“Error! Couldn't seek to partition table”错误时,首先需要检查磁盘的物理和逻辑状态,确保磁盘没有被损坏并且分区表完整。然后,尝试使用不同的工具和方法进行修复。如果问题依然存在,可能需要寻求专业的数据恢复服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值