
日常刷题
fuckguidao
学习学习学习………………
展开
-
leetcode每日一题刷题笔记
ps: 上研究生了,有段时间没刷leetcode了,今日起重新养成刷题的好习惯,为两年后找工作打下坚实基础,刚把得啊少年,不能退缩。2022年2月26日:2016. 增量元素之间的最大差值 简单给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -原创 2022-02-26 21:12:05 · 310 阅读 · 0 评论 -
剑指offer 6 旋转数组的最小数字
采用二分法的思想采用二分法,主要是mid与一个target比较,普通的二分查找target是给出来的,但有时没有明确的target,比如这道题,这时一般选择端点当作target,即l或r。端点的选择问题:对与这道题,应该选择r,如图所示,倾斜的实线代表序列上升的趋势。选择r:当mid>r时,显然寻找的min在mid右边。所以区间放缩:l=mid+1。当mid<r时,min可能在mid的左边,但min也可能就是mid(因为min也小于r),所以区间放缩为:r=mid。当m原创 2020-06-22 00:23:21 · 256 阅读 · 0 评论 -
leetcode 124二叉树中最大路径和
思路这道题的解法很巧妙,我要着重介绍这道题。明确几个概念路径:这里的路径指的是,从树中的某个节点到另一个节点,包括终点和起点,仅有一个点也算是一条路径。路径和:这里的路径和指的是,路径中所有节点值的和。最大路径和:顾名思义,就是所有路径中最大的那条路径。明确经过一个节点的路径的三种情况这里我参考了官方题解里的说明。经过一个点的路径有三种情况(当然这里指的是一般情况)。left----root----parent(拐向父节点);right----root----parent(拐向父节点原创 2020-06-21 23:25:04 · 156 阅读 · 0 评论 -
剑指offer 4 重建二叉树
先序与中序遍历的数列是可以确定一棵树先序遍历数列的第一个节点必然是根节点。而该节点在中序遍历数列的中间,其左边的数列是左树的先序遍历序列,右边的是右树的中序遍历数列,由此递归。我这里用了一个hashmap,存放了中序遍历的值和下标的映射,以减少在递归过程中在中序序列中遍历寻找根节点下表的时间消耗。思路很简单,代码如下:/** * Definition for binary tree * public class TreeNode { * int val; * TreeNod原创 2020-06-19 23:21:11 · 164 阅读 · 0 评论 -
leetcode 125验证回文串
讲真,这道简单难度的题没什么好说的,直接上代码class Solution { //第一次写的 public boolean f1(String s){ char[] clist = new char[s.length()]; int index = 0; char c; for(int i=0;i<s.length();i++){ c = s.charAt(i);原创 2020-06-19 20:34:19 · 168 阅读 · 0 评论 -
剑指offer 2替换空格
这道题没什么可说的,java写没什么技术含量,c++才能体现出来这道题的意义java 写法public class Solution { public String replaceSpace(StringBuffer str) { StringBuffer ss = new StringBuffer(""); int n=str.length(); for(int i=0;i<n;i++){ if(str.charAt原创 2020-06-18 19:58:27 · 120 阅读 · 0 评论 -
leetcode 1028. 从先序遍历还原二叉树
解法1. 递归涉及到树的先序遍历立刻就想到了递归,如下是遵照二叉树先序遍历顺序写的递归做法。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { //直接在递归中解析字原创 2020-06-18 19:50:20 · 212 阅读 · 0 评论 -
剑指offer 3 从头到尾打印链表
三种做法1. 简单遍历到列表,然后反转2. 递归3. 反转链表,再遍历。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;public class Solution {原创 2020-06-18 19:32:24 · 183 阅读 · 0 评论 -
leecode 1014最佳观光组合
最优解法注意到,观光值为A[i]+i+A[j]-j.对每一个固定的j,最大的观光值为A[j]-j+max(A[i]-i),i<j。我们选择从头开始遍历j显然这个max(A[i]-i)是可以在遍历过程中维护的。同时遍历时也可计算观光值的最大值。所以时间复杂度为o(n),空间复杂度为o(1)。代码:class Solution { public int maxScoreSightseeingPair(int[] A) { int maxi = A[0];原创 2020-06-17 15:15:29 · 174 阅读 · 0 评论 -
leecode 297 二叉树的序列化与反序列化
首先是简单的层序遍历序列化时:搞个队列,层序遍历,记录成”**,“的形式,值得注意的是,Java中设计频繁的字符串修改时,不要使用String,选择StringBuffer或StringBuilder代替。原因是String是不可变对象,每次修改都会new对象从而产生较大的功耗。反序列化时:同样建个队列,挨个获取字符串中的数据,逐个为节点添加左右节点。因为之前序列化的时候就是采用这个顺序。代码:/** * Definition for a binary tree node. * public原创 2020-06-17 00:42:14 · 154 阅读 · 0 评论 -
牛客剑指offer 1.二位数组中的查找
最优解法借助于二分搜索的拓展。详见官方题解:以右上角的元素为基准,若attr<tag,则tag必定不在attr的正左边,范围减小一行,attr下移一格;若attr>tag,tag必定不在attr的正下方,范围缩减一列,attr左移一格;直至查遍所有元素。这种做法,每次缩减一格或一行,最坏情况下,时间复杂度为o(m+n) m,n为数组行数和列数。代码如下:public class Solution { public boolean Find(int target, int原创 2020-06-16 20:00:07 · 153 阅读 · 0 评论 -
leetcode 990 等式方程 (6-8刷题)
方法:并查集。思路:相等的关系可以传递,最终的结果集必然是若干个集合,每个集合里的变量拥有相同的值,即处在同一个连通分量里。而不等关系则是两个变量在不同的连通分量里。所以,先针对相等关系建立并查集,而后判断每个不等关系是否都满足即可。代码:class Solution { // 并查集,这里并查集的根节点与下标相等。 public int[] parent=new int[26]; public int findParent(int t){ while(par原创 2020-06-08 23:16:58 · 163 阅读 · 0 评论 -
leetcode 42.接雨水——双指针
题目链接 传送门解析我承认一开始想复杂了,一看答案发现自己是个沙雕。我一开始居然往极值和差分那个方向去想了,还有就是题目居然标的是困难,唉。官方题解有四种方案暴力动态规划栈双指针。前三种,看官方题解就行,属于一点就通的方法。只是第四种方法即双指针法我不是很熟悉,所以觉得有点嚼头。我并没有死扣官方的代码,而是在题解点出的方向上自己重构的代码。思路如下首先,在写动态规划...原创 2020-04-05 00:09:12 · 288 阅读 · 0 评论 -
leetcode 169. 多数元素——摩尔投票算法
题目链接 传送门摩尔投票算法见leetCode 的题解https://leetcode-cn.com/problems/majority-element/solution/duo-shu-yuan-su-by-leetcode-solution/代码class Solution { public int majorityElement(int[] nums) { ...原创 2020-04-01 14:27:43 · 188 阅读 · 0 评论 -
leetcode 1111. 有效括号的嵌套深度——栈处理括号嵌套
题目链接 传送门思路代码:class Solution { public int[] maxDepthAfterSplit(String seq) { int top=0; char[] c=seq.toCharArray(); int[] ans=new int[c.length]; for(int i=0;i<...原创 2020-04-01 13:50:25 · 208 阅读 · 0 评论 -
leetcode 912. 排序数组——解法汇总,计数排序o(n),快速排序、归并排序、堆排序
题目链接传送门说明代码class Solution { public int[] sortArray(int[] nums) { //排序? //计数排序o(n) // sortTong(nums); //归并 // int[] temp=new int[nums.length]; // ...原创 2020-04-01 00:13:26 · 164 阅读 · 0 评论 -
leetcode 62. 圆圈中最后剩下的数字,约瑟夫环
链接 https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/官方题解写的就不错https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/yuan-quan-zho...原创 2020-03-30 20:43:14 · 184 阅读 · 0 评论 -
The Trip On Abandoned Railway题解 二次差分树状数组
题目链接传送门题目描述题目大意是,一条废弃的地铁路线上有n个火车站,第i个火车站初始盘踞着ai个鬼鬼。然后有一辆幽灵列车会突然从某个车站出现,并从车上下来x个鬼。即该车站鬼魂数量+x。列车会一路行驶直至终点,每经过一个车站,从列车上下来的鬼魂数量就比前一个车站下来的多d个即从车上下来x+k*d个鬼魂,其中k为从列车出现经过的车站数。另有一个驱魔师,到了某个车站后,就将该车站的所有鬼魂全部...原创 2020-03-30 14:11:57 · 261 阅读 · 0 评论 -
顺时针打印二维矩阵
问题输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 45 6 7 89 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解决方案代码public static void solution(int[][] a){ ...原创 2020-03-26 20:08:56 · 228 阅读 · 0 评论 -
位数差 题解
题目链接传送门知识点二分题解题解摘自https://www.cnblogs.com/wsy107316/p/12334575.html按从大大到小排好的数组里,a[i]会与后面较小的数相加求位数后再累加,即计算∑0≤i<j≤n bit(a[i]+a[j]) 的值验证可知一个数k加上一个小于等于k的数后,其数位要么+1(产生进位),要么不加(没有产生进位)由于数组是降序排序...原创 2020-03-19 13:57:49 · 448 阅读 · 0 评论 -
小L 的序列 解析
小L 的序列 解析题目链接传送门知识点位运算,数据范围i&1 提取最后一位是否为1i>>1= i/2 左移一位这道题有个坑,被我完全踩进去了,数据范围是2^31-1 到 -2^31-1正好是int的范围,所以我果断用了int ,然后就gg了题目中有一个求绝对值的操作,所以负数部分一变成正的就超int 了换成long后就行了代码#include <io...原创 2020-03-17 15:35:26 · 303 阅读 · 0 评论