java-python快速转语言

Java → Python 算法刷题速成指南

目标:不是全面学完 Python ,而是用最短时间学会"用 Python 写常见算法题"。

适合:已经会用 Java 刷题,但笔试强制要求用 Python 的情况。


1. 必备语法映射(Java 对照 Python)

1.1 输入输出

  • Java
ini 复制代码
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
    arr[i] = sc.nextInt();
}
  • Python
python 复制代码
n = int(input())
arr = list(map(int, input().split()))

要点:

  • 不写类型、不写分号。
  • 多个整数一行输入时,用 split() + map(int, ...)

1.2 变量与基本语句

  • 声明变量

    • Java: int x = 0;
    • Python: x = 0
  • 条件语句

    • Java:

      css 复制代码
      if (a > b) {
          ...
      } else if (a == b) {
          ...
      } else {
          ...
      }
    • Python:

      less 复制代码
      if a > b:
          ...
      elif a == b:
          ...
      else:
          ...

    要点:没有括号、没有花括号,用缩进 + 冒号 : 表示代码块

  • 循环

    • Java for:

      css 复制代码
      for (int i = 0; i < n; i++) {
          ...
      }
    • Python for:

      scss 复制代码
      for i in range(n):
          ...
    • Java while:

      arduino 复制代码
      while (condition) {
          ...
      }
    • Python while:

      arduino 复制代码
      while condition:
          ...

1.3 函数(方法)定义

  • Java
arduino 复制代码
int add(int a, int b) {
    return a + b;
}
  • Python
python 复制代码
def add(a, b):
    return a + b

要点:

  • def 定义函数。
  • 不写返回类型。
  • 末尾不写分号。

2. 刷题常用容器写法

2.1 列表(相当于 Java 的 ArrayList

ini 复制代码
arr = []          # 空列表
arr.append(x)     # 尾部追加
arr.pop()         # 弹出最后一个元素
arr[i]            # 下标访问
len(arr)          # 长度

arr.sort()        # 原地升序排序
arr.sort(reverse=True)  # 原地降序
arr2 = sorted(arr)      # 返回新排序列表,不修改原列表

初始化:

ini 复制代码
arr = [0] * n     # 长度为 n 的 0 数组
arr = [1, 2, 3]   # 直接字面量

2.2 栈与队列

  • 栈(Stack)
ini 复制代码
stack = []
stack.append(x)   # 入栈
stack.pop()       # 出栈(弹出栈顶)
  • 队列(Queue,BFS 常用)
css 复制代码
from collections import deque

q = deque()
q.append(x)       # 入队
q.popleft()       # 出队(弹出队头)

2.3 集合与字典(相当于 HashSet / HashMap

  • 集合 set(去重、判重)
scss 复制代码
s = set()
s.add(x)

if x in s:
    ...
  • 字典 dict(键值映射,计数、映射关系)
ini 复制代码
mp = {}
mp[key] = value

if key in mp:
    ...

cnt = mp.get(key, 0) + 1   # 获取计数,不存在时默认为 0
mp[key] = cnt

2.4 字符串操作

ini 复制代码
s[i]          # 下标访问
s[i:j]        # 子串(切片,含 i 不含 j)
s.split()     # 按空格分割
s.split(',')  # 按逗号分割

chars = list(s)       # 转成列表(可修改)
res = ''.join(chars)  # 列表拼成字符串

3. 五大经典算法模板(Python 版本)

3.1 二分查找模板

适用:有序数组中找某个值 / 下标。

sql 复制代码
def binary_search(nums, target):
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = (left + right) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

思路与 Java 完全一样,只是语法变成 Python。


3.2 DFS / 递归(树、图)

以二叉树遍历为例:

python 复制代码
def dfs(root):
    if not root:
        return

    # 前序位置
    # print(root.val)

    dfs(root.left)
    dfs(root.right)

图的 DFS:

scss 复制代码
def dfs(u, graph, visited):
    visited.add(u)
    for v in graph[u]:
        if v not in visited:
            dfs(v, graph, visited)

3.3 BFS 模板(最短路 / 层序遍历)

scss 复制代码
from collections import deque

def bfs(start, graph):
    q = deque()
    visited = set()

    q.append(start)
    visited.add(start)

    while q:
        u = q.popleft()
        # 处理 u

        for v in graph[u]:
            if v not in visited:
                visited.add(v)
                q.append(v)

3.4 回溯模板(排列 / 组合 / 子集)

组合(例如从 nums 中选出所有长度为 k 的组合):

scss 复制代码
def combine(nums, k):
    res = []
    path = []

    def backtrack(start):
        if len(path) == k:
            res.append(path[:])
            return

        for i in range(start, len(nums)):
            path.append(nums[i])
            backtrack(i + 1)
            path.pop()

    backtrack(0)
    return res

排列(全排列):

python 复制代码
def permute(nums):
    res = []
    path = []
    used = [False] * len(nums)

    def backtrack():
        if len(path) == len(nums):
            res.append(path[:])
            return

        for i in range(len(nums)):
            if used[i]:
                continue
            used[i] = True
            path.append(nums[i])
            backtrack()
            path.pop()
            used[i] = False

    backtrack()
    return res

3.5 前缀和 / 滑动窗口(数组、子数组题很常见)

  • 前缀和
ini 复制代码
def prefix_sum(nums):
    n = len(nums)
    pre = [0] * (n + 1)
    for i in range(n):
        pre[i + 1] = pre[i] + nums[i]
    return pre

# 计算区间 [l, r] 的和(0-based)
# sum(nums[l:r+1]) = pre[r+1] - pre[l]
  • 滑动窗口(最长 / 最短子串、子数组)
ini 复制代码
def sliding_window(s, k):
    # 示例:求长度为 k 的子串最大和(如果是数组则同理)
    n = len(s)
    if n < k:
        return 0

    window_sum = sum(s[:k])
    ans = window_sum

    for i in range(k, n):
        window_sum += s[i] - s[i - k]
        ans = max(ans, window_sum)

    return ans

4. 建议的速成练习路径

  • 第 1 天(2~3 小时)

    • 把第 1 章语法映射看一遍。
    • 选 2~3 道你用 Java 做过的简单题(如:数组最大值、两数之和、斐波那契),强行用 Python 改写。
  • 第 2~3 天

    • 针对列表/集合/字典/队列,刷 8~10 道简单题(数组、哈希表、栈队列、字符串)。
  • 第 4~7 天

    • 每天选一个模板(比如二分、DFS/BFS、回溯、滑动窗口),
    • 先对照本文件里的 Python 模板抄一遍,
    • 再用这个模板刷 2~3 题加深记忆。

5. 笔试实战小技巧

  • 优先用自己最熟的几套 Python 模板,不要在考场上玩新花样。
  • 如果一时间想不到最优解,先写一个正确的暴力解,Python 代码短、写得快,先拿基础分。
  • 多利用内置函数:max, min, sum, sorted, any, all,可以极大缩短代码长度。
  • 记住:思路用 Java 想,代码用 Python 写------把语法映射清楚,你的算法能力是可以直接迁移过来的。## Java → Python 算法刷题速成指南

目标:不是全面学完 Python ,而是用最短时间学会"用 Python 写常见算法题"。

适合:已经会用 Java 刷题,但笔试强制要求用 Python 的情况。


1. 必备语法映射(Java 对照 Python)

1.1 输入输出

  • Java
ini 复制代码
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
    arr[i] = sc.nextInt();
}
  • Python
python 复制代码
n = int(input())
arr = list(map(int, input().split()))

要点:

  • 不写类型、不写分号。
  • 多个整数一行输入时,用 split() + map(int, ...)

1.2 变量与基本语句

  • 声明变量

    • Java: int x = 0;
    • Python: x = 0
  • 条件语句

    • Java:

      css 复制代码
      if (a > b) {
          ...
      } else if (a == b) {
          ...
      } else {
          ...
      }
    • Python:

      less 复制代码
      if a > b:
          ...
      elif a == b:
          ...
      else:
          ...

    要点:没有括号、没有花括号,用缩进 + 冒号 : 表示代码块

  • 循环

    • Java for:

      css 复制代码
      for (int i = 0; i < n; i++) {
          ...
      }
    • Python for:

      scss 复制代码
      for i in range(n):
          ...
    • Java while:

      arduino 复制代码
      while (condition) {
          ...
      }
    • Python while:

      arduino 复制代码
      while condition:
          ...

1.3 函数(方法)定义

  • Java
arduino 复制代码
int add(int a, int b) {
    return a + b;
}
  • Python
python 复制代码
def add(a, b):
    return a + b

要点:

  • def 定义函数。
  • 不写返回类型。
  • 末尾不写分号。

2. 刷题常用容器写法

2.1 列表(相当于 Java 的 ArrayList

ini 复制代码
arr = []          # 空列表
arr.append(x)     # 尾部追加
arr.pop()         # 弹出最后一个元素
arr[i]            # 下标访问
len(arr)          # 长度

arr.sort()        # 原地升序排序
arr.sort(reverse=True)  # 原地降序
arr2 = sorted(arr)      # 返回新排序列表,不修改原列表

初始化:

ini 复制代码
arr = [0] * n     # 长度为 n 的 0 数组
arr = [1, 2, 3]   # 直接字面量

2.2 栈与队列

  • 栈(Stack)
ini 复制代码
stack = []
stack.append(x)   # 入栈
stack.pop()       # 出栈(弹出栈顶)
  • 队列(Queue,BFS 常用)
css 复制代码
from collections import deque

q = deque()
q.append(x)       # 入队
q.popleft()       # 出队(弹出队头)

2.3 集合与字典(相当于 HashSet / HashMap

  • 集合 set(去重、判重)
scss 复制代码
s = set()
s.add(x)

if x in s:
    ...
  • 字典 dict(键值映射,计数、映射关系)
ini 复制代码
mp = {}
mp[key] = value

if key in mp:
    ...

cnt = mp.get(key, 0) + 1   # 获取计数,不存在时默认为 0
mp[key] = cnt

2.4 字符串操作

ini 复制代码
s[i]          # 下标访问
s[i:j]        # 子串(切片,含 i 不含 j)
s.split()     # 按空格分割
s.split(',')  # 按逗号分割

chars = list(s)       # 转成列表(可修改)
res = ''.join(chars)  # 列表拼成字符串

3. 五大经典算法模板(Python 版本)

3.1 二分查找模板

适用:有序数组中找某个值 / 下标。

sql 复制代码
def binary_search(nums, target):
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = (left + right) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

思路与 Java 完全一样,只是语法变成 Python。


3.2 DFS / 递归(树、图)

以二叉树遍历为例:

python 复制代码
def dfs(root):
    if not root:
        return

    # 前序位置
    # print(root.val)

    dfs(root.left)
    dfs(root.right)

图的 DFS:

scss 复制代码
def dfs(u, graph, visited):
    visited.add(u)
    for v in graph[u]:
        if v not in visited:
            dfs(v, graph, visited)

3.3 BFS 模板(最短路 / 层序遍历)

scss 复制代码
from collections import deque

def bfs(start, graph):
    q = deque()
    visited = set()

    q.append(start)
    visited.add(start)

    while q:
        u = q.popleft()
        # 处理 u

        for v in graph[u]:
            if v not in visited:
                visited.add(v)
                q.append(v)

3.4 回溯模板(排列 / 组合 / 子集)

组合(例如从 nums 中选出所有长度为 k 的组合):

scss 复制代码
def combine(nums, k):
    res = []
    path = []

    def backtrack(start):
        if len(path) == k:
            res.append(path[:])
            return

        for i in range(start, len(nums)):
            path.append(nums[i])
            backtrack(i + 1)
            path.pop()

    backtrack(0)
    return res

排列(全排列):

python 复制代码
def permute(nums):
    res = []
    path = []
    used = [False] * len(nums)

    def backtrack():
        if len(path) == len(nums):
            res.append(path[:])
            return

        for i in range(len(nums)):
            if used[i]:
                continue
            used[i] = True
            path.append(nums[i])
            backtrack()
            path.pop()
            used[i] = False

    backtrack()
    return res

3.5 前缀和 / 滑动窗口(数组、子数组题很常见)

  • 前缀和
ini 复制代码
def prefix_sum(nums):
    n = len(nums)
    pre = [0] * (n + 1)
    for i in range(n):
        pre[i + 1] = pre[i] + nums[i]
    return pre

# 计算区间 [l, r] 的和(0-based)
# sum(nums[l:r+1]) = pre[r+1] - pre[l]
  • 滑动窗口(最长 / 最短子串、子数组)
ini 复制代码
def sliding_window(s, k):
    # 示例:求长度为 k 的子串最大和(如果是数组则同理)
    n = len(s)
    if n < k:
        return 0

    window_sum = sum(s[:k])
    ans = window_sum

    for i in range(k, n):
        window_sum += s[i] - s[i - k]
        ans = max(ans, window_sum)

    return ans

4. 建议的速成练习路径

  • 第 1 天(2~3 小时)

    • 把第 1 章语法映射看一遍。
    • 选 2~3 道你用 Java 做过的简单题(如:数组最大值、两数之和、斐波那契),强行用 Python 改写。
  • 第 2~3 天

    • 针对列表/集合/字典/队列,刷 8~10 道简单题(数组、哈希表、栈队列、字符串)。
  • 第 4~7 天

    • 每天选一个模板(比如二分、DFS/BFS、回溯、滑动窗口),
    • 先对照本文件里的 Python 模板抄一遍,
    • 再用这个模板刷 2~3 题加深记忆。

5. 笔试实战小技巧

  • 优先用自己最熟的几套 Python 模板,不要在考场上玩新花样。
  • 如果一时间想不到最优解,先写一个正确的暴力解,Python 代码短、写得快,先拿基础分。
  • 多利用内置函数:max, min, sum, sorted, any, all,可以极大缩短代码长度。
  • 记住:思路用 Java 想,代码用 Python 写------把语法映射清楚,你的算法能力是可以直接迁移过来的。
相关推荐
何陋轩2 小时前
AI时代,程序员何去何从?别慌,看完这篇你就明白了
后端·面试
Wect2 小时前
JS手撕:函数进阶 & 设计模式解析
前端·javascript·面试
前端摸鱼匠2 小时前
【AI大模型春招面试题18】 L1、L2正则化、Dropout、早停(Early Stopping)的原理与适用场景?
人工智能·ai·语言模型·面试·大模型
Qinana2 小时前
前端正则表达式全解:从基础语法到实战应用
前端·javascript·面试
im_AMBER3 小时前
万字长文:手撕JS深浅拷贝完全指南
前端·javascript·面试
哈里谢顿3 小时前
ELK 详解:架构、配置与面试重点
面试
有意义3 小时前
深入理解浏览器存储方案:从Cookie到JWT登录认证
前端·面试·浏览器
李日灐3 小时前
【优选算法3】二分查找经典算法面试题
开发语言·c++·后端·算法·面试·二分查找·双指针
前端摸鱼匠4 小时前
【AI大模型春招面试题17】 过拟合、欠拟合在大模型中的表现与解决策略?
人工智能·ai·语言模型·面试·大模型