LeetCodeday05

news2024/11/20 1:39:36

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:

在这里插入图片描述
在这里插入图片描述

public class Leetcode0207 {
    public static void main(String[] args) {
        // 构造相交链表
        ListNode commonNode = new ListNode(4, new ListNode(5, new ListNode(6)));

        ListNode headA = new ListNode();
        ListNode aNode1 = new ListNode(1);
        ListNode aNode2 = new ListNode(2);
        ListNode aNode3 = new ListNode(3);
        headA.next = aNode1;
        aNode1.next = aNode2;
        aNode2.next = aNode3;
        aNode3.next = commonNode;

        ListNode headB = new ListNode();
        ListNode bNode1 = new ListNode(-1);
        ListNode bNode2 = new ListNode(-2);
        ListNode bNode3 = new ListNode(-3);
        headB.next = bNode1;
        bNode1.next = bNode2;
        bNode2.next = bNode3;
        bNode3.next = commonNode;

        ListNode intersectionNode = getIntersectionNode(headA, headB);
        System.out.println(intersectionNode);


    }

    public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        // 获取A链表长度
        int lengthA = getLength(headA);
        // 获取B链表长度
        int lengthB = getLength(headB);
        //  获取链表长度之差
        int gap = Math.abs(lengthA - lengthB);
        // A 链表长
        if (lengthA >= lengthB) {
           return getCommonNode(headA,headB,gap);
        } else {
            return getCommonNode(headB,headA,gap);
        }

    }

    /**
     * 获取链表长度
     * @param head head
     * @return length
     */
    public static int getLength(ListNode head) {
        ListNode dummyHead = new ListNode();
        dummyHead.next = head;
        ListNode cur = dummyHead;
        int length = 0;
        while (cur.next != null) {
            length++;
            cur = cur.next;
        }
        return length;
    }

    /**
     * 让长链表 移动 length 步
     * @param head 长链表
     * @param length 移动长度
     * @return 移动后链表
     */
    public static ListNode moveNode(ListNode head, int length) {
        ListNode cur = head;
        while (length-- > 0) {
            cur = cur.next;
        }
        return cur;
    }

    public static ListNode getCommonNode(ListNode longNode, ListNode shortNode, int gap) {
        // 让长链表 先走 gap 步
        longNode = moveNode(longNode, gap);
        // 两个链表开始遍历
        while (shortNode != null) {
            // 两个链表节点相同 是相交节点 返回节点
            if (shortNode.equals(longNode)) {
                return shortNode;
            }
            shortNode = shortNode.next;
            longNode = longNode.next;
        }
        // 遍历完都没找到 返回null
        return null;
    }
}

242.有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false

public class Leetcode242 {

    public static void main(String[] args) {

        String s = "ab";
        String t = "abb";
        boolean anagram = isAnagram(s, t);
        System.out.println(anagram);
    }

    public static boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        //数组用作hash映射
        int[] records = new int[26];
        // 第一个数组 向records中加入元素
        for (int i = 0; i < s.length(); i++) {
            records[s.charAt(i) - 'a']++;
        }
        // 第二个数组向 records中减去元素
        for (int i = 0; i < t.length(); i++) {
            records[t.charAt(i) - 'a']--;
        }
        // 看records中元素的值是否都为 0
        for (int record : records) {
            // 不为零说明出现次数不一样
            if (record != 0) {
                return false;
            }
        }
        return true;
    }
}

349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

public class Leetcode349 {
    public static void main(String[] args) {
        int[] nums1 = {12, 34, 4, 4, 5};
        int[] nums2 = {12, 12, 4};
        int[] intersection = intersection(nums1, nums2);
        Arrays.stream(intersection).forEach(s -> System.out.print(s + " "));
    }

    public static int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }

        HashSet<Integer> resultSet = new HashSet<>();
        HashSet<Integer> set = new HashSet<>();
        // nums1 放入set集合
        for (int k : nums1) {
            set.add(k);
        }
        // 遍历 nums2
        for (int k : nums2) {
            // 如果nums1的set中包含 就放到resultSet中
            if (set.contains(k)) {
                resultSet.add(k);
            }
        }
        // set 转为 int []
        return resultSet.stream().mapToInt(x -> x).toArray();

    }
}

202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

在这里插入图片描述

public class Leetcode202 {
    public static void main(String[] args) {

        boolean happy = isHappy(2);
        System.out.println(happy);
    }

    public static boolean isHappy(int n) {
        // 题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现
        // 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
        HashSet<Integer> set = new HashSet<>();
        while (n != 1 && !set.contains(n)) {
            set.add(n);
            n = getNum(n);
        }
        return n == 1;
    }

    private static int getNum(int n) {
        int res = 0;
        while (n > 0) {
            // 获取最低位
            int temp = n % 10;
            res += temp * temp;
            n = n / 10;
        }
        return res;
    }
}

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] ==9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

public class Leetcode1 {
    public static void main(String[] args) {
        int[] nums = {2, 7, 11, 15};
        int target = 9;
        int[] ints = twoSum(nums, target);
        Arrays.stream(ints).forEach(s -> System.out.print(s + " "));
    }

    public static int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            // 获取差值
            int diff = target - nums[i];
            // 判断map中有该 差值吗
            if (map.containsKey(diff)) {
                //有就返回
                return new int[]{i, map.get(diff)};
            }
            //map key存value value为数组下标;
            map.put(nums[i], i);
        }
        return new int[]{};
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT背后的模型

文章目录1.RLHF方法2.ChatGPT中的RLHF方法2.1 微调模型GPT-32.2 训练奖励模型2.3 利用强化学习进一步微调语言模型3.效果4.面临挑战5.参考InstructGPT语言模型&#xff0c;是一个比 GPT-3 更善于遵循用户意图&#xff0c;同时使用通过我们的对齐研究开发的技术使它们更真实、毒…

应急/linux 挂D盾扫描方法

0x00 linux 挂D盾扫描方法 这个方法可以解决Linux下无法使用D盾查杀webshell的困扰 利用ssh将Linux文件系统挂在到win上面&#xff0c;然后扫描就好了 0x01 环境安装 安装D盾 D盾都用过吧&#xff0c;应急经常用来扫一下是否存在 Webshell D盾下载地址 D盾防火墙 (d99ne…

python 性能优化

文章目录性能测试运行速度内存消耗并行加速分布式并行多线程多进程框架即时编译njitcase1 计算熵case2 找到最大概率类别case3 计算两两准确率GPU使用工具关于程序优化的第一个准则是“不要优化”&#xff0c;第二个准则是“不要优化那些无关紧要的部分”。性能测试 性能测试是…

4种FPGA时钟分频 【附源码】:1.偶数分频;2.奇数分频(占空比50%);3.奇数分频(任意无占空比);4.小数分频;

题目来源于牛客网&#xff0c;完整工程源码&#xff1a;https://github.com/ningbo99128/verilog 目录 VL37 偶数分频 VL40 奇数分频&#xff08;占空比50%&#xff09; VL42 奇数分频&#xff08;任意无占空比&#xff09; VL41 任意小数分频 VL37 偶数分频 题目介绍 请…

https的相关知识,为什么https更加安全,为什么要对称与非对称加密,非对称加密的算法

目录 https相比于http更加安全&#xff0c;三个优势&#xff1a; 下面是一些必须知道的问题 1.对称加密与非对称加密&#xff1a; 2.对称加密的密钥SK如何产生和传输&#xff1a; 3.https有两套非对称加密 4.https的哈希一共用于两个地方 5.https的整个流程 https相比于ht…

ElasticSearch数据实时性原理分析与持久化

问题复现 现在有这么一种业务场景&#xff0c;需要将海量的数据通过Hive进行数据清洗并统计&#xff0c;最后落库到ES中&#xff0c;因为需要支持大数据量的分词&#xff0c;模糊搜索&#xff0c;所以考虑用ES而不直接放到Mysql中&#xff0c;前端需要直接对数据进行交互&…

Redis的自增也能实现滑动窗口限流?

文章目录限流核心原理以及代码基于Spring切面实现的注解版本限流是大家开发之路上一定会遇到的需求。比如&#xff1a;限制一定时间内&#xff0c;接口请求请求频率&#xff1b;一定时间内用户发言、评论次数等等&#xff0c;类似于滑动窗口算法。这里分享一份拿来即用的代码&a…

buildroot构建hisi平台根文件系统和工具链

buildroot构建hisi平台根文件系统和工具链 前面使用了arm-hisiv300-linux 工具链来作为Buildroot的外部工具链进行编译&#xff0c;然后遇到了很多编译问题。 https://blog.csdn.net/duapple/article/details/128516133?spm1001.2014.3001.5501 这里不使用hisi的工具链&…

Seata简介

小结&#xff1a; nacos 【name server】&#xff1a;注册中心&#xff0c;解决服务的注册与发现 nacos【config】&#xff1a;配置中心&#xff0c;微服务配置文件的中心化管理&#xff0c;同时配置信息的动态刷新 Ribbon&#xff1a;客户端负载均衡器&#xff0c;解决微服务集…

C++之引用类型,深浅拷贝构造

引用类型&#xff1a;给内存段取别名。 int m 10; //引用&#xff0c;给内存段取别名&#xff0c;所以需要给他一段内存段&#xff0c;而不只是声明。 int& n m;//不是赋值的意思&#xff0c;是别名的意思 想要在被调函数中修改主调函数中定义的变量的值时&#xff0c;…

小程序用户头像昵称获取规则调整与之对应调式策略、新API接口的bug

目录 调整时间 调整背景 调整说明 开发者与之对应的debug策略 1.button里面包含一个image&#xff0c;这种包含关系 2.然后我们可以看到官方给出的是用button组件中的open-type属性并且给到了一个chooseAvatar值&#xff01; 3.我们会发现光放给我们了一个“配置好的”命…

CSAPP Cache Lab

CSAPP Cache Lab 本实验将帮助您了解缓存存储器对 C 语言性能的影响程式。实验室由两部分组成。 在第一部分中&#xff0c;您将编写一个小的 C 程序&#xff08;大约 200-300 行&#xff09;模拟高速缓存的行为。 在第二部分中&#xff0c;您将优化一个小型矩阵转置函数&#…

NoMachine出现 The session negotiation failed的解决方案及踩坑总结

问题情况&#xff1a;我A电脑输入用户名和密码可以远程B电脑&#xff0c;B电脑输入用户名密码就是登录不上A电脑。 B电脑上密码是用的账户密码&#xff08;就是图标是一把钥匙的那个&#xff09;。 A电脑上的密码是用的PIN密码&#xff08;Win11系统推荐的那个&#xff09;。 通…

ArcGIS基础实验操作100例--实验37线要素生成规则或随机采样点

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验37 线要素生成规则或随机采样点 目录 一、实验背景 二、实验数据 三、实验步骤 &…

小程序安全设置的经验分享

一、小程序框架概述 在第一部分小程序框架概述中,将介绍小程序抽象框架、小程序调用框架和小程序初始化流程。下面让大白来逐一介绍。 1、小程序抽象框架 1.1视图层 包含WXML、WXSS和页面视图组件。 WXML是一种类似XML格式的语言,支持数据绑定、条件渲染、列表渲染、自定…

零入门容器云网络-10:基于golang编程netlink包方式操作tun设备

已发表的技术专栏&#xff08;订阅即可观看所有专栏&#xff09; 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

【Linux】静态库和共享库

目录 库是什么 静态库和共享库 库的链接 优缺点 查看使用的库 制作库 制作静态库 静态库的使用 制作共享库 共享库的使用 静态库和共享库的区别 库是什么 库就是预先编译好的方法的集合 .h中是库函数的声明&#xff0c;库函数的实现在库中&#xff0c;如&#xff…

ChatGPT上线了!我在2023年1月2日这一天用上了它!百问百答!我只能说(真NB)算法工程师可以不用百度/Google了!

目录:问答结果1、你有什么nlp算法&#xff1f;2、平台终端3、如何训练深度学习模型&#xff1f;4、如何压缩nlp模型&#xff1f;5、bert模型有哪些用途&#xff1f;6、你知道汽车座舱吗&#xff1f;7、知识图谱有什么用途&#xff1f;8、能给一个构建知识图谱的案例吗&#xff…

S32K144—基于MBD的BLDC六步换相算法

可以简单分为六个功能区域&#xff1a; 1、全局变量 全局变量的定义是建模过程中遇到的第一个难点&#xff0c;因为它涉及到我们软件开发中最基础的东西——数据类型定义&#xff08;Data Types Definition&#xff09;。 在 Simulink 中可以通过 Bus Editor 构建自定义数据类…

【 shell 编程 】第5篇 文本编辑三剑客

文本编辑三剑客 文章目录文本编辑三剑客一、正则表达式1.基本正则表达式元字符2.拓展正则表达式元字符二、grep1.grep2.egrep3.fgrep三、sed四、awk一、正则表达式 1、简介&#xff1a;正则表达式是对字符串&#xff08;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的…