
练习题
等待的疲倦
本科自动化,硕士双控,研究范围广泛,课题为医疗机器人,学习过C++,目前对Java感兴趣
展开
-
DP:跳跃游戏 + 爬楼梯(一步多阶)+按摩师(数组间隔取值求和)+剪绳子
【题一】判断能否到达最后——贪心算法给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。【法一】//[2,3,1,1,4] [3,2,1,0,4]//贪心算法public boolean canJump(int[] nums){ int len = nums.length; int maxlength = 0;//最远可达位置下标 for(int i=0;i<len;i++){ if(i>原创 2020-06-07 11:55:42 · 493 阅读 · 0 评论 -
滑动窗:最长不重复子串问题+判断重复子串构成
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。//思路:用双指针,滑动窗,遇到重复的,左指针就到重复的下标处,用max保存当前最大长度class Solution { public int lengthOfLongestSubstring(String s) { int left=0; int right=0; int...原创 2020-04-27 18:47:40 · 259 阅读 · 0 评论 -
字符串间的距离比较+查找公共子串长度——通过二维数组比较
**【题目】**对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下:1 修改一个字符,如把“a”替换为“b”。2 增加一个字符,如把“abdd”变为“aebdd”。3 删除一个字符,如把“travelling”变为“traveling”。比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加和...原创 2020-04-15 20:21:38 · 494 阅读 · 0 评论 -
数组查找操作:寻找第二大
一、找出数组中第二大的数字public class Main { public static void main(String[] args) { int max = 0; int smax = 0; int[] arr = {1,2,3,4,6,8,7}; if(arr[0] < arr[1]){ max = arr[1]; smax = arr[0]; }else{ max = arr[0]; smax = arr[1]; } f原创 2020-09-15 13:37:05 · 330 阅读 · 0 评论 -
求平方根(整数和小数)Java
一、平方根结果为整数求平方根,返回类型是整数,结果只保留整数的部分,小数部分将被舍去。class Solution { public int mySqrt(int x) { int l = 0; int r = x; int mid = 0; int res = 0; while(l<=r){ mid = (l+r)/2; if((long)mid*mid<原创 2020-09-12 15:03:30 · 1792 阅读 · 0 评论 -
进制转换Java:静态方法和逻辑方法
一、直接调用Integer类的静态方法(1)十进制转二进制字符串:int n = sc.nextInt();String s = Integer.toBinaryString(n);(2)十进制转十六进制字符串int n = sc.nextInt();String s = Integer.toHexString(n);(3)十进制转八进制字符串int n = sc.nextInt();String s = Integer.toOctalString(int i);(4)十六进制转十原创 2020-09-12 10:24:40 · 203 阅读 · 0 评论 -
超出范围解决方案:最小差
一、最小差给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差。实例:输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出: 3,即数值对(11, 8)提示:1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间[-2147483648, 2147483647]内【注意】正负相减可能原创 2020-09-11 10:04:12 · 315 阅读 · 0 评论 -
使用【快速幂】优化大数幂
【问题】求a^n,其结果可能会很大import java.util.*;public class Solution { public static void main(String[] args){ int a = 40; int n = 4; long res = 0; res = (long)Math.pow(a,n); System.out.println(res); }}要把a乘n次,时间复杂度较高。快速幂——时间复杂度变为O(log n)import原创 2020-07-31 23:00:00 · 188 阅读 · 0 评论 -
子串+序列:无重复最长子串+最长递增子序列+最长连续序列
一、无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。(请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。)//思路:用双指针,遇到重复的,左指针就到重复的下标处class Solution { public int lengthOfLongestSubstring(String s) { int left=0; int right=0; int max=0; cha原创 2020-08-31 19:41:21 · 380 阅读 · 0 评论 -
第n大的2,3,5组合数
只用2,3,5组成数字,可以重复,问第n个数是多少?2,3,5,22,23,25,32,33,35,52,53,55import java.util.Scanner;import java.util.Deque;import java.util.ArrayDeque;public class Main1{ public static void main(String[] args){ Scanner sc = new Scanner(System.in);原创 2020-08-27 22:56:48 · 268 阅读 · 0 评论 -
打印旋转方阵Java
输入一个整数n,从右上角开始打印出旋转方阵:import java.util.Scanner;public class Main1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = create(n); print(arr,n); }原创 2020-08-23 19:41:22 · 374 阅读 · 0 评论 -
Java接口与继承的选择题分析汇总
interface InterfA { String S = "good "; void f(); } abstract class ClassA { abstract void g();} class ClassB extends ClassA implements InterfA { //B是A的子类和接口A的继承 void g() { System.out.print(S); //good } public void f() { System.out.print原创 2020-08-07 16:44:02 · 464 阅读 · 0 评论 -
整型转 Excel 表列序
给定一个正整数,返回它在 Excel 表中相对应的列名称。class Solution { public String convertToTitle(int n) { String s =""; while(n>0){ n--; char c = ((char)(n % 26 + 'A')); n = n / 26; s = String.valueOf(c)+s; } return s; }}...原创 2020-07-19 19:33:43 · 172 阅读 · 0 评论 -
摩尔投票法寻找众数
【题目】:LeetCode169:https://leetcode-cn.com/problems/majority-element/给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。思路:由于众数的个数是 > n/2 的,所以等于某个数就count+1,不等于就-1,减到零后换一个候选人num,最终众数肯定是最终的候选人。/*如果我们把众数记为 +1,把其他数记为 −1,将它们原创 2020-07-19 15:05:36 · 149 阅读 · 0 评论 -
字符串压缩(HashSet+StringBuffer)
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。class Solution { public String compressString(String S) { StringBuffer sb = new StringBuffer(); Set<Character>原创 2020-07-14 17:06:29 · 313 阅读 · 0 评论 -
汉诺塔问题——Java分治递归解决
【题目】:在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。题解:分治思想: 拿只有A只有两个盘子的时候做模拟,发现步骤如下:第一步, 把A上面的盘子放到B第二步, 把A原创 2020-07-14 15:01:50 · 211 阅读 · 0 评论 -
通过二进制逻辑运算解题
一、判断数字是否为2的幂次思路:2的幂次的二进制只含有一个1,n-1则除了该位为0,其余皆为1,故而n & (n-1) = 0import java.util.*;public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ int n = in.nextInt(); System.out.prin原创 2020-06-29 19:36:51 · 1278 阅读 · 0 评论 -
数组中只出现一次的元素(异或 or Hash)+ 消失的数字
【案例一】其余元素出现过两次——使用异或异或:两个相同数的异或结果为0(其二进制会进行异或);异或满足交换律和结合律。eg:[2,3,2]交换律三个数异或:010 ^ 011^010 = 010 ^ 010 ^ 011 = 0 ^ 011 = 011——得出3【面试题】给定一个非空整数数组,其中只有一个元素出现一次,其他元素均出现两次,找出那个只出现一次的元素public class Main{ public static void main(String[] args){原创 2020-06-14 13:04:18 · 281 阅读 · 1 评论 -
回文数和回文串:常见操作汇总
【法一】粗暴反转class Solution { public boolean isPalindrome(int x) { String s1 = Integer.toString(x); StringBuilder sb = new StringBuilder(s1); sb.reverse(); String s2 = sb.toString(); if(s1.equals(s2)){ re原创 2020-06-10 15:02:24 · 537 阅读 · 0 评论 -
种花问题
【题目】:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。假设用数列元素来表示土地种植情况,0表示没有种植,1表示种植了,请你计算可以新种植的最大数量。输入第一行为土地的长度,输入第二行为种植情况例如:第一行:8第二行:0 0 1 0 0 0 1 0输出可以种植的最大数目为:2【分析】:容易出错的是在两头,如果单独判断两头0的个数,会很麻烦。且,如果看作数组来判断的话,索引也会很麻烦,应当先在两头加一个0,再把原创 2020-06-07 22:39:16 · 173 阅读 · 0 评论 -
分配工号
今年7月份vivo迎来了新入职的大学生,现在需要为每个新同事分配一个工号。人力资源部同事小v设计了一个方法为每个人进行排序并分配最终的工号,具体规则是:将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列,报到队尾后则回到队头继续报,直到所有人都出列;最后按照出列顺序为每个人依次分配工号。请你使用自己擅长的编程语言帮助小v实现此方法。private static String solution(int[] input) { // TODO Wri原创 2020-06-07 11:39:24 · 833 阅读 · 0 评论 -
Java数组操作经典例题
【题目】给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数题目来源【法一】:逐个移动法——旋转k次class Solution { public void rotate(int[] nums, int k) { int len = nums.length; /* *旋转k次 *时间复杂度:O(n*k) *空间复杂度:O(1)——没有使用额外的空间 */ for(i原创 2020-06-05 18:50:53 · 411 阅读 · 0 评论 -
每日一题动态规划
//给定一个整数数组 nums ,找到一个具有最大和的连续子数组//(子数组最少包含一个元素),返回其最大和。//时间复杂度:O(n)public class Main{ public static void main(String[] args){ int[] a = {-2,1,-3,4,-1,2,1,-5,-4}; System.out.prin...原创 2020-05-04 14:26:09 · 124 阅读 · 0 评论 -
Java正则表达式小题
/*正则表达式:符合一定规则的表达式*作用:用于专门操作字符串*/import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){...原创 2020-04-29 09:32:28 · 169 阅读 · 0 评论 -
称砝码,求能称出的种数Java
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。注:称重重量包括0//所有的方案全部放入Set中,同时再用一个ArrayList来保存各种可能性,最后输出set的数量import java.util.Scanner;import java.util.Set;i...原创 2020-04-28 15:23:24 · 492 阅读 · 0 评论 -
图的遍历(DFS & BFS)详解与完整代码+走迷宫
一、深度优先遍历(DFS)基本思想:从初始访问结点出发,先访问第一个邻接结点,然后再以该邻接结点作为初始结点,访问它的第一个邻接结点。——优先向纵向挖掘深入,而不是对一个结点的所有邻接结点进行横向访问。——递归过程!(深度优先遍历从某个顶点出发,首先访问这个顶点,然后访问该顶点的第一个未被访问的邻结点,以此邻结点为顶点继续访问,同时记录其余未访问的邻接点,当一个顶点的所有邻接点都被访问时,回...原创 2020-04-23 21:32:09 · 2108 阅读 · 0 评论 -
字符串操作之"左右引号"或(左右括号)问题
【题目】参数解析在命令行输入如下命令:xcopy /s c:\ d:\,各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:参数4: 字符串d:请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格 ;2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program ...原创 2020-04-22 12:04:12 · 1023 阅读 · 0 评论 -
统计各字母/字符的出现次数+大小写字母按序输出——new int[26]/int[128]
【题目描述】:给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。给出多个名字,计算每个名字最大可能的“漂亮度”。import java.util.Scanner;import java.util.Arrays;//思路:public ...原创 2020-04-19 23:47:09 · 1910 阅读 · 0 评论 -
整数与IP地址间的转换
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。举例:一个ip地址为10.0.3.193每段数字 相对应的二进制数10 000010100 000000003 00000011...原创 2020-04-18 22:02:28 · 351 阅读 · 0 评论 -
键值对合并+顺序输出(TreeMap、HashMap、LinkedHashMap的区别)
HashMap:线程不安全,继承AbstractMap类。TreeMap:线程不安全,按key的大小顺序输出,继承SortedMap类。LinkedHashMap:输出数据与输入数据的顺序一致,保持原顺序输出。【例题】数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。import java.util...原创 2020-04-18 12:55:03 · 959 阅读 · 0 评论 -
Java对学生成绩排序——通过list.sort()对list进行排序
**【题目】**输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩。都按先录入排列在前的规则处理。例示:jack 70peter 96Tom 70smith 67从高到低 成绩peter 96jack 70Tom 70smith 67从低到高smith 67Tom...原创 2020-04-16 10:01:03 · 4736 阅读 · 0 评论 -
Java实现大数相加
【题目】请设计一个算法完成两个超长正整数的加法。long的取值范围为:-9223372036854775808 ~ 9223372036854775807——数据类型的取值范围有限解法:通过动态字符串按位相加,进位//大数相加:999999999999999999999999999999999999999999+1import java.util.Scanner;public c...原创 2020-04-15 16:31:58 · 1105 阅读 · 0 评论 -
多种方法求解单链表输出问题(集合、数组、链表)
题目——输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。用集合类解决如果单纯为了解题,可以考虑只用Java集合工具来解决,而不用链表【法一】ArrayList//法一:可以用动态数组ArrayList来处理import java.util.Scanner;import java.util.ArrayList;import java.util.Li...原创 2020-04-13 20:46:16 · 445 阅读 · 0 评论 -
斐波那契数列(迭代/递归/动态规划)——爬楼梯等
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39【斐波那契数列】:1、1、2、3、5、8、13、21、34、55,一个数等于前面两个数相加【递归法】:public class Solution { //1、1、2、3、5、8、13、21、34、55 //F(0)=0,F(1)=1,F(2)=1,...原创 2020-04-08 19:41:50 · 393 阅读 · 0 评论 -
编程小型智力题
一、逻辑题有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?i...原创 2020-04-08 16:25:08 · 1023 阅读 · 0 评论 -
Set集合:去重+排序功能(TreeSet)
【去重+排序】——立马想到Set集合的特点明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成**“去重”与“排序”**的工作(同一个测试用例里可能会有多组数据,希...原创 2020-04-08 16:15:22 · 1236 阅读 · 0 评论 -
字符集合(保持原顺序去重+反转去重+统计字符种数)——Set集合(HashSet)
要点:利用好Set集合自动去除重复元素的功能,但是其输出是按照从小到大输出的,所以若要保持原顺序输出,需要加入到动态字符串中。//输入一个字符串,每组一行,按照原顺序输出字符集合,重复的字母不输出import java.util.Scanner;import java.util.Set;import java.util.HashSet;public class Main{ pu...原创 2020-04-08 10:09:09 · 811 阅读 · 0 评论 -
约瑟夫环问题——递归解决
问题:约瑟夫,是一个古犹太人,曾经在一次罗马叛乱中担任将军,后来战败,他和朋友及另外39个人躲在一口井里,但还是被发现了。罗马人表示只要投降就不死,约瑟夫想投降,可是其他人坚决不同意。怎么办呢,他想到一个主意:让41个人围成一个圆圈,从第一个人开始报数,数到3的那个人被旁边的人杀死。这样就可以避免自杀了,因为犹太人的信仰是禁止自杀的。结果一群人杀来杀去最后只剩下两个了,就是约瑟夫和他朋友,于...原创 2020-04-08 09:20:50 · 3059 阅读 · 0 评论