![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日一题
fengzhengwszz
这个作者很懒,什么都没留下…
展开
-
leetcode 07-25周赛第三题review
class Solution { int[][] g; int res = 0; int n; public int maxCompatibilitySum(int[][] students, int[][] mentors) { g = new int[students.length][students.length]; n = students.length;//前缀树的思路不对,用暴力 //预先把每一种匹配都记录下来(预先.原创 2021-07-25 15:40:49 · 57 阅读 · 0 评论 -
leetcode 1310子数组异或查询
在这里插入代码片class Solution { public int[] xorQueries(int[] arr, int[][] queries) { /*内存超出限制 //用dp记录,这样 int[][] dp=new int[arr.length][arr.length]; //相同为0 int len=arr.length; for(int i = 0;i < len;i++){原创 2021-05-12 09:54:49 · 51 阅读 · 0 评论 -
leetcode554 砖墙
public int leastBricks(List<List<Integer>> wall) { //想到了间隙,但是没有想到可以记录长度,妈呀 //寻找出现间隙最大的次数 Map<Integer,Integer> map = new HashMap<>(); for(List<Integer> list:wall){ int len = 0; ...原创 2021-05-02 15:48:55 · 63 阅读 · 0 评论 -
leetcode690员工的重要性
public int getImportance(List<Employee> employees, int id) { //层次遍历,家里的设备太烂了,一个代码搞了一早上 int res = 0; LinkedList<Integer> queue = new LinkedList<>(); Map<Integer,Employee> map = new HashMap<>();.原创 2021-05-01 11:37:29 · 45 阅读 · 0 评论 -
leetcode403青蛙过河
关于动态规划和bfs似乎找到一点点门路**//用dfs做//记忆化搜索+dfs//考虑加入记忆化,将可变参数作为维度,返回值作为存储值//从bfs到动态规划:dp[][]=可变参数//使用数组作为中间结果的缓存容器//boolean[石子列表下标][跳跃步数]//均为可变参数也就是i和k//为了区分状态是否计算int[石子列表下标][跳跃步数] 0:未计算 1:计算true -1:计算false//确定容器维度:2 <= stones.length <= 2000 确定为int[原创 2021-04-29 21:25:49 · 72 阅读 · 0 评论 -
leetcode633 寻找平方和
public boolean judgeSquareSum(int c) {//暴力//二分?//尝试二分 int left=0; int rigth=(int)Math.sqrt(c); while(left<=rigth){ int num=left*left+rigth*rigth; if(num==c){ return true; .原创 2021-04-28 09:43:53 · 43 阅读 · 0 评论 -
leetcode1011二分查找+滑窗
public int shipWithinDays(int[] weights, int D) {//我是废了,参考答案//二分查找加滑窗 //首先记录一下sum和max int sum=0;int max=0; for(int num:weights){ sum+=num; if(num>max){ max=num; } }原创 2021-04-26 10:48:19 · 54 阅读 · 0 评论 -
leetcode377 组合总数 又是一道动态规划和回溯都可以做的题
public int combinationSum4(int[] nums, int target) { //再用动态规划做 int[] dp=new int[target+1]; dp[0]=1; Arrays.sort(nums); //首先要保证组成的数是数组内的,所以一定会遍历数组 for (int i=1;i<=target;i++){ for (in.原创 2021-04-24 11:35:15 · 54 阅读 · 0 评论 -
leetcode368
寻找动态规划与回溯转换的办法public List<Integer> largestDivisibleSubset(int[] nums) { /*//先排序 Arrays.sort(nums); this.nums=nums; int len = nums.length; dfs(0,new LinkedList<Integer>()); return result; }原创 2021-04-23 11:16:16 · 59 阅读 · 0 评论 -
leetcode363 矩形区域不超过 K 的最大数值和
public int maxSumSubmatrix(int[][] matrix, int k) { //数组滚动:固定左右边界,只考虑行,在那两行之间组成的矩阵数字最大 //有点类似官方的解法 int m = matrix.length; int n = matrix[0].length; int max = Integer.MIN_VALUE; //1、划分左右边界,求出每行总和 //枚举左原创 2021-04-22 11:30:05 · 85 阅读 · 0 评论 -
leetcode91解码
可以用回溯做,也可以用动态规划做,但是回溯的时间复杂度太高了提出一个问题:如何将回溯转换为动态规划? public int numDecodings(String s) { if(s.charAt(0)=='0') return 0; int len=s.length(); if(len==1) return 1; int[] dp=new int[len+1]; dp[0]=1;dp[1]=1; for(i原创 2021-04-21 11:31:24 · 54 阅读 · 0 评论 -
leetcode28 实现 strStr() KMP算法
KMP算法主要应用于字符串匹配上。当出现字符串不匹配时,可以知道之前已经匹配的文本内容,利用此部分信息避免从头匹配 //KMP算法 public int strStr(String haystack, String needle) { if (needle.isEmpty()) return 0; int h=haystack.length();int n=needle.length(); char[] crrh=haystack.toCha原创 2021-04-20 11:47:13 · 75 阅读 · 0 评论 -
leetcoade27移除元素
public int removeElement(int[] nums, int val) { int len=nums.length; if(len==0) return 0; //首先排序,将元素集中在一起 Arrays.sort(nums); //有可能val不在数组内 if(val<nums[0]||val>nums[len-1]) return len; // if(len.原创 2021-04-19 10:17:05 · 47 阅读 · 0 评论 -
26 删除有序数组中的重复数
//选择不同的数字,然后放到最后面 public int removeDuplicates(int[] nums) { if(nums.length==0) return 0; int i=0,j=0; while(j<nums.length-1){ while(j<nums.length) { if(j==nums.length-1) {return i+1;}原创 2021-04-18 13:50:43 · 46 阅读 · 0 评论 -
87.扰乱字符串
class Solution { public boolean isScramble(String s1, String s2) { int len=s1.length(); //if(len==1) return true; //判断两个字符串的长度 if(s1.length()!=s2.length()) return false; //判断两个字符串是否相同 if(s1.equals(s2)) return true; //判断两个字符串原创 2021-04-16 13:27:19 · 39 阅读 · 0 评论 -
leetcode213 打家劫舍
public int rob(int[] nums) { int len=nums.length; if(len==1) return nums[0]; if(len==2) return nums[0]>nums[1]?nums[0]:nums[1]; //利用动态规划做。dp[i]表示到某位置的最大值 int[] dp=new int[len]; //分为两种情况,偷第一间,与不偷第一间,如果偷,则范围原创 2021-04-15 10:21:19 · 44 阅读 · 0 评论 -
208.前缀树
class Trie { //用二维数组实现 int CHARACTER=26; int[][] trieTree=new int[100009][CHARACTER]; int k=1; int[] isEnd=new int[100009];//标记节点是不是终止节点 //trieTree[i][j]=0表示节点i没有一条边满足字符集中的标识是j //trieTree[i][j]=x 有边,并且下一个是节点x /** Initialize原创 2021-04-14 10:46:17 · 49 阅读 · 0 评论 -
letcode783二叉搜索树最小距离
public int minDiffInBST(TreeNode root) { // if(root==null) return 0; // //用队列来做 // Queue<TreeNode> queue=new LinkedList<>(); // queue.offer(root); // while(!queue.isEmpty()){ // //先出队列 // .原创 2021-04-13 10:23:48 · 42 阅读 · 0 评论 -
leetcode179 最大数
//相比于比较两个数,直接比较拼接好后的字符串比较省事 public String largestNumber(int[] nums) {//第一遍循环:全部变成字符串 int len=nums.length; if(len<=1) return nums[0]+""; String [] stringNum=new String[len]; for(int i=0;i<len;i++){ stringNum原创 2021-04-12 10:52:24 · 38 阅读 · 0 评论 -
263 丑数
//利用递归来做 public boolean isUgly(int n) { if(n==0) return false; if(n==1){ return true; } if(n%2==0){ return isUgly(n/2); } else if(n%3==0){ return isUgly(n/3); }原创 2021-04-10 13:06:54 · 48 阅读 · 0 评论 -
leetcode154寻找旋转数组最小值
public int findMin(int[] nums) {//升序:如果最小值已经旋转到mid前面,那么mid不会大于最后的值//不停的缩小寻找的范围,直到缩小到两个数上为止int left=0;int right=nums.length-1;while(left<=right){ int mid=left+(right-left)/2; if(nums[mid]>nums[right]){ //向mid后面找,mid也不是 le.原创 2021-04-09 10:26:40 · 42 阅读 · 0 评论 -
leetcode153寻找旋转数组的最小值
public int findMin(int[] nums) { /*依旧是二分查找*/ int start=0; int end=nums.length-1; int res=0; while(start<=end){ int mid=(start+end)/2; if(nums[mid]>nums[end]){ //向后找 ..原创 2021-04-08 09:35:25 · 38 阅读 · 0 评论 -
leetcode 81 s搜索旋转数组
利用二分查找做public boolean search(int[] nums, int target) { //利用二分查找 int left1=0; int right2=nums.length-1; while(left1<=right2){ int mid=(left1+right2)/2; if(target==nums[mid]){ return原创 2021-04-07 10:41:31 · 49 阅读 · 0 评论 -
每日一题:leetcode 80 删除有序数组中的重复书,O(1)空间
每日一题:leetcode 80倒序遍历,减少移动次数利用count计数,重复数字到底有多少,如果count>=2,说明超过了2个重复数字,那么保留前两个,将后面的重复数字删除删除的方法:将后面的数字前移 public int removeDuplicates(int[] nums) { if(nums.length==0){ return 0; } int res=nums.length; int cou原创 2021-04-06 09:53:32 · 58 阅读 · 0 评论 -
每日一题:直方图水量
leetcode每日一题直方图的水量自己的想法题解直方图的水量)自己的想法每个水池一定是先发生递减,后发生递增的所以用一个up数组记录数字的变化趋势对于水池存在二种情况:1、高地突出,拦截水流2、水流从高处流下,但是出现了一个小突起,这个小突起对于后面都是高下面展示一些 内联代码片。public int trap(int[] height) {//有漏洞,做的很不好//水池一定是被先递减,后递增包围着的if(height==null||height.length==0){原创 2021-04-02 14:34:46 · 82 阅读 · 0 评论