Java查找数组中出现次数超过一半的数字:超市商品销售案例
Java查找数组中出现次数超过一半的数字:超市商品销售案例
背景: 一家超市经理希望通过分析历史销售数据找到最受欢迎的商品,以便更好地把握市场需求和优化供应商谈判策略。为此,需要一个程序快速识别出销售数量超过一半的商品。
问题描述: 给定一个非空整数数组,其中每个元素表示一种商品的编号,数组中某个元素出现的次数超过了数组长度的一半。请找出这个编号。
示例:
超市的历史销售数据示例: [1201, 2301, 1201,3302, 1201, 4603, 1201, 1201, 1201]
输出: 1201
Java解决方案:
以下是使用Java编写的解决方案,用于找出销售数量超过一半的商品编号:javaimport java.util.HashMap;import java.util.Map;
public class BestSellingProduct { public static int findBestSellingProduct(int[] products) { Map<Integer, Integer> countMap = new HashMap<>(); int halfCount = products.length / 2;
for (int product : products) { countMap.put(product, countMap.getOrDefault(product, 0) + 1); if (countMap.get(product) > halfCount) { return product; } }
return -1; // 如果没有找到销售数量超过一半的商品,则返回-1 }
public static void main(String[] args) { int[] salesData = {1201, 2301, 1201, 3302, 1201, 4603, 1201, 1201, 1201}; int bestSellingProduct = findBestSellingProduct(salesData); System.out.println('Best selling product: ' + bestSellingProduct); }}
代码解析:
- 哈希表统计: 该解决方案使用一个哈希表
countMap来记录每个商品的销售次数。2. 遍历统计: 遍历销售数据数组,对每个商品更新其在哈希表中的计数。3. 实时判断: 如果某个商品的销售次数超过了数组长度的一半,则立即返回这个商品编号。4. 返回值: 如果遍历完数组后仍未找到符合条件的商品,则返回 -1。
效率分析:
- 时间复杂度: O(n),其中 n 是销售数据数组的长度,因为我们只需要遍历一次数组。* 空间复杂度: O(k),其中 k 是售卖商品的种类数量,因为在最坏情况下,我们需要存储所有商品的计数。
总结:
该Java解决方案利用哈希表高效地解决了在数组中查找出现次数超过一半的数字问题,并结合超市商品销售案例进行了清晰易懂的讲解。该方案时间复杂度低,代码简洁易懂,适合实际应用场景。
原文地址: https://www.cveoy.top/t/topic/cxGA 著作权归作者所有。请勿转载和采集!