热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词专为力扣算法题目解题设计,能够系统化地分析题目需求、拆解解题步骤、提供多种解题思路并生成高效代码实现。通过结构化的问题分析方法,帮助用户深入理解算法本质,提升编程思维能力和代码实现水平。该提示词特别适合准备技术面试、学习数据结构和算法、提升编程能力的开发者使用,能够针对不同难度级别的题目提供针对性的解题指导,从问题分析到代码实现的完整解决方案。
题目分析
解题思路
算法设计(选定方案:哈希表一次遍历)
代码实现(Python)
import sys
def two_sum(nums, target):
"""
返回任意一对满足 nums[i] + nums[j] == target 的不同下标 (i, j)。
使用哈希表实现 O(n) 时间复杂度。
"""
seen = {} # value -> index
for i, x in enumerate(nums):
c = target - x
if c in seen:
return seen[c], i
# 只在未命中时记录当前值及索引,确保不使用同一元素两次
seen[x] = i
# 按题意保证至少有解,这里理论上不会到达
return -1, -1
def main():
data = sys.stdin.read().strip().split()
if not data:
return
# 解析输入
it = iter(data)
n = int(next(it))
nums = [int(next(it)) for _ in range(n)]
target = int(next(it))
i, j = two_sum(nums, target)
print(f"{i} {j}")
if __name__ == "__main__":
main()
复杂度分析
测试用例
常见两种方法:
拓扑排序(Kahn 算法,BFS)
DFS 检测环
对比与选择:
说明:
import java.io.*;
import java.util.*;
/**
* 课程表(是否可修完)
* 方法一:Kahn 拓扑排序(BFS) —— 推荐
* 方法二:DFS 检测有向环 —— 参考(可能有递归栈风险)
*/
public class Solution {
// LeetCode风格函数
public boolean canFinish(int numCourses, int[][] prerequisites) {
return canFinishKahn(numCourses, prerequisites);
}
// 方法一:Kahn 拓扑排序
public boolean canFinishKahn(int n, int[][] prerequisites) {
// 邻接表
List<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) graph[i] = new ArrayList<>();
// 入度
int[] indeg = new int[n];
// 构图:b -> a
for (int[] e : prerequisites) {
int a = e[0], b = e[1];
graph[b].add(a);
indeg[a]++;
}
// 入度为0的节点入队
ArrayDeque<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
if (indeg[i] == 0) queue.offer(i);
}
int processed = 0;
while (!queue.isEmpty()) {
int u = queue.poll();
processed++;
for (int v : graph[u]) {
if (--indeg[v] == 0) {
queue.offer(v);
}
}
}
return processed == n;
}
// 方法二:DFS 检测环(参考实现)
public boolean canFinishDFS(int n, int[][] prerequisites) {
List<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) graph[i] = new ArrayList<>();
for (int[] e : prerequisites) {
int a = e[0], b = e[1];
graph[b].add(a);
}
// 0=未访问, 1=访问中, 2=已完成
int[] state = new int[n];
for (int i = 0; i < n; i++) {
if (state[i] == 0) {
if (dfsHasCycle(i, graph, state)) {
return false; // 有环则不可完成
}
}
}
return true;
}
private boolean dfsHasCycle(int u, List<Integer>[] graph, int[] state) {
state[u] = 1; // 标记为访问中
for (int v : graph[u]) {
if (state[v] == 1) return true; // 回边:有环
if (state[v] == 0 && dfsHasCycle(v, graph, state)) return true;
}
state[u] = 2; // 完成
return false;
}
// 主程序:按题目输入格式读取并输出
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
s = br.readLine();
if (s == null) return;
int numCourses = Integer.parseInt(s.trim());
s = br.readLine();
int m = Integer.parseInt(s.trim());
int[][] prerequisites = new int[m][2];
for (int i = 0; i < m; i++) {
String line = br.readLine();
StringTokenizer st = new StringTokenizer(line);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
prerequisites[i][0] = a;
prerequisites[i][1] = b;
}
Solution sol = new Solution();
boolean ans = sol.canFinishKahn(numCourses, prerequisites);
System.out.println(ans ? "true" : "false");
}
}
说明:在大规模数据下建议采用 Kahn 拓扑排序方案,避免递归带来的栈溢出风险。
#include <bits/stdc++.h>
using namespace std;
class LRUCache {
public:
using K = long long;
using V = long long;
using Node = pair<K, V>;
LRUCache(size_t capacity) : cap(capacity) {
// 预留哈希表空间,减少 rehash 次数
pos.reserve(capacity ? capacity : 1);
}
int get(K key) {
auto it = pos.find(key);
if (it == pos.end()) return -1;
// 将此节点移动到链表头部(最近使用)
cache.splice(cache.begin(), cache, it->second);
return static_cast<int>(it->second->second);
}
void put(K key, V value) {
if (cap == 0) return; // 防御:容量为 0,则不存储任何键
auto it = pos.find(key);
if (it != pos.end()) {
// 更新值并移动到头部
it->second->second = value;
cache.splice(cache.begin(), cache, it->second);
return;
}
// 若容量已满,移除尾部(最久未使用)
if (cache.size() == cap) {
auto lastIt = prev(cache.end());
K kEvict = lastIt->first;
pos.erase(kEvict);
cache.pop_back();
}
// 在头部插入新节点
cache.emplace_front(key, value);
pos[key] = cache.begin();
}
private:
size_t cap;
list<Node> cache; // 双向链表:头=最近,尾=最久
unordered_map<K, list<Node>::iterator> pos; // 哈希:key -> 节点迭代器
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long cap;
int q;
if (!(cin >> cap)) return 0;
cin >> q;
LRUCache lru(static_cast<size_t>(cap));
for (int i = 0; i < q; ++i) {
string op;
cin >> op;
if (op == "get") {
long long k;
cin >> k;
cout << lru.get(k) << "\n";
} else if (op == "put") {
long long k, v;
cin >> k >> v;
lru.put(k, v);
} else {
// 非法操作名:忽略或可选择处理,这里忽略
}
}
return 0;
}
该实现符合题目对 LRU 的期望:哈希表 + 双向链表,操作均摊 O(1),并覆盖常见边界情况。
使用本提示词进行高频题训练,快速梳理题型与话术,生成可讲解代码与测试,用于模拟面试和查漏补缺
借助结构化分析完成课程作业与实验练习,理解算法原理,输出多语言题解与学习笔记,提升考试与竞赛表现
用于巩固数据结构与编码规范,在空闲刷题中对照优化建议改进写法,减少线上缺陷并提高评审通过率
为正在刷力扣的学习者与面试候选人打造一套“从读题到通过”的闭环助手:快速读懂题意、拆解解题路径、对比多种方案、生成可运行的高质量代码与测试用例,并给出性能评估与优化建议。以更少时间拿到更多通过记录,形成可复用的解题套路,稳步提升面试通过率与算法思维能力。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期