
练习题目
力扣和牛客的刷题记录
天青色等烟雨007
佛系女孩
展开
-
HJ84.统计大写字母个数
题目描述描述找出给定字符串中大写字符(即’A’-‘Z’)的个数。数据范围:字符串长度:1\le |s|\le 250\1≤∣s∣≤250字符串中可能包含空格或其他字符进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n)输入描述:本题含有多组样例输入对于每组样例,输入一行,代表待统计的字符串输出描述:对于每组样例,输出一个整数,代表字符串中大写字母的个数解答import java.util.*;public class Main{ public static原创 2022-02-08 19:09:53 · 472 阅读 · 0 评论 -
HJ106-字符逆序
题目描述将一个字符串str的内容颠倒过来,并输出。数据范围:1 \le len(str) \le 10000\1≤len(str)≤10000输入描述:输入一个字符串,可以有空格输出描述:输出逆序的字符串示例1输入:I am a student输出:tneduts a ma I解法一import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc=n原创 2022-02-08 18:40:34 · 565 阅读 · 0 评论 -
二叉树根节点到叶子结点的所有路径和
题目描述给定一个仅包含数字\ 0-9 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1\to 2\to 31→2→3,那么这条路径就用\ 123 123 来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:题目来源二叉树根节点到叶子节点的所有路径和题目解答public class Solution { /** * * @param root TreeNode类 * @return int原创 2021-03-09 16:45:47 · 1882 阅读 · 0 评论 -
合法括号序列判断
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。题目来源:合法括号序列判断思路:1.碰到")“开始弹出栈顶的”(",如果此时栈为空,则返回false2.碰到其他内容直接返回false3.字符串结尾时,栈非空返回falseimport java.util.*;public class Parenthesis { public boolean chkParenthesis(String A,原创 2020-06-03 23:34:07 · 205 阅读 · 2 评论 -
字符串中找出连续最长的数字串
读入一个字符串str,输出字符串str中的连续最长的数字串输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串。题目来源:字符串中找出连续最长的数字串解题思路:用max表示经过的数字长度最大值,count表示数字计数器,当为字母时重置为0 end表示数字尾部,每次满足数字时,对max进行判断,当max小于于count时,更新max和end import java.util.*;public class Main{原创 2020-06-03 23:19:00 · 1555 阅读 · 0 评论 -
数组中的逆序对
链接:数组中的逆序对来源:牛客网有一组数,对于其中任意两个数组,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。请设计一个高效的算法,计算给定数组中的逆序对个数。给定一个int数组A和它的大小n,请返回A中的逆序对个数。保证n小于等于5000。测试样例:[1,2,3,4,5,6,7,0],8返回:7解题思路:思路1:暴力解法,顺序扫描整个数组,每扫描到一个数字的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成一个逆序对。假设数组中含有n个数字,由于原创 2020-06-02 23:49:56 · 209 阅读 · 0 评论 -
跳跃游戏II
题目来源跳跃游戏II题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。解题使用贪心算法,正向进行求解class Solution { public int jump(int[] nums) { int n=nums.length; int end=0; int maxPosition=0; int steps=0;原创 2021-02-01 11:32:01 · 126 阅读 · 0 评论 -
跳跃游戏
题目来源跳跃游戏题目描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。思路分析class Solution { public boolean canJump(int[] nums) { int n=nums.length; int rightmost=0; for(int i=0;i<n;++i){ if原创 2021-02-01 11:03:22 · 105 阅读 · 0 评论 -
不同路径II
题目来源不同路径II题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?解答:动态规划class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m=obsta原创 2021-02-01 10:34:19 · 131 阅读 · 0 评论 -
不同路径
题目来源不同路径题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解答一:动态规划class Solution { public int uniquePaths(int m, int n) { int[][] dp=new int[m][n]; for(int i=0;i<原创 2021-01-29 11:12:30 · 124 阅读 · 0 评论 -
最小路径和
题目来源最小路径和题目描述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。(说明:每次只能向下或者向右移动一步。)思路分析:动态规划分下面三种情况:class Solution { public int minPathSum(int[][] grid) { int x=grid.length; int y=grid[0].length; int[][] dp=new i原创 2021-01-29 10:49:19 · 135 阅读 · 0 评论 -
三角形最小路径和
题目来源三角形最小路径和题目描述给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。解法一:动态规划class Solution { public int minimumTotal(List<List<Integer>>原创 2021-01-28 11:27:56 · 141 阅读 · 0 评论 -
字符串解码
题目来源字符串解码题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。思路分析class Solution { int ptr;原创 2021-01-25 11:17:33 · 546 阅读 · 0 评论 -
逆波兰表达式求值
题目来源逆波兰表达式求值题目描述根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。题目解答class Solution { public int evalRPN(String[] tokens) { int[] numStack=new int[tokens.length/原创 2021-01-25 09:48:31 · 102 阅读 · 0 评论 -
回文链表
题目来源回文链表题目描述解答一将值复制到数组之后用双指针法(使用集合List存储链表中的元素,然后双指针,一个从头开始,一个从结尾开始进行比较)class Solution { public boolean isPalindrome(ListNode head) { List<Integer> list=new ArrayList<>(); ListNode cur=head; while(cur!=null){原创 2021-01-21 14:31:23 · 134 阅读 · 1 评论 -
对链表进行插入排序
题目来源对链表进行插入排序题目描述解答class Solution { public ListNode insertionSortList(ListNode head) { if(head==null){ return null; } ListNode newHead=new ListNode(-1); newHead.next=head; ListNode newTail=head,原创 2021-01-21 11:10:23 · 121 阅读 · 0 评论 -
排序链表
题目来源排序链表题目描述给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?思路分析题目解答class Solution { public ListNode sortList(ListNode head) { return sortList(head,null); } public ListNode sortList(ListNode h原创 2021-01-21 10:54:28 · 102 阅读 · 0 评论 -
反转链表II
题目来源反转链表II题目描述解答一(递归)需要两个不同指针,一个指向第 m 个结点,另一个指向第 n 个结点。一旦有了这两个指针,我们就可以不断地交换这两个指针指向结点的数据,并将两个指针相向移动,就像字符串的情况那样。然而,链表中没有向后指针,也没有下标。因此,我们需要使用递归来 模拟 向后指针。递归中的回溯可以帮助我们模拟一个指针从第n个结点向中心移动的移动过程。class Solution { private ListNode left; private boolean s原创 2021-01-20 14:16:51 · 113 阅读 · 0 评论 -
验证二叉搜索树
题目来源验证二叉搜索树题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解答一(递归)class Solution { public boolean isValidBST(TreeNode root) { return helper(root,null,null); } public boo原创 2021-01-20 10:14:45 · 124 阅读 · 0 评论 -
二叉搜索树中的插入操作
题目来源二叉树中的插入操作题目描述给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。思路分析解答class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if(ro原创 2021-01-19 11:30:33 · 260 阅读 · 0 评论 -
二叉树中的最大路径和
题目来源二叉树中的最大路径和题目描述路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。思路分析(递归)这里使用递归方法去解决问题,先创建递归函数maxGain(node),该函数计算二叉树中最大节点的贡献值,就是在以该节点为根节点的子树中寻找以该节点为起点的一条路径,使得该路径上的节点值之和最大。具体而言,该函数的计算如下。原创 2021-01-19 10:17:32 · 399 阅读 · 1 评论 -
组合总和II
题目来源组合总和II题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:1)所有数字(包括目标数)都是正整数。 2)解集不能包含重复的组合。题目解答(递归+回溯+哈希)使用递归函数dfs(pos,res)来进行递归,pos表示在数组的第pos位,res表示剩下的要组合的数之和,由于数组中的数字在组合中只能使用一次,所以使用hashMap原创 2021-01-18 14:08:27 · 130 阅读 · 0 评论 -
反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路:1)先判断是否是空链表2)在判断链表中是否有一个元素3)一般情况下,改变指针的指向,从而达到链表的反转class Solution { public ListNode reverseList(ListNode head) { //如果是空链表 if(head==nul原创 2020-05-20 16:15:39 · 107 阅读 · 0 评论 -
组合总和
题目来源组合总和题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。题目解答用「搜索回溯」的方法来解决,定义递归函数 dfs(target, combine, idx) 表示当前在 candidates 数组的第 idx 位,还剩 target 要组合,已经组合的原创 2021-01-13 16:20:42 · 108 阅读 · 0 评论 -
子集
题目来源子集题目描述给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。解答一递归法实现子集枚举,时间复杂度是 O(2 ^ n)class Solution { List<Integer> t=new ArrayList<>(); List<List<Integer>> ans=new ArrayList<>(); public List<List<Integer原创 2021-01-13 14:36:47 · 155 阅读 · 0 评论 -
实现strStr()
题目描述实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。题目来源实现strStr()解答一直接使用java的String.indexOf()方法,下面我们来看看这个方法的作用所以这里用到的是第三种方法,直接使用就可以解决问题 public int strStr(String haystack,String needle){原创 2021-01-12 11:12:45 · 268 阅读 · 0 评论 -
求两个有序数组的交集—JAVA实现
题目描述有两个有序数组a,b,长度分别为m,n。请找出两个数组中的相同的元素方法一在数组a,b开始设置两个指针,若一个数组中的元素比另一个数组中的数小,则向后移动直到两个数组中元素相等。一直向后遍历直到到达一个数组的末尾。时间复杂度为O(m+n)public static ArrayList get(int[] a, int[] b) { ArrayList<Integer> list = new ArrayList<>(); int i=0;原创 2020-10-13 19:50:33 · 1519 阅读 · 0 评论 -
反转字符串(Java解法)
题目来源反转字符串题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)题目解析解析一:直接使用String类提供的API,非常简单import java.util.*;public class Solution { /** * 反转字符串 * @param str string字符串 * @return string字符串 */ public String solve (String st原创 2020-10-11 21:18:41 · 775 阅读 · 0 评论 -
股票交易的最大收益
题目来源股票交易的最大收益题目描述假定你知道某只股票每一天价格的变动。你最多可以同时持有一只股票。但你可以无限次的交易(买进和卖出均无手续费)。请设计一个函数,计算你所能获得的最大收益。解答import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型一维数组 股票每一天的价格原创 2020-10-11 17:37:39 · 801 阅读 · 2 评论 -
数组中的逆序对-Java做法
题目来源数组中的逆序对题目描述题目解答方法一:利用归并排序的思想,分而治之import java.util.*;public class AntiOrder { public int count(int[] A, int n) { if(A==null||n==0){ return 0; } return mergeSort(A,0,n-1); } public static int mergeS原创 2020-09-16 16:35:11 · 207 阅读 · 0 评论 -
删除公共字符(牛客)
题目来源删除公共字符题目描述输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”题目解答import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in);原创 2020-08-14 22:55:37 · 249 阅读 · 0 评论 -
一年中的第几天(牛客)
题目来源:一年中的第几天题目描述输入一个"YYYY-MM-dd"格式的日期字符串,输出该天是当年的第几天(1 月 1 日是每年的第 1 天)题目解析:import java.time.LocalDate;import java.time.temporal.ChronoUnit;import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc=new Sc原创 2020-08-14 22:29:38 · 535 阅读 · 0 评论 -
跳台阶(剑指offer)
二级台阶跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)public class Solution { public int JumpFloor(int target) { if(target<=0){ return 0; } if(target==1){ return 1; } if(t原创 2020-07-30 13:10:47 · 141 阅读 · 0 评论 -
剑指offer——孩子们的游戏
题目来源孩子们的游戏题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你原创 2020-07-30 12:46:20 · 123 阅读 · 0 评论 -
剑指offer——翻转单词序列
题目来源翻转单词序列题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?题目解答public class Solution { public String ReverseSe原创 2020-07-30 12:14:28 · 125 阅读 · 0 评论 -
2的个数(牛客)
题目来源2的个数题目描述请编写一个方法,输出0到n(包括n)中数字2出现了几次。给定一个正整数n,请返回0到n的数字中2出现了几次。题目解析可以推出规律:为了计算每个位w上出现多少个2,可以将数字分成三段,w位的值,高于w位的hig和低于w位的low。例如计算1231的十位上出现多少个2时,w=3,hig=12,low=1。为什么这样分呢,主要是因为每个位上出现2的次数不仅和当前位的数字有关,也和hig和low有关。理由如下:仍然讨论十位上出现多少个2的情况,如果w<2,那么十位上原创 2020-07-23 11:21:35 · 986 阅读 · 0 评论 -
网络习题
1.网段地址 154.27.0.0 的网络。若不做子网划分,能支持(C)台主机A 254B 1024C 65,534D 16,777,206154.27.0.0是B类地址,B类地址可容纳的主机数量为655342、下列关于 http 状态码描述正确的是(C)A、404读取浏览器缓存,502错误网关B、404找不到资源,403服务器错误C、500服务器错误,304读取浏览器缓存D、304服务器错误,200请求成功E、500找不到资源,200请求成功常见的HTTP状态码:200 - 请原创 2020-07-21 13:35:19 · 570 阅读 · 0 评论 -
奇偶校验(牛客)
题目来源奇偶校验题目描述输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。题目解析本题里面将数字和字母统一看成是char类型的,所以数字3实际存储时为ASCII码中的‘3’,其十进制表示是51,转化为二进制表示就是0110011,取最高位为奇校验位,校验位为1,所以校验后的二进制数为10110011,字母同理。故本题只需将输入的字符减去‘\0’得到字符的十进制表示,再将其转化为七位二进制数加上一位校验位输出即可。题目解答import ja原创 2020-07-21 13:16:44 · 442 阅读 · 0 评论 -
说反话(牛客)
题目来源说反话题目描述给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。解析一将字符串划分开来,逆序放到数组里输出import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); StringBuilder sb=new StringBuilder(); S原创 2020-07-20 23:38:48 · 219 阅读 · 0 评论 -
BigInteger
BigInteger在Java中,由CPU原生提供的整型最大范围是64位long型整数。使用long型整数可以直接通过CPU指令进行计算,速度非常快。如果我们使用的整数范围超过了long型,就只能用软件来模拟一个大整数。java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个int[]数组来模拟一个非常大的整数:对BigInteger做运算的时候,只能使用实例方法,例如,加法运算:BigInteger i1 = new BigInteger("12345678原创 2020-07-19 23:32:29 · 392 阅读 · 0 评论