当前位置: 首页 > news >正文

力扣经典模版题(用于自己复习)

class Solution { //求拓扑排序:B-A。我们将每一门课看成一个节点如果想要学习课程 A 之前必须完成课程 B那么我们从 B 到 A 连接一条有向边。这样以来在拓扑排序中B 一定出现在 A 的前面。我们可以将深度优先搜索的流程与拓扑排序的求解联系起来用一个栈来存储所有已经搜索完成的节点。这样以来我们对图进行一遍深度优先搜索。当每个节点进行回溯的时候我们把该节点放入栈中。最终从栈顶到栈底的序列就是一种拓扑排序。 //存储有向图 ListListInteger edgesnew ArrayListListInteger(); //标记每个节点的状态0未搜索1搜索中2已完成 int[] visited; //用数组模拟栈下标n-1为栈底0为栈顶 int[] result; //判断有向图中是否有环 boolean validtrue; //栈下标 int index; public int[] findOrder(int numCourses, int[][] prerequisites) { for(int i0;inumCourses;i){ edges.add(new ArrayListInteger()); } visitednew int[numCourses]; resultnew int[numCourses]; indexnumCourses-1; for(int[] info:prerequisites){ //List.get(数字) 拿的就是下标索引 //让前置课程指向后置课程巧妙。本质起始是list下标当做前置课程这个下标对应的list里面存这个课程所有的后置课程。edges.get(b).add(a); edges.get(info[1]).add(info[0]); } //每次挑选一个未搜索0的节点开始深度优先搜索 for(int i0;inumCoursesvalid;i){ if(visited[i]0){ dfs(i); } } if(!valid){ return new int[0];//空数组细节 } // 如果没有环那么就有拓扑排序 return result; } public void dfs(int u){ //标记节点为搜索中 visited[u]1; // 搜索其相邻节点只要发现有环立刻停止搜索。 for(int v:edges.get(u)){ // 如果「未搜索」那么搜索相邻节点 if(visited[v]0){ dfs(v); if(!valid) return; }else if(visited[v]1){ //如果「搜索中」说明找到了环 validfalse; return; } } // 将节点标记为「已完成」 visited[u]2; // 将节点入栈 result[index--] u; } }class Solution { public int subarraySum(int[] nums, int k) { /*暴力 1 以i开始的子数组中和为k的个数 int nnums.length; int cnt0,sum0; for(int i0;in;i){ sum0; for(int ji;jn;j){ sumnums[j]; if(sumk){ cnt; } } } return cnt;*/ //暴力 2 以i结尾的子数组中和为k的个数 /*int nnums.length; int cnt0,sum0; for(int i0;in;i){ sum0; for(int ji;j0;j--){ sumnums[j]; if(sumk){ cnt; } } } return cnt;*/ //前缀和优化针对暴力2 //欲求start~end之间的数组的值和是否为k即pre[end]-pre[start-1]k,即pre[start-1]pre[end]-k int nnums.length; int pre0,cnt0; MapInteger,Integer mpnew HashMap();//pre,cnt //预先放前缀和 0 出现 1 次 mp.put(0,1); for(int i0;in;i){ prenums[i]; if(mp.containsKey(pre-k)){ cntmp.get(pre-k); } mp.put(pre,mp.getOrDefault(pre,0)1); } return cnt; } }二分查找模版 1、 找第一个 target 的元素左边界 public int lowerBound(int[] nums, int target) { int left 0; int right nums.length - 1; while (left right) { int mid left (right - left) / 2; // 防溢出 if (nums[mid] target) { left mid 1; } else { right mid - 1; } } // 循环结束时 left right 1left 就是第一个 target 的位置 return left; } 2、找目标值存在性 public int search(int[] nums, int target) { int left 0, right nums.length - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) return mid; if (nums[mid] target) left mid 1; else right mid - 1; } return -1; }
http://www.zskr.cn/news/1344560.html

相关文章:

  • 2005- Loss functions for preference levels- Regression with discrete ordered labels-IJCAI
  • Python3 集合(Set)详解:从入门到精通
  • BarrageGrab:零依赖微服务架构的跨平台直播弹幕一体化采集系统
  • 网络化多智能体编队控制方法与实时仿真平台开发【附仿真】
  • 需求用例-成功保证
  • G-Helper:轻量级开源硬件控制工具的深度技术解析
  • 探讨有实力的越南企业出海咨询公司,盈天海外咨询口碑出众 - 工业品牌热点
  • GPT-5.5不只是能写代码——ChatGPT Image 2模块“语义-结构-纹理“三级解耦机制详解
  • 子非鱼安知鱼之乐
  • 5分钟快速上手:AMD Ryzen SMUDebugTool终极性能优化指南
  • 2026年南京靠谱全屋定制工厂挑选指南,这些细节要记牢
  • G-Helper终极指南:3步解锁华硕笔记本隐藏性能的免费神器
  • 3分钟让GitHub变中文:免费开源的中文化插件终极指南
  • [具身智能-831]:具身智能如何部署大模型?
  • 阵亡将士纪念日促销来袭!旅行小物件最高省 30 美元,这些值得入手!
  • 百度网盘限速破解:技术解析与实战应用深度剖析
  • runtime 运行时:昇腾NPU的“操作系统内核”
  • 路由算法的终极真相:为何“绝对最佳”是伪命题?从理论陷阱到工程实战的深度破局
  • G-Helper完整解决方案:华硕笔记本性能优化与系统控制终极指南
  • 老板临时改价还要今晚上线,618紧急出图好用的AI工具怎么选
  • 路由双雄对决:静态 vs 动态,从原理到实战的终极指南(万字长文)
  • Spec-Kit 落地实战:让需求与代码高度统一的 Spec-Driven 标准化开发
  • 2026云南旅游实测封神!10款西双版纳纯玩团业内口碑广受好评 - 十大品牌榜
  • 真正的爱是接受对方本来的样子
  • 如何快速解锁QQ音乐加密音频的完整指南:QMCDecode工具终极解决方案
  • Warcraft Helper终极优化指南:如何在现代Windows系统上完美运行经典魔兽争霸III
  • 广元 CPPM 注册采购经理授权中心及电话 - 中供国培
  • 【8】面试官:synchronized 锁原理知道吗?说下锁的升级过程
  • git fsck 深度解析 Git 仓库的体检医生
  • 国家数据局印发《2026年数字经济发展工作要点》:八项任务背后的数据治理信号