刷题
刷题及代码
Jin_YD
这个作者很懒,什么都没留下…
展开
-
2021年4月4日20点腾讯笔试,Java版本
说在前面,第一次笔试,一脸懵逼,这个题其实很简单,但是考的时候根本想不起来用栈来做。第二题题目描述:描述:给出一个有0-9的数字组成的字符串,相邻的两个数字和为10时可以被消去。问最后字符的长度时多少?例如 213792,第一步可以消成2192,第二步消解为22.所以长度为2输入:第一行输入一个 n表示长度第二行输入一个字符串输出:输出一个整数用栈解决最简单,先判断栈是否为空,为空则入栈,然后用字符串第二个字符与stack.peek()相加是否等于10,等于则stack.po原创 2021-04-06 10:54:43 · 235 阅读 · 1 评论 -
动态规划相关问题:最长递增子序列、最大子序和、最长公共子序列
以下内容均参考自书籍:《labuladong的算法小抄》以及自己的经验总结,干货满满。动态规划的思想可以简单概括为:第i时刻的结果与第i-1时刻相关。动态规划解法可以简单概况为:1.确定dp[i]或dp[i][j],也就是动态数组的定义。2.确定起始状态。3.进行状态转移。下面将以几个leetcode上的动态规划的几个题目为例子进行讲解动态三步曲。题目描述:最长递增子序列class Solution { public int lengthOfLIS(int[] nums)原创 2021-03-21 16:02:10 · 94 阅读 · 0 评论 -
双指针技巧之快慢指针解决链表的四种基本问题
1.判断链表中是否含有环链表的基础问题,链表的特点是每个节点只知道下一个节点,所以一个指针是无法判断链表中是否含有环。如果链表不含环,那么这个指针最终会遇到空指针null,表示链表到头了,以下代码可以判断链表不含环:boolean hasCycle(ListNode head){ while(head != null){ head = head.next; } return false;}如果链表中含有环,以上代码会进入死循环。判断单链表是否含环,经典解法就是双指针,一个跑得快原创 2021-03-20 15:52:07 · 212 阅读 · 0 评论 -
回溯解决分割回文串问题
题目描述代码class Solution { //存放最终结果 List<List<String>> res = new ArrayList<>(); //存放每次的结果 Deque<String> path = new ArrayDeque<>(); public List<List<String>> partition(String s) { //对空串判原创 2021-03-09 21:36:24 · 121 阅读 · 0 评论 -
回溯之电话号码的字母组合,与上两篇文章一同饮用,效果最佳
题目描述代码class Solution { //存放最终结果 List<String> res = new ArrayList<>(); //存放临时结果 StringBuffer path = new StringBuffer(); //使用HashMap Map<Character,String> phoneMap = new HashMap<>(){{ put('2',原创 2021-03-07 17:34:58 · 77 阅读 · 0 评论 -
回溯问题之组合总和问题
题目描述关键是回溯函数参数的确定。代码/* 首先,写出回溯问题的模板代码 public void backtracking(参数){ if(终止条件){ 保存结果; return; } for(遍历树层数){ 节点操作; backtracking();//递归 回溯,撤销上一次操作; } }*/Class Solution{ //存放最终结果 List<List<Integer>> res = new ArrayLi原创 2021-03-07 16:26:33 · 101 阅读 · 0 评论 -
回溯法解决组合问题。内附回溯法模板,看到就是赚到
题目描述代码class Solution { //存放单个组合 Deque<Integer> path = new ArrayDeque<>(); //List<Integer> path = new ArrayList<>(); //存放最终结果 List<List<Integer>> res = new ArrayList<>(); public List<原创 2021-03-07 15:27:03 · 144 阅读 · 0 评论 -
无重复字符的最长字串
题目描述代码class Solution { public int lengthOfLongestSubstring(String s) { /* 使用滑动窗口法解决:窗口左侧移动一位,窗口右侧持续向右移动, 保证窗口内无重复字符,遇到重复字符,窗口右侧即停止移动,窗口左侧向右移动一位,重复。 判断是否有重复字符:看使用Set集合内元素不允许重复的特性来判断。原创 2021-03-06 11:16:44 · 82 阅读 · 0 评论 -
从上到下打印二叉树
题目描述代码//广度优先搜索BFS,使用队列的先进先出特性/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int[] levelOrder(Tre原创 2021-03-04 10:25:47 · 144 阅读 · 1 评论 -
栈的压入、弹出序列
题目描述代码class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack<Integer> stack = new Stack<>(); int i = 0; for(int num : pushed){ stack.push(num);原创 2021-03-02 14:09:47 · 79 阅读 · 0 评论 -
顺时针打印矩阵
题目描述代码class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix.length == 0){ return new int[0]; } int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1原创 2021-03-02 13:54:50 · 95 阅读 · 0 评论 -
对称的二叉树
题目描述代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSymmetric(TreeNode root) {原创 2021-03-02 13:46:39 · 96 阅读 · 0 评论 -
二叉树的镜像
题目描述代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mirrorTree(TreeNode root) {原创 2021-03-02 11:09:09 · 95 阅读 · 0 评论 -
树的子结构
题目描述代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSubStructure(TreeNode A, TreeNode原创 2021-03-02 11:08:06 · 92 阅读 · 0 评论 -
合并两个排序的链表
题目描述代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) {原创 2021-03-02 10:13:47 · 76 阅读 · 0 评论 -
反转链表
题目描述代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseList(ListNode head) { if(head == null){原创 2021-02-22 09:45:08 · 55 阅读 · 0 评论 -
链表中倒数第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) { if(head ==原创 2021-02-22 09:28:06 · 76 阅读 · 0 评论 -
调整数组顺序,使奇数位于偶数前面
题目描述代码class Solution { /* public int[] exchange(int[] nums) { int length = nums.length; int[] arr = new int[length]; int a = 0; int j = length; for(int i = 0;i<length;i++){ if(nums[i]%2 == 1原创 2021-02-22 09:22:27 · 86 阅读 · 0 评论 -
表示数值的字符串
题目描述代码class Solution { public boolean isNumber(String s) { if (s == null || s.length() == 0) return false; //去掉首位空格 s = s.trim(); boolean numFlag = false; boolean dotFlag = false; boolean eFla原创 2021-02-21 10:41:29 · 76 阅读 · 0 评论 -
删除链表的结点
题目描述代码class Solution { public ListNode deleteNode(ListNode head, int val) { //先判断头结点是否为需删除的点 if(head.val == val){ return head.next; } ListNode pre = head; ListNode cur = head.next; while(原创 2021-02-21 10:32:05 · 62 阅读 · 0 评论 -
打印从1到最大的n位数
题目描述代码class Solution { public int[] printNumbers(int n) { int end = (int)Math.pow(10,n)-1; int[] arr = new int[end]; for(int i = 1; i <= end;i ++){ arr[i-1] = i; } return arr; }}...原创 2021-02-21 10:29:13 · 56 阅读 · 0 评论 -
二进制中1的个数--与运算
题目描述代码public class Solution { // you need to treat n as an unsigned value /* & 与运算:0&0=0 1&0=0 0&1=0 1&1=1 | 或运算:有1则1 ^ 异或: 同则0,不同则1 */ public int hammingWeight(int n) { int res =原创 2021-02-21 10:21:26 · 223 阅读 · 0 评论 -
剪绳子
题目描述代码/* 将绳子 以相等的长度等分为多段 ,得到的乘积最大。 尽可能将绳子以长度 3 等分为多段时,乘积最大。 切分规则: 1.最优:3。把绳子尽可能切为长度为3的片段,留下的最后一段长度可能为0,1,2三种情况。 2.次优:2。若最后一段绳子长度为2;则保留,不在拆分为1+1。 3.最差:1。若最后一段绳子长度为1,则应把一份3+1变为2+2. 算法流程: 1.当 n<=3 时,按照规则应不切分,但由于题目要求必须剪成m>1段,因此原创 2021-02-21 10:19:40 · 97 阅读 · 0 评论 -
机器人的运动范围--深度优先遍历dfs
题目描述代码class Solution { int m, n, k; boolean[][] visited; public int movingCount(int m, int n, int k) { this.m = m; this.n = n; this.k = k; this.visited = new boolean[m][n]; return dfs(0, 0, 0,原创 2021-02-21 10:16:25 · 104 阅读 · 0 评论 -
矩阵中的路径(注释详细,可作为模板)--深度优先遍历dfs
题目描述代码class Solution { public boolean exist(char[][] board, String word) { //将string转换成字符数组 char[] words = word.toCharArray(); //从i,j处开始遍历 for(int i = 0;i < board.length; i++){ for(int原创 2021-02-21 10:11:52 · 116 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序是排序算法中最基本的方法,编程初学者学习的第一个排序算法基本都是冒泡排序,本篇博客对冒泡排序的方法进行简单介绍及代码演示。主要掌握其思想,代码采用java编写。思想:第一个数分别与第二个到最后一个数进行比较,如果第一个数大于另一个数,则交换两数的位置,直到第一个数的右侧数字都比它大,左侧数字都比它小。然后对第二个数重复上述操作,依次类推,直到排好序。直接上代码 int[] arr = new int[]{1,3,9,5,6,7,15,4,8}; //冒泡排序 f原创 2020-09-05 23:32:33 · 171 阅读 · 0 评论 -
贪心算法之简单贪心1月饼问题
题目描述给定所有种类月饼的库存量、总售价以及市场的最大需求量,计算可以获得的最大收益。假如:有三种月饼,库存分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场需求量为20万吨,最大收益应该为卖出全部15万吨第二种月饼以及5万吨第三种月饼,获利72+45/2=94.5亿元。输入样例3 20 //三种月饼,市场最大需求量2018 15 10 //各自库存75 72 45 //各自总售价输出样例94.50思路1.总原创 2020-06-09 23:13:13 · 500 阅读 · 0 评论 -
刷题之说反话
题目描述:给定一句英语,要求编写程序,将居中所有单词按颠倒顺序输出。输入样例:I LOVE YOU输出样例:YOU LOVE I思路:输入字符串,建立一个二维数组,将第一个单词存放于第一行,第二个单词存放在第二行,依次存放,最后从后往前输出即可,如下图#include<cstdio>#include<cstring>int main(){ char str[80]; gets_s(str); int len = strlen(str); int原创 2020-05-28 22:26:30 · 124 阅读 · 0 评论 -
刷题之回文串
读入一段字符,判断是否是回文串输入描述:一个字符串,长度不超过255.输出描述:输出答案(YES\NO).示例1输入12321输出YES#include<cstdio>#include<cstring>const int MAX = 255;bool judge(char str[]){ int len = strlen(str); for(int i = 0;i < len/2;i++){ if(str[i] != str[len - 1原创 2020-05-27 23:05:53 · 88 阅读 · 0 评论 -
刷题之找x
找x这类题可以练练编程,不需要什么算法。输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。输入描述:测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。输出描述:对于每组输入,请输出结果。示例1输入21 30输出-1#inlcude<cstdio>const int MAX = 200;int main(){ int n,x; int arr[MA原创 2020-05-27 21:42:41 · 145 阅读 · 0 评论 -
刷题之剩下的树
有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。 现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。 可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。输入描述:两个整数L(1<=L<=10000)和M(原创 2020-05-26 17:06:29 · 490 阅读 · 0 评论 -
旋转数组中的最小数字
题目描述代码class Solution { public int minArray(int[] numbers) { int length = numbers.length; int left = 0; int right = length - 1; int mid = 0; while(left < right){ mid = left + (right - left)/2;原创 2021-01-23 11:14:02 · 68 阅读 · 0 评论 -
结合斐波那契数列,解决青蛙跳台阶
题目描述代码class Solution { public int numWays(int n) { int a = 1; int b = 1; int sum = 0; for(int i = 0;i < n; i++){ sum = (a + b)%1000000007; a = b; b = sum; } retur原创 2021-01-23 11:01:01 · 105 阅读 · 0 评论 -
Java斐波那契数列
题目描述:代码:class Solution { public int fib(int n) { int a = 0; int b = 1; int sum = 0; for(int i = 0;i < n;i++){ sum = (a + b)%1000000007; a = b; b = sum; } return a原创 2021-01-23 10:56:26 · 90 阅读 · 0 评论 -
剑指offer09--用两个栈实现队列,Java
题目描述:思路:维护两个栈,第一个栈支持插入操作,第二个栈支持删除操作。根据栈先进后出的特性,我们每次往第一个栈里插入元素后,第一个栈的底部元素是最后插入的元素,第一个栈的顶部元素是下一个待删除的元素。为了维护队列先进先出的特性,我们引入第二个栈,用第二个栈维护待删除的元素,在执行删除操作的时候我们首先看下第二个栈是否为空。如果为空,我们将第一个栈里的元素一个个弹出插入到第二个栈里,这样第二个栈里元素的顺序就是待删除的元素的顺序,要执行删除操作的时候我们直接弹出第二个栈的元素返回即可。代码:c原创 2020-10-24 15:51:23 · 282 阅读 · 0 评论 -
剑指offer06--从尾到头打印链表。Java实现,搞定Java。
题目描述:思路:思路相对简单,利用栈先进后出的特性,先将链表值push()入栈,然后建立数组,将栈内值依次pop()存入数组,返回数组即可。代码class Solution { public int[] reversePrint(ListNode head) { //使用栈,先将链表值push()入栈,然后建立数组,将栈内值pop()存入数组 Stack<ListNode> stack = new Stack(); ListNo.原创 2020-10-23 10:57:43 · 71 阅读 · 0 评论 -
剑指offer05--替换空格
剑指offer05–替换空格题目描述:思路解析:两种方法。1)新建一个字符数组,遍历数组进行替换。由题可知,将一个字符替换成三个字符,所以可以新建一个字符数组,长度为原来的3倍,然后遍历数组,进行替换。2)使用StringBuilder的append()方法。代码实现:class Solution { public String replaceSpace(String s) { //此题将一个字符替换成三个字符,新建一个字符数组,长度为原来的3倍原创 2020-10-07 22:53:56 · 58 阅读 · 0 评论 -
剑指offer04--二维数组中的查找
剑指offer04:二维数组中的查找题目描述:思路解析:此题容易想到的有两种思路。1)暴力法。遍历数组,然后进行比较,直到找到目标数。暴力时间复杂度为O(nm),即为二维数组的大小。2)线性查找。由题目可知,数组按照一定的顺序排列,可以联想到,对行和列进行判断,然后排除,直到找到目标数。以题目中的矩阵为例(5行5列),从数组的右上角开始判断,即第0行、第4列。如果matrix[0][4]==target,则返回true;如果matrix[0][4]<target,则说明target一定在原创 2020-10-07 22:45:46 · 129 阅读 · 0 评论 -
剑指offer03--找出数组中重复的数字
剑指offer03:找出数组中重复的数字题目描述:思路解析:题目要求找出重复的数字,可以考虑java中的集合。Set集合内存储的数据不允许重复,考虑使用Set的两个子类,HashSet和TreeSet。HashSet散列存放,无序;TreeSet:有序二叉树。结合题目,使用HashSet即可满足要求。将数组中的值依次通过append()方法存入HashSet中,如果添加成功,则不重复,如果添加失败,则说明HashSet中已存在该数,则该数重复,返回即可。代码实现:class Solution原创 2020-09-27 22:32:57 · 91 阅读 · 0 评论