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

codetop高频(3)

二叉树的层序遍历

使用arraydeque来实现队列存放Node节点,集合的使用较为多

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> ans=new ArrayList<>();Queue<TreeNode> que=new ArrayDeque<>();if(root==null)return ans;que.offer(root);while(!que.isEmpty()){int n=que.size();List<Integer> layer=new ArrayList<>();for(int i=0;i<n;i++){TreeNode cur=que.poll();layer.add(cur.val);if(cur.left!=null)que.offer(cur.left);if(cur.right!=null)que.offer(cur.right);}ans.add(layer);}return ans;}
}

搜索旋转排序数组

先去找最小位置的下标,然后再判断去左右哪边进行二分查找,注意越界和不等情况。

class Solution {public int search(int[] nums, int target) {int minidx=findMin(nums);int len=nums.length;if(target<=nums[len-1])return findTarget(nums,minidx,len,target);return findTarget(nums,0,minidx,target);}int findMin(int []nums){int len=nums.length;int l=0,r=len;while(l<r){int mid=(l+r)>>1;if(nums[mid]<=nums[len-1])r=mid;else l=mid+1;}return l;}int findTarget(int []nums,int l,int r,int target){int len=nums.length;while(l<r){int mid=(l+r)>>1;if(nums[mid]>=target)r=mid;else l=mid+1;}if(l>=len||nums[l]!=target)return -1;else return l;}
}

岛屿数量

初始化4个方位的数组,一个岛屿二维数组和visit数组

遍历每一个元素,如果找到了没走过的岛屿就dfs并+1

dfs:遍历四个方位算出当前位置,如果越界就跳过,如果不是岛屿或者走过了就跳过

否则标记走过并进入。

class Solution {char[][]grid;boolean visit[][];int ans=0;int n,m;int dx[]=new int[]{-1,0,1,0};int dy[]=new int[]{0,-1,0,1};public int numIslands(char[][] grid) {this.grid=grid;n=grid.length;m=grid[0].length;visit=new boolean[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(grid[i][j]=='1'&&!visit[i][j]){ dfs(i,j);ans++;}}}return ans;}void dfs(int beginx,int beginy ){for(int i=0;i<4;i++){int curx=dx[i]+beginx,cury=dy[i]+beginy;if(curx<0||cury<0||curx>=n||cury>=m)continue;if(visit[curx][cury]||grid[curx][cury]!='1')continue;visit[curx][cury]=true;dfs(curx,cury);    }}
}

两数之和

使用map的containsKey函数判断一个元素是否在集合里。

在就返回,不在就放入。

class Solution {public int[] twoSum(int[] nums, int target) {int len=nums.length;Map<Integer,Integer> map=new HashMap<>();for(int i=0;i<len;i++){if(map.containsKey(target-nums[i])){return new int[]{i,map.get(target-nums[i])};}map.put(nums[i],i);}return null;}
}

全排列

一个path数组,一个visit数组(回溯算法需要path)

dfs遍历的时候注意删除判断,用size()-1进行

class Solution {List<List<Integer>> ans=new ArrayList<>();List<Integer> path=new ArrayList<>();boolean visit[];public List<List<Integer>> permute(int[] nums) {int n=nums.length;visit=new boolean[n];dfs(nums,0);return ans;}void dfs(int []nums,int deep){if(deep==nums.length){ans.add(new ArrayList<>(path));}for(int i=0;i<nums.length;i++){if(visit[i])continue;visit[i]=true;path.add(nums[i]);dfs(nums,deep+1);visit[i]=false;path.remove(path.size()-1);}}
}

http://www.dtcms.com/a/504395.html

相关文章:

  • 兰州网络推广关键词优化网站营销seo
  • 开发大型网站的流程wordpress自定义搜索
  • 站长 网站ip怒江商城网站建设
  • 商丘网站建设专业现状wordpress网页版入口
  • QDarkStyleSheet: 一个Qt应用的暗色主题解决方案
  • 各种网站app长沙人才市场招聘
  • 从零开始的C++学习生活 10:继承和多态
  • 记事本怎么做网站一人办厂千元投资
  • Java代码之gradle(1)
  • 卖印花图案设计网站网站建设实验小结
  • 织梦网站如何做seowordpress类
  • C# 数据加载专题 之泛型序列化
  • 帮网站做代理青岛网页设计 学校
  • 【2026计算机毕业设计】基于Springboot的校园电动车短租平台
  • Java基础语法—输入输出
  • 南京网站建设培训wordpress免费下主题Modown
  • 临时邮箱系统实战:解决AI网站注册验证难题的技术方案
  • K8s 安全机制全解析
  • 备案的网站名称湖南众诚建设 官方网站
  • 从0死磕全栈之使用 VS Code 调试 Next.js 应用完整指南
  • 换空间对网站排名的影响吗信息技术做网站
  • 做网站赚钱流程松江集团网站建设
  • NVIDIA大模型推理框架:TensorRT-LLM软件流程(一)
  • Altium Designer(AD24)Design设计功能总结
  • html 网站源码 卖手机推广网络怎么做
  • 吐鲁番好网站建设设计步骤的英文
  • C++如何实现小程序BUG自动给修复
  • Redis字符串编码
  • React中的事件绑定
  • [嵌入式系统-152]:CAN总线最大数据只有8个字节,CAN FD最大才64个字节,这么小的数据量,如何进行稍大一点的数据传输?