零题目:Algorithms(Leetcode,withMindMap+AllSolutions)300Questions(240)SearchingTwo-dimensionalMatrixII1.题目描述2.解法概览(思维导图)3.全解狂张三:说到“映射、数量、重复(即去重)、唯一性(即次数)等”,我可能会优先考虑hash(对应JS中的地图数据结构)。面试官:那你可以先说一下大概的思路。疯狂的张三:1)遍历二维数组中的每一个元素,放入哈希表中。2)最后判断目标值是否在哈希表中~面试官:嗯,总体思路ok,开始写吧。疯狂张三:2分52秒后,张三写完程序1program11)code://program1"self.hashing"。//注意:传124/129,会超时。//花费时间:15:14-15:16。//Tips:当涉及到“映射、数量、重复性(即去重)、唯一性(即次数)等”时,可以优先考虑hash(对应JS中的map数据结构)。//思路://1)状态初始化:m=matrix.length,n=matrix[0].length;//resMap=newMap();//2)遍历二维数组,将每个元素放入它在resMap中。//3)返回结果:resMap.has(target)。varsearchMatrix=function(matrix,target){//1)状态初始化:m=matrix.length,n=matrix[0].length;//resMap=newMap();constm=matrix.length,n=matrix[0].length;让resMap=newMap();//2)遍历二维数组,将每个元素放入resMap。for(leti=0;i可以用二分查找吗?面试官:仔细想想,张三(回忆了一下二分查找的各种思路和模板):总体思路是这样的:1)遍历二维数组的每一行,对于每一行(也就是有序的array)使用二分查找——判断目标是否在里面。2)如果每一行都没有目标值,则返回false,否则返回true。面试官:旁白:几分钟的时间,张三写完了“二分查找”方法的代码,通过了所有的case。2场景21)代码://场景2“Self.BinarySearch”。//花费时间:15:37-15:43。//提示:在有序数组中查找元素,可以优先使用“二分查找”。//思路://1)状态初始化:m=matrix.length,n=matrix[0].length;//resFlag=false;.//2)核心:遍历二维数组的每一行,对每一行(即有序数组)使用二分查找,判断目标是否在其中。//2.1)如果目标在当前行-isFindTarget(matrix[i],target),//然后resFlag=true并退出搜索。//3)返回结果:resFlag。varsearchMatrix=function(matrix,target){constisFindTarget=(list=[],target=0)=>{constl=list.length;让左=0,右=l-1,resFlag=false;while(left<=right){constmid=left+Math.floor((右-左)/2),midVal=list[mid];如果(midVal===目标){resFlag=true;休息;}elseif(midVal>target){right=mid-1;}else{左=中+1;}}返回resFlag;};//1)状态初始化:m=matrix.length,n=matrix[0].length;//resFlag=false;.constm=matrix.length,n=matrix[0].length;让resFlag=false;//2)核心:遍历二维数组的每一行,对每一行(即有序数组)进行二分查找——判断target是否在里面。for(leti=0;itarget,向上查找。采访者:3场景31)代码://场景3“Self.ZigzagFind”。//花费时间:15:22-15:27。//思路://1)题干中“每行元素从左到右升序排列。每列元素从上到下升序排列。”。//2)然后我们开始选择一个比较中间的位置开始搜索。如果当前值太小,则向右查找,如果太大,则向上查找,如果相等,则退出查找。//思路://1)状态初始化:m=matrix.length,n=matrix[0].length;//i=m-1,j=0【从左下角开始搜索】,resFlag=true;//2)核心:从左下角开始连续[向上,向右]搜索。//2.1)如果当前值tempVal===target,则退出搜索。//2.2)如果当前值tempValtarget,向上查找。//3)返回结果resFlag。varsearchMatrix=function(matrix,target){//1)状态初始化:m=matrix.length,n=matrix[0].length;//i=m-1,j=0[从左下角开始搜索],resFlag=true;constm=matrix.length,n=matrix[0].length;设i=m-1,j=0,resFlag=true;//2)核心:从左下角[upward,Right]开始搜索。while(true){if(i<0||i>=m||j<0||j>=n){resFlag=false;休息;}consttempVal=matrix[i][j];//2.1)如果当前值tempVal===target,退出搜索。如果(tempVal===目标){中断;}//2.2)如果当前值tempValtarget,向上查找。否则{我--;}}//3)返回结果resFlag。返回resFlag;};旁白:张三写完上面的代码,急忙问面试官。疯子张三:你面试通过了吗?面试官:疯狂的张三:又一个offer,我马上要当CEO了。晚上应该去吃沙县小吃吧?还是兰州拉面?哎,选择太多也是一种烦恼!4资源分享&更多1历史文章-概览2博主介绍码农三少,致力于编写极简但完整的问题解决方案(算法)的博主。专注一题多解,结构化思维,欢迎一起刷LeetCode~