跳至主要內容

2727. 判断对象是否为空


2727. 判断对象是否为空

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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 array
  • 2 <= 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),使用了常数个变量。

代码

/**
 * @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;
};