세상을 보다
알고리즘: 한 번에 한 기법만
「정렬」「동적 계획법」이 아니라 「이분 탐색의 경계」「DP의 상태 정의」「백트래킹 중복이 같은 층인가 같은 가지인가」—— 한 편에 한 곳만, 왜 그런지 말할 수 있을 때까지 팝니다.
이 프롬프트 모음은 지금은 简体中文만 있습니다.
사용법
이 묶음은 학습형입니다: 말문이 막힐 때까지 몰아붙이지 않고 이끕니다. 막히면 먼저 「어느 층에서 막혔는지」를 묻습니다(들어본 적 없음 / 알지만 왜인지 모름 / 알지만 못 씀). 같은 지점에서 두 번 이끌어도 안 되면 그때 답을 말하고, 그다음 당신의 말로 다시 설명하게 합니다.
시작하는 법
- 하나 골라서 열고, 프롬프트를 복사합니다.
- 새 빈 대화에 붙여 넣고, 아무 말도 하지 말고 첫 질문을 기다립니다.
- 코드보다 손으로 따라가기가 먼저 —— 도중에 끊어 줍니다. 길이 2인 배열에서 한 단계씩 따라가는 편이 템플릿을 열 번 쓰는 것보다 낫습니다.
도중에 언제든 외칠 수 있는 네 가지 명령
跳过바로 다음 장면으로换个说法이 부분을 다른 각도로 다시 설명直说吧답을 전부 말하고, 그다음 내가 다시 설명하게复盘바로 마무리로 넘어가 회고 카드 출력
세 가지 함정
- 끝에 있는 정답 카드를 먼저 읽지 마세요 —— 그 「흔히 잘못 아는 것」 항목이 곧 모든 질문의 답입니다.
- 코드부터 쓰지 마세요. 알고리즘에서는 코드를 쓰는 행위가 「사실은 이해하지 못했다」를 가장 잘 가려 줍니다.
- 칭찬하기 시작하면 「칭찬하지 말라」는 철칙을 상기시키세요. 이끄는 것과 달래는 것은 다릅니다.
풀이가 안 떠오르면 「상태 정의」부터. 경계를 자꾸 틀리면 「이분 탐색」과 「누적 합」. 문제의 형태를 못 알아보면 「단조 스택」과 「슬라이딩 윈도」. 「복잡도」 편은 여러 편의 토대이니 일찍 하세요.
기본기
二分的边界
会写,但老是错边界 —— 因为你没说清自己维护的是哪个不变量。
滑动窗口什么时候不能滑
数组里有负数,你那个滑动窗口就错了 —— 说得出为什么吗?
同样是 O(n log n),为什么快排更快
快排和堆排都是 O(n log n),实测差两三倍。差在哪?
자료구조
单调栈:什么形状的题会塌成它
模板八行,难的是看见一道新题认出它是这个形状。
求第 k 大,为什么用小顶堆
求最大的 100 个,用小顶堆 —— 方向是反的,为什么?
并查集:两个优化各省了什么
十行代码,但去掉按秩合并会退化成什么,你说得出吗?
前缀和能用的前提是可逆
区间和能用它,区间最大值不能 —— 那条界线在哪?
설계 패러다임
动态规划:状态定义才是那道坎
「看得懂题解、自己想不出来」,卡的几乎都是这一步。
贪心:过了样例不等于对
唯一一类跑过样例仍然可能彻底错的算法。
回溯去重:同层还是同枝
去重条件里那个感叹号,为什么在那儿?