文章目录
- 1、int[ ] 转 Integer[ ]:
- 2、两道leetcode题遇到的场景:
- 2.1、int[ ] 转 List<Integer> :
- 2.2、int[ ] 转 Map:
1、int[ ] 转 Integer[ ]:
public static void main(String[] args) {
int[] nums = {1, 2, 3};
Integer[] array = Arrays.stream(nums).boxed().toArray(Integer[]::new);
System.out.println(Arrays.toString(array));
}
输出:
// [1, 2, 3]
2、两道leetcode题遇到的场景:
众所周知,将普通数组转为List集合,可以通过JDK提供的诸多方法来减轻我们的编码负担,所以接下来小名借用两个leetcode题中的场景来分享下数组转集合的使用方法:
2.1、int[ ] 转 List<Integer> :
List<Integer> ints = Arrays.stream(nums)
.boxed()
.collect(Collectors.toList());
看到开头的「int[ ]转Integer[ ]」
可能有的小伙伴并不知道什么情况会用。当然平日开发我们断然不会这样为难自己,一般入参和出参都会很自然的定义为数据类型为包装类的Integer
的数组(Integer[]
)。
但是作为码农的小名刷题时,发现一个有意思的现象:当你想对一个int[ ]
数组进行降序排序(注意这里不是给List
降序排序)时,「Arrays.sort()」
方法只为非包装类的int
提供了 升序排序 ,并不提供对其 降序排序 的方法
题目地址: https://leetcode.cn/problems/third-maximum-number/
414. 第三大的数
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 1:
输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。
示例 2:
输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。
示例 3:
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/third-maximum-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Coding:
public int thirdMax(int[] nums) {
// 将int[]降序排序、去重并转为List<Integer>
List<Integer> ints = Arrays.stream(nums)
.boxed()
.distinct()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList());
// 获得最大的数字
int num = ints.get(0);
// 初始化计数器
int count = 1;
for (int i = 1; i < ints.size(); i++) {
// 数组长度小于3时,返回数组中第一个即最大的数字
if (ints.size() < 3) {
return ints.get(0);
}
int intnum = ints.get(i);
// 返回第三大的数字
if (intnum < num && count <= 2) {
num = intnum;
count++;
}
}
return -1;
}
2.2、int[ ] 转 Map:
Map<Integer,Long> map= Arrays.stream(nums)
.boxed()
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
通过上面「int[ ]转List」
可能有使用过JDK8-lambda表达式
的小伙伴会想看下如果将int[ ]
数组转为 Map
这种数据结构后的样子,毕竟Map
有很多好用的场景,例如下面这道题的应用。
题目地址:https://leetcode.cn/problems/majority-element/
169. 多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3]
输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2]
输出:2
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Coding:
public int majorityElement(int[] nums) {
// 获取 n/2 的数组长度
int size = nums.length>>1;
// 将 数字-出现次数 以Map的Key-Value的结构分组
Map<Integer,Long> map= Arrays.stream(nums)
.boxed()
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
// 遍历数字,获取数字出现次数
for (Map.Entry<Integer,Long> entry : map.entrySet()) {
// 返回其中的多数元素
if (entry.getValue() > size) {
return entry.getKey();
}
}
return -1;
}