- 博客(45)
- 收藏
- 关注
原创 每日一题--错题集(x)
Day1_11.29要使对象具有序列化能力,则其类应该实现如下哪个接口(A)。 A java.io.Serializable B java.lang.Cloneable C java.lang.CharSequence D java.lang.Comparable错选:D A:Serializable接口是专门提供给类实现序列化用的。 B:Cloneable是用来实现克隆方法的。 C:实现了CharSequence接口的有:CharBuffer、String、StringBuffer、St
2021-12-12 22:28:38 721
原创 每日写题分享--赎金信
题目描述:题目链接戳此解题思路:读完题目,我们发现只要magazine里面包含ransomNote里的所有元素即可。换句话说,就是magazine里面元素种类>=ransomNote的,并且magazine里面每种元素的数量>=ransomNote里面对应元素数量的。解题方法:设计一个长度为26的数组(能够存放下所有种类元素,即26字母),统计magazine和ransomNote里面每个元素出现的个数。只要ransomNote有一个元素出现的次数大于magazine的,返.
2021-12-04 14:44:57 385
原创 每日写题分享--双栈实现队列
题目描述:题目链接:双栈实现队列解题思路:这题考察的就是出入栈和出入队列的顺序,栈是先进后出的数据结构,队列是先进先出的数据结构,要用栈实现队列的功能,只要用两个站互相倒元素,出入栈顺序就能反过来。这里我没有直接使用stack,因为stack继承了vector接口,vector底层是Object[]数组,要考虑空间扩容和移位等因素,会导致速度比较慢。而LinkedList实现了Deque接口,可以用Linkedlist做stack的容器。1.创建两个栈2.在队尾插入元素。前.
2021-12-01 17:21:38 394 2
原创 每日写题分享--第N位数字
给你一个整数n,请你在无限的整数序列[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]中找出并返回第n位数字。
2021-11-30 15:24:37 335 1
原创 每日写题分享--找到字符串中所有字母异位词--滑动窗口/哈希表
题目描述:给定两个字符串s和 p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例1:输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。力扣438链接解题思路:可以定义两个指针,保持两个...
2021-11-29 17:59:58 298
原创 每日写题分享--第k个最小的素数分数--优先队列/HashMap
题目描述:给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数组成,且其中所有整数互不相同。对于每对满足 0 < i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。那么第k个最小的分数是多少呢?以长度为 2 的整数数组返回你的答案, 这里answer[0] == arr[i]且answer[1] == arr[j] 。示例 1:输入:arr = [1,2,3,5], ...
2021-11-29 17:40:57 136
原创 每日写题分享--段式回文--递归
题目描述:段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符而不是 单个字母。举个例子,对于一般回文 "abcba" 是回文,而 "volvo" 不是,但如果我们把"volvo" 分为 "vo"、"l"、"vo" 三段,则可以认为 “(vo)(l)(vo)” 是段式回文(分为 3 段)。给你一个字符串text,在确保它满足段式回文的前提下,请你返回 段 的最大数量k。题目链接戳此解题思路:题目已经明确说明给定的字符串是段式回文,不需要判断,那么我们只需要找并且...
2021-11-27 18:20:55 222
原创 每日写题分享--最接近的三数之和--双指针
题目描述:给你一个长度为 n 的整数数组nums和 一个目标值target。请你从 nums 中选出三个整数,使它们的和与target最接近。返回这三个数的和。假定每组输入只存在恰好一个解。题目链接戳此解题思路:题目要求最接近目标值的三数之和,可以先给数组排序,这里可以自己写一个排序,会比函数库的排序速度快得多,然后定义两个指针一个在左边界,一个在右边界,用i遍历数组,当i和左右两边的指针指向的数之和小于目标值,由于数组是有序的,可以直接让左边界的指针向右移动,当i和左右两边的...
2021-11-27 15:58:31 215
原创 //删除链表中重复节点--快慢指针
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5题目链接戳此思路:定义快慢指针,快指针比慢指针多走一步,慢指针指向重复前的节点,当快指针碰到重复节点慢指针就不走了,快指针一直走到最后一个重复的节点上停下来,然后让慢指针的next指向快指针的next,快指针继续向后走一步,这样相对位置就又回到起始的时候了。注意如果是快.
2021-11-26 17:33:18 568
原创 每日写题分享--单词拆分/动态规划/剪枝
题目描述:给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定s 是否可以由空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。题目链接戳此思路:首先将字典放进set里面,方便判断字典中是否包含某个单词,并求出字典中最长单词的长度(下面解析中有解释)。再根据题意,如果一个字符串合法(即拆分后的单词全都在字典里能查询到),那么这个字符串去掉一个单词也是合法的,由此能得到动态转移方程。具体实现根据下面代码解析:如果在单词长度为 i 时,j 从 i.
2021-11-26 16:13:14 859 1
原创 每日写题分享--力扣--可怜的小猪
题目描述:有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有minutesToTest 分钟时间来确定哪桶液体是有毒的。喂猪的规则如下:选择若干活猪进行喂养可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要时间。小猪喝完水后,必须有 minutesToDie 分钟的冷却时间。在这段时间里,你只能观察,而不允许继续喂猪。过了 minutesToDie.
2021-11-25 15:23:46 164
原创 每日写题分享--菲波那切数列--递归/迭代/动态规划/剪枝
题目描述:题目链接戳此思路:方法一:迭代只要计算出要求的那一项的前一项和前前项的和就是那一项的菲波那切数列。定义first为第一项,second为第二项,fib为前两项的和即第三项。此后三项一起向后走,就可以求出第n项。代码实现如下:public class Solution { public int Fibonacci(int n) { int first = 1; int second = 1; int fib = .
2021-11-24 14:36:21 540
原创 每日写题分享--牛客--链表中倒数第K个节点--双指针
题目描述:输入一个长度为 n 的链表,设链表中的元素的值为 ai,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。题目链接戳此思路:定义两个指针,先让快指针走k步,然后快慢指针以一样的速度一起走,这样快慢指针之间的距离始终为k,等快指针走到空的时候,慢指针指向的就是倒数第k个节点。代码实现如下:public class Solution { public ListNode FindKthToTail (ListNode pHead, int.
2021-11-24 14:17:19 519
原创 每日写题分享--根据前序和中序遍历结果重建二叉树--递归
题目描述:给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。题目链接思路:从中序遍历结果中找到前序遍历结果的第一个数,这个数在中序遍历结果中的位置假设为p,则p为根节点,中序遍历结果中p的左边为p的左子树,p的右边为p的右子数。可以自己画图看一下就知道了。代码实现如下:写法一:class Solution { public int pi = 0; public int findIndex(int[] preorder,int[] i
2021-11-23 19:39:02 858 2
原创 每日写题分享--牛客--从尾到头打印链表--递归/栈/头插反转
题目描述:输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。题目链接思路:方法一:递归。走到最后的节点开始打印链表。代码实现如下:import java.util.ArrayList;public class Solution { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> print
2021-11-23 19:25:07 687
原创 每日写题分享--牛客--替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目链接:替换空格思路:遍历计数空格个数,然后计算出字符串的新长度,定义n向新长度最后位置,old指向还没替换的字符串最后的位置,从后向前遍历,碰到字母就都向前走,碰到字符串old向前走,new依次插入需要替换的字符,然后向前走。代码实现如下:public class Solution { pub
2021-11-23 19:14:21 153
原创 每日习题分享--LeetCode209.长度最小的子数组--滑动窗口、前缀和
题目描述:给定一个含有n个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。题目链接思路:采用滑动窗口思想,定义一个指针j记录子数组的开始下标,用 i 遍历数组,定义sum记录下子数组的前缀和,再用minLen记录下子数组出现过最小的长度。只要sum大于目标值,sum减去子数组的开始下标的数值...
2021-11-23 19:05:28 261
原创 每日写题分享--牛客--NC77 调整数组顺序使奇数位于偶数前面(一)--类似于插入排序。
每日写题分享--牛客--NC77 调整数组顺序使奇数位于偶数前面(一)--类似于插入排序
2021-11-22 16:50:14 460
原创 每日写题分享--牛客--旋转数组的最小数字--双指针
题目链接:旋转数组的最小数字题目描述:有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1≤n≤100001 \le n \le 100001≤n≤10000,数组中任意元素的值:0≤val≤100000 \le val \le 100000≤val≤10000要求:空间复杂.
2021-11-22 16:07:01 535 1
原创 每日写题分享--牛客NC78--反转链表
题目链接:反转链表题目介绍:给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。数据范围:n\leq1000n≤1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。思路:定以前指针记录,定义后指针走路。然后改指向。代码实现如下:/*public class ListNode { int val; ...
2021-11-22 15:23:42 673
原创 每日写题分享--Leetcode384.打乱数组\\洗牌算法
题目描述:给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果题目链接:打乱数组思路:第一个是构造函数,本题不仅仅考查洗牌算法,也考察对基础知识的掌握情况,首先要有两个成员变量,即两个数组,说通俗点就是一个用来给后面函数打乱用的,一个用来保存原始数
2021-11-22 14:50:08 431
原创 每日写题分享--leetcode563.二叉树的坡度--双递归及优化
题目链接:二叉树的坡度原题链接题目描述:给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。思路:通过递归算出每个节点左子树val值的和sum1、右子数val值的和sum2,sum1与sum2差的绝对值就是每个节点的坡度,求总坡度直接将所有坡度相加即可。优化前代码如下:
2021-11-20 20:22:11 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人