
每日刷题
wmmmyyyyyy
这个作者很懒,什么都没留下…
展开
-
动归-打家劫舍系列
一、标准动归class Solution { public int rob(int[] nums) { //不能进连续的屋子 int n=nums.length; if(n==1){ return nums[0]; } if(n==2){ return Math.max(nums[0],nums[1]); } int[] dp=new i原创 2021-07-19 18:57:14 · 88 阅读 · 0 评论 -
01背包和完全背包写法区别
一、01背包class Solution { public boolean canPartition(int[] nums) { int len=nums.length; int sum=0; for(int num:nums){ sum+=num; } if(sum%2!=0) return false; int target=sum/2; boolea原创 2021-07-18 21:37:20 · 293 阅读 · 0 评论 -
算法-括号问题
1.判断括号有效一般使用栈进行判断(1)(),{},[]使用一个栈class Solution { public boolean isValid(String s) { //java中推荐使用Deque替代Stack,Deque堆栈操作方法:push()、pop()、peek() Deque<Character> stack=new LinkedList<>(); char[] c=s.toCharArray();原创 2021-07-11 10:52:20 · 416 阅读 · 0 评论 -
美团2021笔试编程真题10(二分查找+贪心+小顶堆+分治递归)
1.寻找左侧边界的二分查找某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他人淘汰。但是为了保护粉丝脆弱的心脏,小美希望晋级和淘汰的人数均在**[x,y]**之间。显然这个m有可能是不存在的,也有可能存在多个m,如果不存在,请你输出-1,如果存在多个,请你输出符合条件的最低的分数线。==解题:==使用二分搜索查找满足条件的左侧边界import java.lang.refl原创 2021-07-02 09:00:56 · 2083 阅读 · 1 评论 -
Scanner用法
1.获取一个数int N=sc.nextInt();2.获取整行String temp = sc.nextLine();返回的是一个字符串如果该句是在第一行获得,直接这样写就行;如果是在第一行后面获得,则需要在前面加上一句sc.nextLine(),即:sc.nextLine();String temp = sc.nextLine();...原创 2021-06-30 22:11:03 · 170 阅读 · 0 评论 -
动态规划
1.跳跃游戏class Solution { public boolean canJump(int[] nums) { //使用贪心算法 int n=nums.length; int farthest=0; for(int i=0;i<n-1;i++){ farthest=Math.max(farthest,nums[i]+i); //遇到0卡住,跳不了原创 2021-06-28 10:35:58 · 144 阅读 · 0 评论 -
贪心&数组&排序
目录1.无重复区间2.用最少数量的箭引爆气球1.无重复区间class Solution { public int eraseOverlapIntervals(int[][] intervals) { if(intervals.length==0) return 0; //贪心算法:区间调度,找到最多不重合子区间,用集合长度减去不重合子区间个数就是答案 //1.让二维数组按照每个一维数组的end进行排序(从小到大) //2.找到最小原创 2021-06-27 11:14:54 · 259 阅读 · 0 评论 -
BFS&(二叉树+字符串+数组)
目录1.二叉树的最小深度2.打开转盘锁3.滑动谜题1.二叉树的最小深度/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int va原创 2021-06-26 11:47:40 · 118 阅读 · 0 评论 -
二叉树&递归
目录1.二叉树的序列化与反序列化2.二叉搜索树中第k小的元素3.把二叉树转换为累加树1.二叉树的序列化与反序列化/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Codec {原创 2021-06-24 20:27:07 · 91 阅读 · 0 评论 -
递归&二叉树
写递归算法的秘诀:写递归算法的关键是要明确函数的「定义」是什么然后相信这个定义,利用这个定义推导最终结果,绝不要试图跳入递归。怎么理解呢,我们用一个具体的例子来说,比如说让你计算一棵二叉树共有几个节点:// 定义:count(root) 返回以 root 为根的树有多少节点int count(TreeNode root) { // base case if (root == null) return 0; // 自己加上子树的节点数就是整棵树的节点数 return原创 2021-06-23 17:26:24 · 209 阅读 · 1 评论 -
Leetcode每日刷题:链表&(递归+迭代)
1.递归+迭代:反转链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseList(ListNode head) { //1.递归解法原创 2021-06-21 14:11:51 · 193 阅读 · 0 评论 -
Leetcode每日刷题:回溯算法&(字符串+数组)
1.回溯:组合总和class Solution { List<List<Integer>> res=new LinkedList<>(); public List<List<Integer>> combinationSum(int[] candidates, int target) { if(candidates==null || candidates.length==0){ return原创 2021-06-17 15:11:17 · 214 阅读 · 1 评论 -
Leetcode每日刷题:回溯算法&(数组+字符串)
1.回溯算法:全排列class Solution { List<List<Integer>> res=new LinkedList<>(); public List<List<Integer>> permute(int[] nums) { if(nums==null ||nums.length==0){ return res; } LinkedList<原创 2021-06-15 11:21:32 · 227 阅读 · 0 评论 -
Leetcode每日刷题:(滑动窗口+单调栈)&(字符串+数组+栈)
1.滑动窗口算法:最小覆盖子串class Solution { public String minWindow(String s, String t) { //使用滑动窗口算法 //base case if(s==null || s.length()==0){ return ""; } //使用needs记录target字符串中的字符以及个数 Map<Character,原创 2021-06-13 16:26:09 · 145 阅读 · 0 评论 -
Leetcode每日刷题:(二分查找+双指针+hashmap)&(数组+链表+字符串)
1.二分查找右边界:爱吃香蕉的珂珂class Solution { public int minEatingSpeed(int[] piles, int h) { //使用二分查找法寻找速度的左边界,即最小速度 //速度的左右边界,最大速度就是数组的最大值,因为一小时吃完这堆香蕉不会再吃更多的香蕉 int left=1,right=getMax(piles)+1; while(left<right){原创 2021-06-10 16:14:01 · 206 阅读 · 0 评论 -
LeetCode每日刷题:(hashset)&(动态规划+位运算+递归)+(数学:约瑟夫环)
1.逻辑+hashset:扑克牌中的顺子//构成顺子的充分条件://(1)无重复牌(2)最大牌-最小牌<=5class Solution { public boolean isStraight(int[] nums) { //构成顺子的充分条件: //(1)无重复牌(2)最大牌-最小牌<=5 //可以使用hashset实现 Set<Integer> set=new HashSet<>();原创 2021-06-08 11:34:43 · 127 阅读 · 0 评论 -
LeetCode每日刷题:(单调队列+队列+二叉树+字符串)&(动态规划+递归)
1.单调队列:滑动窗口的最大值class Solution { public int[] maxSlidingWindow(int[] nums, int k) { // //1.暴力法 // int n=nums.length; // if(n==0 || k==0) return new int[0]; // int[] res=new int[n-k+1]; // for(int i=0;i<n-k+1;原创 2021-06-06 21:26:14 · 378 阅读 · 0 评论 -
LeetCode每日刷题:(hashmap+字符串+二叉树)&(双指针+滑动窗口+递归)
1.hashmap:数组中数字出现的次数2class Solution { public int singleNumber(int[] nums) { Map<Integer,Integer> map=new HashMap<>(); int res=0; for(int i:nums){ map.put(i,map.getOrDefault(i,0)+1); } fo原创 2021-06-04 22:18:13 · 151 阅读 · 0 评论 -
leetcode每日刷题:(递归+异或)&(数组+哈希表+二叉树)
1.数组+哈希表+等差数列class Solution { public int missingNumber(int[] nums) { // //1.我的笨方法 // int n=nums.length; // int res=-1; // //使用hashmap进行记录,map中先放好0到n共n+1个键值对, // Map<Integer,Integer> map=new HashMap<&g原创 2021-06-03 21:05:38 · 162 阅读 · 0 评论 -
LeetCode每日刷题:hashmap+动态规划
1.hashmap:最长不含重复字符的子字符串class Solution { public int lengthOfLongestSubstring(String s) { if(s==null || s.length()==0){ return 0; } char[] c=s.toCharArray(); int start=0,maxLength=0; HashMap<Charac原创 2021-06-02 21:01:47 · 217 阅读 · 0 评论 -
LeetCode每日刷题:动态规划+排序&&数组+字符串
1.数组:数组中出现次数超过一半的数字class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); //由于该数出现次数超过一般,所以排序后一定位于中间 //元素个数为偶数:是在中间的缝的右边那个元素;奇数:中间元素 return nums[nums.length/2]; }}2.数组:最小的k个数class Solutio原创 2021-06-01 16:10:12 · 231 阅读 · 0 评论 -
每日刷题->回溯&&哈希表+二叉树+字符串+链表
1.二叉树中和为某一值的路径->回溯/** * 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 lef原创 2021-05-31 20:40:10 · 126 阅读 · 0 评论 -
每日刷题->链表+树+栈+队列+数组
1.链表中倒数第k个节点->快慢指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode getKthFromEnd(ListNode head, int k) {原创 2021-05-30 22:05:25 · 133 阅读 · 0 评论 -
每日刷题->递归+动态规划&&数值+链表+数组+哈希表
1.两数之和->hashmapclass Solution { public int[] twoSum(int[] nums, int target) { int[] res=new int[2]; if(nums.length==0){ return res; } Map<Integer,Integer> map=new HashMap<>(); for(int原创 2021-05-29 22:22:10 · 96 阅读 · 0 评论 -
每日刷题->递归+动归+位运算
1.机器人的运动范围->递归class Solution { int res=0; public int movingCount(int m, int n, int k) { boolean[][] used=new boolean[m][n]; dfs(m,n,k,0,0,used); return res; } public void dfs(int m,int n,int k,int i,int j,boolea原创 2021-05-26 21:07:22 · 164 阅读 · 0 评论 -
每日刷题->二分法+回溯
1.旋转数组的最小数字->二分法class Solution { public int minArray(int[] numbers) { //1.暴力 O(N),O(1) int n=numbers.length; // if(n==1) return numbers[0]; // int res=numbers[0]; // for(int i=0;i<n-1;i++){ //原创 2021-05-25 22:22:34 · 190 阅读 · 0 评论