持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
1 <= nums.length <= 1000 <= nums[i] <= 1000
二、思路分析:
我们拿到本题,读取题目内容要在给定的数组中,找到-个数x,且x数需要满足在nums中有x个元素大于或等于x,则就是nums是一个特殊数组,x是该数组的特征值。看到这个规则我们还是不好理解,根据题目给出的示列,找出以下规律:
- 特征值:x,取值范围在0~len(nums)之间
- 当 nums 中存在 x 个元素大于等于 x,则返回特征值x
- 当 nums 不存在 x值,则返回 -1
根据以上对题目中内容进行理解,本次我们可以使用如下三中方法进行求解:
-
方式一:暴力求解
- 我们只要在遍历nums长度范围内的x取值范围内进行取值i
- 每取一个值i时,在nums中找到符合大于等于x的次数ans
- 通过ans等于x时,则返回特殊值i
class Solution(object): def specialArray(self, nums): """ :type nums: List[int] :rtype: int """ for i in range(len(nums)+1): ans = 0 for num in nums: if num >=i: ans +=1 if ans == i : return i return -1 -
方法二:排序+一次遍历
- 对于nums数组中,只要找出元素个数大于等于x的,为了减少重复查询的次数,我们可以先对数组nums进行排序(升序),长度n为len(nums)
- 找出最小的元素nums[i] >= n-i时,则特征值就为n-i
- 当 i 并且 nums[i-1] >= n -i 或者遍历完成n个数后都没有满足要求,则返回 -1
class Solution(object): def specialArray(self, nums): """ :type nums: List[int] :rtype: int """ nums.sort() n = len(nums) for i in range(n): if i and nums[i-1] >= n - i : return -1 if nums[i] >= n - i : return n-i return -1
三、总结:
本题考察对数组中元素进行遍历查找,当数组元素具有一定规律时,我们可以借助排序方法先对数组进行处理,然后在进行查找会提高代码处理效率,本次AC提交记录如下:
- 时间复杂度:O(nlogn),n为nums的长度
- 空间复杂度:O(logn),对 nums进行排序的栈空间
以上是本期内容,欢迎大佬们点赞评论,下期见~~~