【java】496. Next Greater Element I

本文提供了一个LeetCode题目“下一个更大元素I”的解决方案。通过使用哈希映射记录元素位置,实现了从一个数组中寻找另一个数组中每个元素在原数组中的下一个更大的数。代码简洁高效。

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

问题链接https://leetcode-cn.com/problems/next-greater-element-i/description/

public int[] nextGreaterElement(int[] nums1, int[] nums2) {
         int[] res = new int[nums1.length];
        Map<Integer,Integer> map = new HashMap<>();
        for(int i =0;i<nums2.length;i++)
        	map.put(nums2[i],i);
        for(int i = 0;i<nums1.length;i++) {
        	int pos = map.get(nums1[i]);
        	int val = -1;
        	for(int j =pos+1;j<nums2.length;j++) {
        		if(nums2[j]>nums1[i]) {
        			val = nums2[j];
        			break;
        		}
        	}
        	res[i] = val;
        }
        return res;
    }

 

### Java Stream `orElse` 方法详解 在Java Stream API中,`Optional<T>` 类提供了多种处理可能为空值的方法,其中就包括 `orElse(T other)`。此方法用于当 Optional 实例存在值时返回该值;如果不存在,则返回指定的默认值。 #### 使用场景 当流操作最终收集到的结果可能是空的情况下,可以利用 `orElse` 提供一个合理的替代选项来避免潜在的 NullPointerException 或者其他逻辑错误[^1]。 #### 基本语法 ```java T result = stream().findFirst().orElse(defaultValue); ``` 这里 `stream()` 表达的是任意形式的数据源转换成的流对象调用链路,而 `defaultValue` 则是在找不到匹配项时所使用的备选方案。 #### 示例代码 下面是一个简单的例子展示如何使用 `orElse`: ```java import java.util.Arrays; import java.util.List; public class OrElseExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3); int firstNumber = numbers.stream() .filter(n -> n > 0) .findFirst() .orElse(-1); // 如果没有找到符合条件的元素则返回-1 System.out.println("First number greater than zero is " + firstNumber); // 当没有任何元素满足条件时的情况 boolean hasNegativeNumbers = false; int negativeResult = numbers.stream() .filter(n -> n < 0 && (hasNegativeNumbers = true)) .findFirst() .orElseThrow(() -> new IllegalStateException("No negative numbers found")); if (!hasNegativeNumbers){ System.out.println("There are no elements less than zero."); } else{ System.out.println("The first negative number encountered was: "+negativeResult); } } } ``` 在这个例子中,程序尝试获取列表中的第一个正数并打印出来。如果没有发现任何大于零的整数,默认情况下将会输出 `-1`。对于负数部分,由于过滤器不会触发(因为给定列表里只有正值),所以会抛出自定义异常表示未找到小于零的数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值