Java2023算法面试题java,python,go三种语言实现

简介: Java2023算法面试题java,python,go

1、判断1-200之间有多少个素数,并输出所有素数

素数:一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。如2,3,5,7,11,13,17…

public class Main {
    public static void main(String[] args) {
        int count = 0;
        for (int i = 2; i <= 200; i++) {
            boolean isPrime = true;
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) {
                System.out.print(i + " ");
                count++;
            }
        }
        System.out.println("\n1-200之间有" + count + "个素数");
    }
}

python

count = 0  # initialize count variable to 0
for num in range(1, 201):  # iterate through numbers 1 to 200
    if num > 1:  # prime numbers are greater than 1
        for i in range(2, num):  # iterate through numbers 2 to num-1
            if (num % i) == 0:  # if num is divisible by i, it is not prime
                break
        else:  # if num is not divisible by any i, it is prime
            print(num)  # print the prime number
            count += 1  # increment the count variable
print("There are", count, "prime numbers between 1 and 200")  # print the total count of prime numbers

go

package main

import "fmt"

func isPrime(n int) bool {
    if n <= 1 {
        return false
    }
    for i := 2; i*i <= n; i++ {
        if n%i == 0 {
            return false
        }
    }
    return true
}

func main() {
    count := 0
    for i := 2; i <= 200; i++ {
        if isPrime(i) {
            fmt.Println(i)
            count++
        }
    }
    fmt.Printf("1到200之间有%d个质数", count)
}

2、数组给定组值两两各不相同,请使用最高效的方法,找出数组的最大值和最小值

public class ArrayUtil {
    public static void findMinMax(int[] arr) {
        int min = arr[0];
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            } else if (arr[i] > max) {
                max = arr[i];
            }
        }
        System.out.println("Minimum value: " + min);
        System.out.println("Maximum value: " + max);
    }
}

python

# 找到具有唯一值的数组的最大值和最小值,我们可以使用内置函数max()和min()
# 这些函数的时间复杂度为O(n),这是找到数组的最大值和最小值的最有效方法

# 示例代码:
arr = [1, 2, 3, 4, 5]
max_val = max(arr)
min_val = min(arr)

print("最大值:", max_val)
print("最小值:", min_val)

3.求两个字符串的最长公共子串

java解题

// 使用动态规划方法查找两个字符串的最长公共子串

// 查找两个字符串的最长公共子串的函数
public static String longestCommonSubstring(String str1, String str2) {
    int m = str1.length();
    int n = str2.length();

    // 变量用于存储最长公共子串的长度
    int maxLength = 0;

    // 变量用于存储最长公共子串的结束索引
    int endIndex = 0;

    // 查找表用于存储子字符串的最长公共后缀的长度
    int[][] lookup = new int[m + 1][n + 1];

    // 遍历输入字符串并填充查找表
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            // 如果 `str1` 和 `str2` 的当前字符匹配
            if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                lookup[i][j] = lookup[i - 1][j - 1] + 1;

                // 更新最长子串的最大长度和结束索引
                if (lookup[i][j] > maxLength) {
                    maxLength = lookup[i][j];
                    endIndex = i - 1;
                }
            }
        }
    }

    // 使用结束索引和长度返回最长公共子串
    return str1.substring(endIndex - maxLength + 1, endIndex + 1);
}

// 示例用法
public static void main(String[] args) {
    String str1 = "ABC", str2 = "BABA";
    System.out.println("最长公共子串是 " + longestCommonSubstring(str1, str2));
}

python

# 定义函数,求两个字符串的最长公共子串
def find_longest_common_substring(str1, str2):
    # 初始化矩阵
    matrix = [[0] * (len(str2) + 1) for _ in range(len(str1) + 1)]
    # 初始化最长公共子串长度
    max_len = 0
    # 初始化最长公共子串的结束位置
    end = 0
    # 遍历字符串
    for i in range(1, len(str1) + 1):
        for j in range(1, len(str2) + 1):
            if str1[i - 1] == str2[j - 1]:
                matrix[i][j] = matrix[i - 1][j - 1] + 1
                if matrix[i][j] > max_len:
                    max_len = matrix[i][j]
                    end = i
            else:
                matrix[i][j] = 0
    # 返回最长公共子串
    return str1[end - max_len:end]

# 测试
str1 = "abcdefg"
str2 = "defghijk"
print(find_longest_common_substring(str1, str2)) # 输出 "def"

go语言

// 使用go语言,求两个字符串的最长公共子串,并给出中文注释
func longestCommonSubstring(s1, s2 string) string {
    // 构建一个二维数组,用于存储最长公共子串的长度
    m := make([][]int, len(s1)+1)
    for i := range m {
        m[i] = make([]int, len(s2)+1)
    }
    // 记录最长公共子串的长度和结束位置
    maxLen, endIndex := 0, 0
    // 遍历两个字符串,找到最长公共子串
    for i := 1; i <= len(s1); i++ {
        for j := 1; j <= len(s2); j++ {
            if s1[i-1] == s2[j-1] {
                m[i][j] = m[i-1][j-1] + 1
                if m[i][j] > maxLen {
                    maxLen = m[i][j]
                    endIndex = i
                }
            }
        }
    }
    // 返回最长公共子串
    return s1[endIndex-maxLen : endIndex]
}
目录
相关文章
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
348 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
348 3
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
298 5
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
583 12
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
算法 关系型数据库 MySQL
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
在分布式系统中,确保每个节点生成的 ID 唯一且高效至关重要。Snowflake 算法由 Twitter 开发,通过 64 位 long 型数字生成全局唯一 ID,包括 1 位标识位、41 位时间戳、10 位机器 ID 和 12 位序列号。该算法具备全局唯一性、递增性、高可用性和高性能,适用于高并发场景,如电商促销时的大量订单生成。本文介绍了使用 Go 语言的 `bwmarrin/snowflake` 和 `sony/sonyflake` 库实现 Snowflake 算法的方法。
1175 1
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
490 4

推荐镜像

更多