100天算法入门 - 每日三题 - Day8同构字符串存在重复元素翻转二叉树

Posted 哪 吒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天算法入门 - 每日三题 - Day8同构字符串存在重复元素翻转二叉树相关的知识,希望对你有一定的参考价值。

大家好,我是哪吒,一个热爱编码的Java工程师,本着“欲速则不达,欲达则欲速”的学习态度,在程序猿这条不归路上不断成长,所谓成长,不过是用时间慢慢擦亮你的眼睛,少时看重的,年长后却视若鸿毛,少时看轻的,年长后却视若泰山,成长之路,亦是渐渐放下执念,内心归于平静的旅程。

也许,我们永远都不会知道自己能走到何方,遇见何人,最后会变成什么样的人,但一定要记住,能让自己登高的,永远不是别人的肩膀,而是挑灯夜战的自己,人生的道路刚刚启程,当你累了倦了也不要迷茫,回头看一看,你早已不再是那个年少轻狂的少年。

  大连友好广场


算法是进阶架构师的基础,基础不牢,地动山摇,2021-8-14起开始刷题,目标100天,300道LeetCode算法题,分享是学习的最好方式,加油,嗨起来。

1、LeetCode 205.同构字符串

题目

给定两个字符串 s 和 t,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

小编菜解

public static boolean isIsomorphic(String s, String t) {
    Map<String, String> map = new HashMap<>();
    for (int i = 0; i < s.length(); i++) {
        //第一个字符串当前字符
        String sc = String.valueOf(s.charAt(i));
        //第二个字符串当前字符
        String tc = String.valueOf(t.charAt(i));
        //如果第一个map包含此字符,判断第二个字符串当前位置值是否等于map的value,不等返回false
        if (map.containsKey(sc)){
            if(!map.get(sc).equals(tc)){
                return false;
            }
        }else{//如果不包含
            //此时也不应该存在值为tc的key
            if(map.containsValue(tc)){
                return false;
            }
            //放入map
            map.put(sc, tc);
        }
    }
    return true;
}

大佬指点江山

public static boolean isIsomorphic(String s, String t) {
    Map<Character, Character> map1 = new HashMap<Character, Character>();
    Map<Character, Character> map2 = new HashMap<Character, Character>();
    for (int i = 0; i < s.length(); i++) {
        //第一个字符串当前字符
        char sc = s.charAt(i);
        //第二个字符串当前字符
        char tc = t.charAt(i);
        //如果map1包含,则值必须等于tc,,,,,如果map2包含此值,则此值必须等于sc,,否则报错
        if (map1.containsKey(sc) && map1.get(sc)!=tc || map2.containsKey(tc) && map2.get(tc)!=sc){
            return false;
        }
        map1.put(sc,tc);
        map2.put(tc,sc);
    }
    return true;
}

唯一的不足就是Character的问题,,,谨记,谨记。

2、LeetCode 217.存在重复元素

题目

给定一个整数数组,判断是否存在重复元素。

如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

小编菜解 

public boolean containsDuplicate(int[] nums) {
   List<Integer> list = new ArrayList<>();
    for (int i = 0; i < nums.length; i++) {
        if(list.contains(nums[i])){
            return true;
        }
        list.add(nums[i]);
    }
    return false;
}

提示超出时间限制!

大佬指点江山

public static boolean containsDuplicate(int[] nums) {
    Set<Integer> set = new HashSet<Integer>();
    for (int n : nums) {
        if (!set.add(n)) {
            return true;
        }
    }
    return false;
}

Set检索元素效率低下,删除和插入效率高;List查找元素效率高,插入删除元素效率低。

使用contains方法查询元素是否存在HashSet要比ArrayList快的多。

3、LeetCode 226.翻转二叉树

题目

翻转一棵二叉树。

小编菜解

public TreeNode invertTree(TreeNode root) {
    if(root == null){
        return null;
    }
    TreeNode left = invertTree(root.left);
    TreeNode right = invertTree(root.right);
    root.left = right;
    root.right  = left;
    return root;
}

推荐阅读

【100天算法入门 - 每日三题 - Day1】二叉树的中序遍历、两数之和、整数反转

【100天算法入门 - 每日三题 - Day2】二分查找、第一个错误的版本、搜索插入位置

【100天算法入门 - 每日三题 - Day3】回文数、罗马数字转数字、最大公共前缀

【100天算法入门 - 每日三题 - Day4】有效的括号、删除有序数组中的重复项、实现strStr

【100天算法入门 - 每日三题 - Day5】最后一个单词的长度、相同的树、买卖股票的最佳时机

【100天算法入门 - 每日三题 - Day6】对称二叉树、二叉树的最大深度、将有序数组转换为二叉搜索树

【100天算法入门 - 每日三题 - Day7】验证回文串、只出现一次的数字、多数元素

以上是关于100天算法入门 - 每日三题 - Day8同构字符串存在重复元素翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

100天算法入门 - 每日三题 - Day12Nim游戏3的幂4的幂

100天算法入门 - 每日三题 - Day15判断子序列最长回文数Fizz Buzz

100天算法入门 - 每日三题 - Day16第三大的数字符串中的单词数排列硬币

100天算法入门 - 每日三题 - Day5最后一个单词的长度相同的树买卖股票的最佳时机

100天算法入门 - 每日三题 - Day13反转字符串反转字符串中的元音字母两个数组的交集

100天算法入门 - 每日三题 - Day17找到所有数组中消失的数最小操作次数使数组元素相等分发饼干