YangQG 面试题汇总

一、交叉链表

问题:

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

解题思想:

双指针

备注:不是快慢指针,如果两个长度相同可以用快慢指针,因为两个链表长度不同。

package org.example.YangQianGuan;

class Node {
    int data;
    Node next;

    Node(int val) {
        this.data = val;
        this.next = null;
    }

    @Override
    public String toString() {
        return " {data: " + this.data + " next: " + this.next + "} ";
    }
}

public class IntersectionNode {
    public Node getStartInter(Node headA, Node headB) {
        if (headA == null || headB == null) {
            return null;
        }
        Node pA = headA;
        Node pB = headB;

        while (pA!= pB) {
            pA = pA == null? headB : pA.next;
            pB = pB == null? headA : pB.next;
        }
        return pA;
    }


    public static void main(String[] args) {
        // node list
        Node node8 = new Node(8);
        Node node4 = new Node(4);
        Node node5 = new Node(5);

        node8.next = node4;
        node4.next = node5;

        // A list
        Node headA = new Node(4);
        Node nodeA1 = new Node(1);
        headA.next = nodeA1;
        nodeA1.next = node8;

        // B List
        Node headB = new Node(5);
        Node nodeB1 = new Node(6);
        Node nodeB2 = new Node(1);
        headB.next = nodeB1;
        nodeB1.next = nodeB2;
        nodeB2.next = node8;

        IntersectionNode intersectionNode = new IntersectionNode();
        Node startInter = intersectionNode.getStartInter(headA, headB);
        System.out.println(startInter);
    }
}

二、对称二叉树

Tree

package org.example.YangQianGuan;

class Tree{
    int data;
    Tree left;
    Tree right;

    public Tree(int data, Tree left, Tree right) {
        this.data = data;
        this.left = left;
        this.right = right;
    }
}

public class IsMirrorTree {

    public boolean isMirror(Tree root) {
        if (root == null) {
            return true;
        }

        return this.isMirrorCore(root.left, root.right);
    }

    public boolean isMirrorCore(Tree left, Tree right) {
        if (left == null && right == null) {
            return true;
        }

        if (left == null || right == null) {
            return false;
        }

        if (left.data != right.data) {
            return false;
        }

        return isMirrorCore(left.left, right.right) && isMirrorCore(left.right, right.left);
    }

    public static void main(String[] args) {
        Tree right4 = new Tree(3, null, null);
        Tree right3 = new Tree(4, null, null);
        Tree right2 = new Tree(2, right3, right4);

        Tree left4 = new Tree(4, null, null);
        Tree left3 = new Tree(3, null, null);
        Tree left2 = new Tree(2, left3, left4);
        Tree node1 = new Tree(1, left2, right2);

        IsMirrorTree isMirrorTree = new IsMirrorTree();
        boolean mirror = isMirrorTree.isMirror(node1);
        System.out.println(mirror);
    }

}

三、轮转数组

package org.example.YangQianGuan;

import java.util.Arrays;
import java.util.List;

public class RightRunArr {

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7};
        int n = 3;

        RightRunArr rightRunArr = new RightRunArr();
        int[] core = rightRunArr.core(nums, n);
        System.out.println(Arrays.toString(core));
    }

    private int[] core(int[] nums, int n) {
        int[] res = new int[nums.length];
        int bit = n % nums.length;
        System.out.println(bit);

        int[] left = Arrays.copyOfRange(nums, 0, nums.length - bit);
        int[] right = Arrays.copyOfRange(nums, nums.length - bit, nums.length);

        int i = 0;
        for (int i1 : right) {
            res[i] = i1;
            i++;
        }

        for (int i1 : left) {
            res[i] = i1;
            i++;
        }

        return res;
    }
}

四、接雨水

题目描述

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 
示例 2:输入:height = [4,2,0,3,2,5]   输出:9

提示:

n == height.length
1 <= n <= 2 * 
0 <= height[i] <= 

package org.example.YangQianGuan;

/**
 * 暴力求解法
 * 总水量 = 除了左右两个边界,【1,lenth-1】所有点位能接水的量的总和
 * 题目转化为如何求解每个点位的接水量 = Math.min(次点左边最大高度,此点右边最大高度)-heiht(i)
 */
public class TrapSolution {
    public int trap(int[] height) {
        if (height.length<=1) {
            return 0;
        }

        int totleWater = 0;
        int leftMax = 0, rightMax = 0;

        for (int i = 1; i < height.length-1; i++) {
            // left max
            for (int j = 0; j < i; j++) {
                leftMax = Math.max(leftMax, height[j]);
            }

            // right max
            for (int j = i+1; j < height.length; j++) {
                rightMax = Math.max(rightMax, height[j]);
            }

            totleWater += Math.min(leftMax,rightMax)-height[i];

        }

        return totleWater;
    }

    public static void main(String[] args) {
        TrapSolution solution = new TrapSolution();

        // 测试用例 1
        int[] height1 = {0,1,0,2,1,0,1,3,2,1,2,1};
        System.out.println(solution.trap(height1)); // 输出: 6

        // 测试用例 2
        int[] height2 = {4,2,0,3,2,5};
        System.out.println(solution.trap(height2)); // 输出: 9
    }
}

五、字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:输入: strs = [""] 输出: [[""]]

示例 3:输入: strs = ["a"] 输出: [["a"]]

提示:

1 <= strs.length <= 
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母

package org.example.YangQianGuan;

import java.util.*;

public class GroupAnagrams {

    public static void main(String[] args) {
        String[] s = {"eat", "tea", "tan", "ate", "nat", "bat"};

        GroupAnagrams groupAnagrams = new GroupAnagrams();
        String[] res = groupAnagrams.getGroup(s);
    }

    private String[] getGroup(String[] s) {
        int length = s.length;
        if (length==0) {
            return new String[0];
        }

        Map<String, List<String>> map = new HashMap<>();
        for (String string : s) {
            char[] charArray = string.toCharArray();
            Arrays.sort(charArray);
            String s1 = new String(charArray);

            List<String> orDefault = map.getOrDefault(s1, new ArrayList<>());
            orDefault.add(string);
            map.put(s1, orDefault);
        }

        String res[] = new String[map.size()];
        int n = 0;

        for (Map.Entry<String, List<String>> stringListEntry : map.entrySet()) {
            List<String> value = stringListEntry.getValue();
            String[] array = value.toArray(String[]::new);
            res[n] = Arrays.toString(array);
            n++;
        }

        System.out.println(Arrays.toString(res));

        return res;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fastapi 使用

参考&#xff1a; https://fastapi.tiangolo.com/zh/tutorial/first-steps/https://fastapi.tiangolo.com/zh/tutorial/first-steps/ FastAPI 用于基于标准 Python 类型提示使用 Python 构建 API&#xff0c;使用 ASGI 的标准来构建 Python Web 框架和服务器。所有简单理解&a…

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告&#xff0c;需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看

泛目录和泛站有什么差别

啥是 SEO 泛目录&#xff1f; 咱先来说说 SEO 泛目录是啥。想象一下&#xff0c;你有一个巨大的图书馆&#xff0c;里面的书架上摆满了各种各样的书&#xff0c;每一本书都代表着一个网页。而 SEO 泛目录呢&#xff0c;就像是一个超级图书管理员&#xff0c;它的任务就是把这些…

k8s基础(6)—Kubernetes-存储

Kubernetes-存储概述 k8s的持久券简介 Kubernetes的持久卷&#xff08;PersistentVolume, PV&#xff09;和持久卷声明&#xff08;PersistentVolumeClaim, PVC&#xff09;为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储&#xff0c;PVC是对这部分存储的请求。…

深度学习-卷积神经网络反向传播梯度公式推导

这篇文章非常棒&#xff0c;单样本单通道的反向传播梯度公式推导我都理解了。为了防止找不到原网页&#xff0c;所以特复制于此 参考&#xff1a; https://zhuanlan.zhihu.com/p/640697443

论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)

Diffusion policy: Visuomotor policy learning via action diffusion&#xff08;下&#xff09; 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…

C#学习笔记 --- 简单应用

1.operator 运算符重载&#xff1a;使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类&#xff1a; 同名方法写在不同位置&#xff0c;可以当成一个类使用。 3.索引器&#xff1a;使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念&#xff0c;下面我们来具体到每一层的具体内容进行讲解&#xff0c;每一层的每一个功能块力求用一个总览图&#xff0c;外加一个例子的图给大家进…

【2024年华为OD机试】 (CD卷,100分)- 最大N个数与最小N个数的和(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个数组&#xff0c;编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。 说明&#xff1a; 数组中数字范围 [0, 1000]最大N个数与最小N个数不能有重叠&#xff0c;如有重叠&#xff0c;输入非法返回 -1输入非法返回 -1 …

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换&#xff0c;后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件&#xff1a; ToolboxCreator.exe/ini:toolboxcreator…

cursor+deepseek构建自己的AI编程助手

文章目录 准备工作在Cursor中添加deepseek 准备工作 下载安装Cursor &#xff08;默认安装在C盘&#xff09; 注册deepseek获取API key 在Cursor中添加deepseek 1、打开cursor&#xff0c;选择设置 选择Model&#xff0c;添加deepseek-chat 注意这里去掉其他的勾选项&…

《零基础Go语言算法实战》【题目 2-7】defer 关键字特性

《零基础Go语言算法实战》 【题目 2-7】defer 关键字特性 下面代码的输出是什么&#xff1f;请说明原因。 package main import ( "fmt" ) func main() { deferFunc() func deferFunc() { defer func() { fmt.Println("value1") }() defer func() {…

如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路

在CES 2025上&#xff0c;Mobileye展示了端到端自动驾驶系统Mobileye Drive™&#xff0c;通过高度集成的传感器、算法和计算平台&#xff0c;可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间&#xff0c;Mobileye创始人兼首席执行官Amnon …

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛&#xff0c;旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程&#xff0c;体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

超大规模分类(三):KNN softmax

传统的分类损失计算输入数据和每个类别中心的距离&#xff0c;来优化模型的训练。KNN softmax通过选择和输入数据最相关的top-K个类别&#xff0c;仅计算输入数据和top-K个类别中心的距离&#xff0c;以减小计算量。 KNN softmax首次诞生于达摩院机器智能技术实验室发表的SIGKD…

MySQL素材怎么导入Navicat???

不管用什么方法都要先关掉MySQL服务&#xff0c;并且提前备份数据&#xff01; 1.有sql文件时候。 打开navicat&#xff0c;运行sql文件 然后点击后面三个点&#xff0c;选中要运行的sql文件&#xff0c;开始。 鼠标右键刷新一下&#xff0c;就能看到sql文件中的表了 2.没有s…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言&#xff1a;AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中&#xff0c;企业对于智能化应用的需求日益增长。然而&#xff0c;传统的数据应用开发方式面临着诸多挑战&#xff0c;如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

解决aerich init -t xx 报错ModuleNotFoundError: No module named ‘tomli_w‘

今天在学习fastapi的时候&#xff0c;发现一款数据库迁移工具&#xff0c;通过这个工具可以根据模型类来对数据库做出改变。 随跟着学: 在执行 aerich init -t settings.TORTOISE_ORM的时候&#xff0c; 彼其娘之。。 报了一些错误&#xff1a; Traceback (most recent ca…