首页 > 其他分享 >6205.反转之后不同整数的数目

6205.反转之后不同整数的数目

时间:2022-10-16 18:33:05浏览次数:51  
标签:10 数组 nums int 反转 整数 6205 哈希

LeetCode-315-2022-10-16 10:30 6205.反转之后不同整数的数目

给你一个由正整数组成的数组nums 。

你必须取出数组中的每个整数,反转其中每个数位,并将反转后得到的数字添加到数组的末尾。这一操作只针对 nums 中原有的整数执行。

返回结果数组中 不同 整数的数目。

来源:力扣315周赛(LeetCode)

难度:中等

早上刚刚看了数据结构里的哈希表,知道了能够去重,结果就考了这道题。P217.存在重复元素&P53.最大子数组和

示例 1:

输入:nums = [1,13,10,12,31]
输出:6
解释:反转每个数字后,结果数组是 [1,13,10,12,31,1,31,1,21,13] 。
反转后得到的数字添加到数组的末尾并按斜体加粗表示。注意对于整数 10 ,反转之后会变成 01 ,即 1 。
数组中不同整数的数目为 6(数字 1、10、12、13、21 和 31)。

示例 2:

输入:nums = [2,2,2]
输出:1
解释:反转每个数字后,结果数组是 [2,2,2,2,2,2] 。
数组中不同整数的数目为 1(数字 2)。

提示:

1 <= nums.length <= 105
1 <= nums[i] <= 106

题解:

将原数组的各个数和其反转后的数都存入表中,最后输出表的大小即可

class Solution {
    public int countDistinctIntegers(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
            set.add(reverseNum(nums[i]));
        }
        return set.size();
    }
    
    private static Integer reverseNum(int num) {
        int temp = 0;
        while (num != 0) {
            temp = temp * 10 + num % 10;
            num = num / 10;
        }
        return (int) temp == temp ? (int) temp : 0;
    }
}

HashMap

HashSet是HashMap的set实现,哈希表逻辑上是数组和单向链表的结合体。数组的查询效率高,随机增删效率低;单向链表增删效率高,查询效率低。而哈希表将这两种数据结构结合,充分发挥他们的优点。

高情商:哈希表比数组增删快,比链表查询快,哈希表优于他们

低情商:哈希表没有数组查询快,没有链表增删快,哈希表谁都不如

哈希表是一个一维数组,数组的每一个元素都是一个单向链表。

image

一图流理解,出自BerglingYY的博客

标签:10,数组,nums,int,反转,整数,6205,哈希
From: https://www.cnblogs.com/Pilo-pillow/p/16796725.html

相关文章