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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测链路 OpenTelemetry 版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 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]
}
目录
相关文章
|
2月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
24天前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
45 10
|
7天前
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。
|
2月前
|
JavaScript 算法 索引
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
这篇文章深入分析了Vue中的diff算法,解释了其在新旧虚拟DOM节点比较中的工作机制,包括同层节点比较、循环向中间收拢的策略,并通过实例演示了diff算法的执行过程,同时提供了源码层面的解析,说明了当数据变化时,如何通过Watcher触发patch函数来更新DOM。
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
|
2月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
39 6
|
2月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
2月前
|
搜索推荐 算法 Java
|
2月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
55 2
|
2月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
41 1
|
2月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
40 1
下一篇
无影云桌面