2727. 判断对象是否为空
2727. 判断对象是否为空
题目
Given an object or an array, return if it is empty.
- An empty object contains no key-value pairs.
- An empty array contains no elements.
You may assume the object or array is the output of JSON.parse
.
Example 1:
Input: obj =
Output: false
Explanation: The object has 2 key-value pairs so it is not empty.
Example 2:
Input: obj = {}
Output: true
Explanation: The object doesn't have any key-value pairs so it is empty.
Example 3:
Input: obj = [null, false, 0]
Output: false
Explanation: The array has 3 elements so it is not empty.
Constraints:
obj
is a valid JSON object or array2 <= JSON.stringify(obj).length <= 10^5
Can you solve it in O(1) time?
题目大意
给定一个对象或数组,判断它是否为空。
- 一个空对象不包含任何键值对。
- 一个空数组不包含任何元素。
你可以假设对象或数组是通过 JSON.parse
解析得到的。
提示:
obj
是一个有效的 JSON 对象或数组2 <= JSON.stringify(obj).length <= 10^5
你可以在 O(1) 时间复杂度内解决这个问题吗?
解题思路
在这道题中,需要在 O(1) 时间复杂度内判断一个对象或数组是否为空。由于输入是通过 JSON.parse()
生成的合法 JSON 对象或数组,直接对这些数据结构进行操作。
然而,标准的 JavaScript 操作(如 Object.keys()
)用于判断对象是否为空的复杂度通常为 O(n),因为这些方法需要遍历对象或数组的所有属性或元素。
要实现 O(1) 时间复杂度的解法,标准 JavaScript 无法在不遍历元素的情况下实现对象或数组的快速判断。所以,在常规环境下,我们无法实现纯 O(1) 的判断操作。
复杂度分析
- 时间复杂度:
O(n)
- 判断数组是否为空的时间复杂度为 O(1),因为
.length
是一个常量时间操作。 - 判断对象是否为空的时间复杂度是 O(n),因为
Object.keys()
需要遍历对象的所有属性。
- 判断数组是否为空的时间复杂度为 O(1),因为
- 空间复杂度:
O(1)
,使用了常数个变量。
代码
/**
* @param {Object|Array} obj
* @return {boolean}
*/
var isEmpty = function (obj) {
if (Array.isArray(obj)) {
// 对于数组,检查是否为空
return obj.length === 0;
} else if (typeof obj === 'object' && obj !== null) {
// 对于对象,检查是否有 key-value 对
return Object.keys(obj).length === 0;
}
return false;
};