
练习
文章平均质量分 61
猫不爱学习
励志成为一个优秀的coder的小白,
展开
-
奇偶链表
目录题目解析源码:题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3-&原创 2020-11-13 23:29:24 · 265 阅读 · 0 评论 -
不同字符的最小子序列
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入:s = "bcabc"输出:"abc"示例 2:输入:s = "cbacdcbc"输出:"acdb"题解:public static String removeDuplicateLetters2(String s) { int[] count=new int[256];//记录每个元素出现的次数 //记录原创 2020-10-31 15:56:54 · 363 阅读 · 0 评论 -
最大数
最大数力扣链接思路:我们拿示例二来说:public static class Comp implements Comparator<String> { @Override public int compare(String o1, String o2) { String a=o1+o2; String b=o2+o1; return b.compareTo(a);//按字典顺序比较两个字符串。 }} Arr原创 2020-10-27 21:34:39 · 190 阅读 · 0 评论 -
下一个更大元素
题解://单调栈解法:每次新元素入栈时,栈内的元素都保持单调递增或递减public static int[] nextGreaterEle(int[] nums) { int[] res=new int[nums.length];//存放结果的数组 Stack<Integer> s=new Stack<>(); for (int i = nums.length-1; i >=0 ; i--) { while (!s.empty()&.原创 2020-10-19 21:39:31 · 221 阅读 · 3 评论 -
一个小练习
输入123 456 789输出147258369输入:123 456 789 111输出:147125813691public class Jianxin { //[123,456,789] //147258369 public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s=sc.nextLine(); String.原创 2020-09-20 11:44:02 · 215 阅读 · 0 评论 -
不同路径/最小路径和
一、不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?输入: m = 3, n = 2输出: 3解释: 从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -> 向右分析:动态规划:定义dp[i][j]表原创 2020-08-17 16:35:29 · 295 阅读 · 0 评论 -
合并区间
力扣56题分析:首先我们需要清楚什么时候需要合并区间?我们举一个例子比如区间[1,3]、[15,18]、[2,6],首先我们对其排序后为[1,3]、[2,6],[15,18]、然后取第一二区间[1,3],[2,6],比较3>2说明可以合并。使用双指针,左边指针指向当前区间的开始使用一个变量来记录连续的范围 t右指针开始往后寻找,如果后续的区间的开始值比 t还小,说明重复了,可以归并到一起此时更新更大的结束值到 t 直到区间断开,将 t 作为区间结束,存储到结果里然后移动左指针原创 2020-08-08 12:46:55 · 204 阅读 · 0 评论 -
两个数组的交集
问题: 给你两个数组,求两个数组的交集。比如: A = [1, 4, 7, 3, 5] , B = [2, 9, 3, 8, 5], 那么交集就是 [3, 5].解法一:每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存。该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度。 List<Integer> list=new ArrayList<>(); for (int i = 0; i < a.lengt原创 2020-08-02 23:30:03 · 420 阅读 · 0 评论 -
整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。public class 整数拆分 { public int integerBreak(int n) { int[] dp=new int[n+1]; dp[1]=原创 2020-08-01 19:27:04 · 147 阅读 · 0 评论 -
最长公共子串
给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。输入 1AB2345CD 12345EF输出 2345分析:class Demo{ /** * 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 * @param s1 * @param s2 * @return */ private static int sameLongStrLen(原创 2020-07-31 23:19:00 · 393 阅读 · 0 评论 -
字节测开实习一二面凉经
今儿参加了字节的测试开发实习面试,一面大概持续了50分钟,问了一些基础知识,然后面试官让等了4分钟就进入了2面,二面大概持续了40分钟就结束了,问了一点项目,然后就是java基础知识和测试相关基础知识及写测试用例,最后手撕代码,就结束了,也就凉了。目录一面浏览器输入网址会发生什么黑盒测试和白盒测试常用方法TCP三次握手进程和线程的区别进程有几种状态了解多线程吗,说一下什么是多线程,多线程一般会引发什么问题及解决方法?死锁乐观锁和悲观锁多线程实现方式ArrayList和LinkedList区别了解AOP嘛?原创 2020-07-10 11:16:00 · 1860 阅读 · 2 评论 -
和为target的两个数
1.暴力暴力算法时间复杂度O(n²),空间复杂度O(1)public static int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i; j < nums.length; j++) { if(nums[i]+nums[j]==target) { r原创 2020-06-25 00:53:24 · 265 阅读 · 0 评论 -
剑指offer刷题笔记
一、数组中重复的数字在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2分析:解法一:时间复杂度O(n),空间复杂度O(n)由于所有元素值是有范围的,因此可以用一个长度为l...原创 2020-04-23 00:44:51 · 200 阅读 · 0 评论 -
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组public class Main { public static void merge(int[] nums1, int m, int[] nums2, int n) { while (m != 0 && n != 0) { ...原创 2019-11-19 22:55:16 · 109 阅读 · 0 评论 -
数组中出现次数超过数组长度一半的数(4种解法)
题目:数组的长度为n,找出数组中出现次数大于长度一半的数,如果存在返回这个数,不存在返回0。解法一:先对数组进行排序,然后找到arr[n/2]的数(如果存在数组中长度超过一半的数,最中间的数就是这个数),遍历数组如果arr[n/2]相等的数超过n/2;就是这个数,没有就返回零。(时间复杂度O(nlogn)) public static int getValue(int[] gift...原创 2020-04-22 00:37:30 · 3294 阅读 · 0 评论 -
全排列问题
1、题目:给定一个(不重复)数组,输出他的全排列public class Permucation { private static void swap(int arr[],int p,int q) { int temp=arr[p]; arr[p]=arr[q]; arr[q]=temp; } private sta...原创 2020-02-17 15:18:02 · 199 阅读 · 0 评论 -
括号匹配
一、 题目: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串二、分析①我们可以使用栈用一个栈来保存(,[,{当遍历到这三个字符的时候,就将其保存到栈中。如果遍历到的是)就从栈中弹出一个元素,检查是否能跟)配对如果遍历到的...原创 2019-12-20 21:32:58 · 202 阅读 · 0 评论 -
java数组总结
数组相同数据类型的集合并且内存是连续的、1、定义一个一维数组:int []arr={1,2,3,4,5}; int []arr2=new int[]{1,3,4,5,6}; int []arr3=new int[5] //new 产生一个对象 ”引用“用来存放对象的地址; 2、数组长度:数组名.length(是数组的属性...原创 2019-10-19 17:41:41 · 290 阅读 · 0 评论 -
二叉树的镜像
二叉树的镜像我们先来观察下面的图:我们可以发现这两颗互为镜像的二叉树根节点相同,但它们左右两个子节点交换了位置。然后以这两个子节点为根节点再交换它们的子节点。(a)交换根节点的左右子树(b)交换以10为根节点的左右子节点(c) 交换以6为根节点的左右子节点也就是说二叉树的镜像就是在遍历树的同时交换非叶子节点的子节点。总结上面的过程,我们得出求一棵树的镜像的过程:我们先前序...原创 2020-04-17 00:14:08 · 493 阅读 · 0 评论 -
复制带有随机指针的链表(深拷贝)
>深拷贝:深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响对于这个问题,我们可以分三部解决,1、new出新节点,让新节点的next、data域等于老节点,然后将新节点老节点拼起来ListNode cur=head;//依次遍历链表实现连接while(cur!=null) { ListNode node=new ListNode(cur.da...原创 2019-11-09 21:24:08 · 474 阅读 · 0 评论 -
求数组两个位置之间的数和最大
题目描述:一个非空整数数组,选择其中的两个位置,使得两个位置之间的数和最大。如果最大的和为正数,则输出这个数;如果最大的和为负数或0,则输出0 。输入描述:3,-5,7,-2,8输出描述:13输入-6,-9,-10输出0源码:public class Main { public static void main(String args[]){ S...原创 2020-02-25 11:48:51 · 634 阅读 · 0 评论 -
给定一个数组,从中取出下标不连续的任意个数求可以取出的数的和的最大值//给定一个正整数s, 判断一个数组arr中,是否有一组数字加起来等于s/神奇的口袋
1、 给定一个数组,可以从数组中取出下标不连续的任意个数,求可以取出的数的和的最大值,例如:给出数组A[]={1,2,2,5,3,4,3}可以取出的最大和为2+5+4=11。现再给定数组{3,9,7,5,1,3,1,2,7},能取出的数的和的最大值是24。2、分析3、代码 private static int dp1(int arr[],int len) { ...原创 2020-02-17 15:03:22 · 1273 阅读 · 0 评论 -
输入n个数,围成一圈,求连续m(m小于n)个数的和最大为多少?以及环形数组的最大和,乘积最大子序列
题目:输入n个数,围成一圈,求连续m(m<n)个数的和最大为多少?输入输出描述:样例输入 10 39 10 1 5 9 3 2 6 7 4样例输出 23分析:可以通过扩充数组的方式模拟数组成环代码:public class Main1 { private static int sum(int[] arr,int start,int n) { i...原创 2020-03-25 14:56:31 · 2021 阅读 · 0 评论