get product of array

本文介绍了一种算法,用于生成给定整数数组的所有可能乘积子集,并按升序排列输出。例如,对于输入{2,3,5}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求数组的乘积,比如输入{2,3,5}输出{2,3,5,6,10,15,30},再比如 {2,3,4,5}输出{2,3,4,5,6,8,10,12,15,20,24,30,40,60,120},

import java.util.*;

public class GetProductSubsetIII {

	public static List<Integer> getProduct(int[] nums) {
		List<Integer> res = new ArrayList<Integer>();
		Arrays.sort(nums);
		helper(res, nums, 1, 0, 0);
		Collections.sort(res);
		return res;
	}

	private static void helper(List<Integer> res, int[] nums, int prod, int level, int start) {
		if (level != 0) {
			res.add(prod);
		}
		for (int i = start; i < nums.length; i++) {
			helper(res, nums, prod * nums[i], level + 1, i + 1);
		}
	}

	public static void main(String[] args) {
		int[] array = { 2, 3, 5 };
		for (int i : getProduct(array)) {
			System.out.println(i);
		}
	}
}


### 如何解析嵌套的 JSON 数组 在大数据处理场景下,JSON 数据结构因其灵活性被广泛使用。然而,在实际应用中,经常遇到复杂的嵌套 JSON 结构,这给数据提取带来了挑战。 #### 使用 SQL 的 `GET_JSON_OBJECT` 函数 对于简单的 JSON 字段提取,可以利用 Hive 提供的内置函数 `GET_JSON_OBJECT` 来实现。例如,如果需要从字段 `message` 中获取键 `content` 对应的值,则可以通过以下语句完成: ```sql SELECT GET_JSON_OBJECT(message, '$.content') AS aa FROM table_json_01; ``` 此方法适用于单层 JSON 或者浅层次嵌套的情况[^1]。 #### 处理复杂嵌套 JSON 数组 当面对更深层次的嵌套 JSON 数组时,仅依靠 `GET_JSON_OBJECT` 是不够的。此时需借助 Hive 的 LATERAL VIEW 和 explode() 方法来展开数组中的每一项作为独立记录。以下是针对引用[2]提到的例子的具体解决方案: 假设原始 JSON 数据存储于表 `table_nested_json` 的列 `data` 中,其内容形式如下: ```json { "base": { "code": "xm", "name": "project" }, "list": [ { "ACode": "cp1", "AName": "Product1", "BList": [ {"BCode": "gn1", "BName": "Feature1"}, {"BCode": "gn2", "BName": "Feature2"} ] }, { "ACode": "cp2", "AName": "Product2", "BList": [{"BCode": "gn1", "BName": "Feature1"}] } ] } ``` 为了将上述 JSON 展开成所需的平面化表格结构 (即每条 userId 记录独占一行),可以采用以下查询逻辑: ```sql SELECT base_code, base_name, ACode, AName, BCode, BName FROM ( SELECT t.base['code'] AS base_code, t.base['name'] AS base_name, l.ACode, l.AName, b.BCode, b.BName FROM table_nested_json LATERAL VIEW OUTER EXPLODE(list) exploded_list AS l -- 将 list 数组拆分为多行 LATERAL VIEW OUTER EXPLODE(l.BList) exploded_blist AS b -- 进一步拆解内部 BList 数组 ) subquery; ``` 通过两次调用 `LATERAL VIEW` 及 `EXPLODE()` 函数分别作用于外层数组 (`list`) 和内层数组 (`BList`) 上,最终实现了完全扁平化的结果集输出[^2]。 #### Spark DataFrame API 实现方式 除了基于 HiveQL 查询之外,在分布式计算框架 Apache Spark 下也可以高效地解析此类嵌套 JSON 文件。下面展示了一个完整的 Scala 示例程序用于加载并转换类似的 JSON 文档: 首先定义输入路径以及创建初始 RDD: ```scala val inputPath = "/path/to/your/json/file.json" // 创建 SparkSession 并读入文件 import org.apache.spark.sql.SparkSession val spark = SparkSession.builder().appName("ParseNestedJson").getOrCreate() val df = spark.read.format("json").load(inputPath) df.printSchema() // 查看 schema 以便确认字段名 ``` 接着按照需求逐步分解各层级的数据结构: ```scala import org.apache.spark.sql.functions._ // Step 1: Extract 'base' fields into separate columns. val withBaseFieldsDf = df.select( col("base.code").as("codename"), col("base.name").as("name"), explode(col("list")).as("item") ) // Step 2: Further expand the inner array within each item of 'list'. val flattenedDf = withBaseFieldsDf.select( $"codename", $"name", $"item.ACode".as("acode"), $"item.AName".as("aname"), explode($"item.BList").as("bItem") ).select( $"codename", $"name", $"acode", $"aname", $"bItem.BCode".as("bcode"), $"bItem.BName".as("bname") ) flattenedDf.show(false) ``` 以上代码片段展示了如何运用 Spark DataFrame API 完成相同的目标——即将高度嵌套的 JSON 转换成易于分析的关系型布局[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值