int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」

这篇具有很好参考价值的文章主要介绍了int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」,Java8,LeetCode,笔记,list,数据结构,java,leetcode,后端

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:文章来源地址https://www.toymoban.com/news/detail-621858.html

        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;
    }

到了这里,关于int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 慕课网Go-2.数组、slice、map、list

    2024年02月15日
    浏览(42)
  • mybatis双重foreach实现遍历map中的两个list数组

    前端传值时可能会有多个字段传递过来,需要后台将这多个字段拼接为 name in (? , ?) and name1 in (? , ?) and name2 in (? , ?) 作为sql查询条件…如下图sql语句,即实现多个and xxx in(?,?,?) 拼接 前端传递的是json字符串,json中name和infos是一对具有对应关系的对象,且json中会有多条这种对象

    2024年02月15日
    浏览(41)
  • 第三大的数

    414、第三大的数

    2024年02月15日
    浏览(36)
  • 判断int或Integer变量值为空值null

    1.int型变量的值不能为空值null 2.Integer类表示一个int值,但可以包含一个空值null 3.判断Integer变量是否为空值null:Integer变量== null;Integer变量!= null demo示例程序如下: 运行结果:

    2024年02月11日
    浏览(50)
  • springboot读取yml文件中的list列表、数组、map集合和对象方法实例

    目录前言application.yml定义list集合application.yml定义数组类型总结 前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型,支持类对象类型,下面我们来实战下这些形式的配置如何取值 applicatio

    2024年02月09日
    浏览(53)
  • int和Integer的区别,Java为什么要设计包装类呢?

    1.默认值不同 作为成员变量来说,int的初始默认值为 0 ,而Integer为 null 。 2.存储的内存位置不同 Integer是一个类,其对象存储在 堆 内,int是基本数据类型,存放在 栈 中。 3.作用不同 Integer类里面封装了很多的属性以及方法,使用起来会更加的 灵活 。 Java为什么要设计基本类

    2024年02月13日
    浏览(51)
  • int和Integer的区别是什么,自动装箱和自动拆箱到底是什么?

    基本类型 vs. 包装类型: int 是Java的基本数据类型,它直接存储整数值,不具备任何方法或属性。基本类型通常更高效,占用更少的内存。 Integer 是 int 的包装类,它是一个对象,具有方法和属性。包装类提供了一些额外的功能,如转换为其他数据类型、比较、转换为字符串等

    2024年02月08日
    浏览(40)
  • Scala的集合操作之可变数组和不可变数组,可变List集合与不可变List集合,可变Set与不可变Set操作,可变和不可变Map集合和元组操作

    for推导式的用法 Scala中的for推导式是一种用于对集合进行迭代和转换的强大工具。它提供了一种简洁的语法来处理集合中的元素,并生成新的集合或执行特定的操作。 for推导式的基本语法如下: 其中, pattern 是一个模式,用于解构集合中的元素, collection 是要遍历的集合。

    2024年02月10日
    浏览(63)
  • LeetCode 36. 有效的数独

    请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 有效数独的三个条件: 1.同一个数字在每一行只能

    2024年01月16日
    浏览(45)
  • 剑指offer45 把数组排成最小的数

    链接 其实这道题,大概看完就知道是一个排序的问题,无非就是数组中的元素以一个合适的位置排好序,这样从头加到尾,组成的整体数字最小!(题目中也暗示你排序问题了) 个人捉摸了一会,这道题能很好地锻炼仿函数的编写规则和库函数sort()的配套使用,还有就是巧妙地

    2024年01月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包