
实战算法
自己所刷过的算法题
帅哥学Java
乞丐不会羡慕百万富翁,但可能会羡慕比他收入更高的乞丐
展开
-
牛客题霸NC4 判断链表中是否有环
描述判断给定的链表中是否有环。如果有环则返回true,否则返回false。你能给出空间复杂度O(1)的解法么?第一种解法 时间复杂度O(n) 空间复杂度O(n) 思路:遍历整个链表,将每个节点放入set集合中,再放之前判断当前集合是否存在将要放入的节点,如果存在就说明成环,反之,不成环import java.util.Set;import java.util.HashSet;public class Solution { public boolean h...原创 2021-05-27 08:32:46 · 192 阅读 · 0 评论 -
LeetCode20. 有效的括号
给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false示例4:输入:s = "([)]"输出:false示例5:输入:s = "{[]}"输出:true...原创 2021-05-26 16:20:12 · 72 阅读 · 0 评论 -
牛客剑指Offer13 调整数组顺序使奇数位于偶数前面
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M热度指数:871153题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 做题思路:运用队列的先进先出思想来做这道题就很简单了。import java.util.*;public class Solution { public void reOrderArray(...原创 2021-01-26 17:40:13 · 102 阅读 · 0 评论 -
牛客剑指Offer09 变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。示例1输入3返回值4public class Solution { public int JumpFloorII(int target) { if(target == 1){ return 1; } if(target == 2){ return 2;原创 2021-01-25 17:15:48 · 129 阅读 · 0 评论 -
随机打印0-100的全部数字并且不可重复,时间复杂度为O(n)
import java.util.*;public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Random a = new Random(); LinkedHashSet<Integer> b = new LinkedHashSet<>(); int sum = 0; while (b.size() < 100).原创 2020-12-30 20:47:04 · 590 阅读 · 0 评论 -
判断二维空间内,平行于坐标轴的两个矩形是否相交(如果有一个点同时属于这两个矩形就算相交)
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x1 = sc.nextInt();//第一个矩形左边那条边上的横坐标 int y1 = sc.nextInt();//第一个矩形左上角、右上角点的纵坐标 int Wa = sc.nextInt();//第一个矩形的宽 int Ha = sc.nextInt();//第一个矩形的高 int y2 = y1-Ha;/...原创 2020-12-29 19:47:26 · 785 阅读 · 0 评论 -
写一函数打印给定字符串中各字符个数,字符串中只包含大小写字符与数字
写一函数打印给定字符串中各字符个数,字符串中只包含大小写字符与数字例:如参数为 "abcxyzAbc",则输出:a 1b 2c 2x 1y 1z 1A 1方法一(数组形式),不按照题目小写字母在前,大写字母在后的顺序,单单是为了统计各字符出现的次数: public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.nextLine();原创 2020-12-29 10:44:27 · 1128 阅读 · 2 评论 -
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTail"..原创 2020-12-15 13:26:31 · 97 阅读 · 0 评论 -
Java一个字符串中出现次数最多的字符以及次数
import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.nextLine(); Map<Character, Integer> map = new HashMap<>(); int max = -...原创 2020-12-04 16:10:34 · 986 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
难度简单79收藏分享切换为英文接收动态反馈一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 10000class Solution { public int missingNumber(in.原创 2020-11-27 10:42:32 · 98 阅读 · 0 评论 -
LeetCode704. 二分查找
给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设...原创 2020-10-30 21:47:26 · 455 阅读 · 0 评论 -
第十一届蓝桥杯Java省赛第二场B组第一题
public class Main { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 2020; i++) { String ls = i + ""; for (int j = 0; j < ls.length(); j++) { if (ls.charAt(j) == '2') { sum++; } } } Syste...原创 2020-10-24 21:19:48 · 158 阅读 · 0 评论 -
基础练习 特殊回文数
问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式 输入一行,包含一个正整数n。输出格式12321 按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52样例输出899998989989998899数据规模和约定 1<=n<=54。package cn.ls.lanqiao;import java.util.Scanner;原创 2020-10-13 17:38:45 · 136 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为1的第三个节点,那么在调用了...原创 2020-10-04 21:50:37 · 433 阅读 · 4 评论 -
LeetCode21. 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} *...原创 2020-10-04 20:56:38 · 133 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }原创 2020-10-04 09:48:36 · 162 阅读 · 2 评论 -
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode原创 2020-10-03 21:26:45 · 178 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解题思路:首先这道题它的头节点也存放了数据,刚开始我以为没有存放数据,然后先遍历找出链表中有多少个有效节点,也就是节点的个数,通过节点的个数减原创 2020-10-02 22:01:17 · 127 阅读 · 0 评论 -
LeetCode13. 罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。...原创 2020-09-18 16:00:21 · 284 阅读 · 0 评论 -
LCP 06. 拿硬币
桌上有n堆力扣币,每堆的数量保存在数组coins中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例 1:输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。示例 2:输入:[2,3,10]输出:8限制:1 <= n <= 4 1 <= coins[i] <= 10解题思路: 找规律即可,如...原创 2020-09-18 15:49:22 · 180 阅读 · 0 评论 -
LCP 17. 速算机器人
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作x和y),请小扣说出计算指令:"A"运算:使x = 2 * x + y; "B"运算:使y = 2 * y + x。在本次游戏中,店家说出的数字为x = 1和y = 0,小扣说出的计算指令记作仅由大写字母A、B组成的字符串s,字符串中字符的顺序表示计算顺序,请返回最终x与y的和为多少。示例 1:输入:s = "AB"输出:4解释:经过一次 A 运算后,x = 2, y = 0。再...原创 2020-09-17 21:28:09 · 177 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000方法一:利用Arrays.sort先对数组进行排序,把相同的都弄到一块儿,因为题目的要求是任意一个,所以一旦有重复的直接返回这个数字,retur..原创 2020-09-17 20:48:11 · 117 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a g...原创 2020-08-16 16:42:34 · 121 阅读 · 0 评论 -
LeetCode面试题 08.01. 三步问题
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1:输入:n = 3输出:4说明: 有四种走法示例2:输入:n = 5输出:13提示:n范围在[1, 1000000]之间方法一:class Solution { public int waysToStep(int n) { if(n<=2){ ...原创 2020-08-16 15:10:46 · 244 阅读 · 0 评论 -
LeetCode53. 最大子序和
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。class Solution { public int maxSubArray(int[] nums) { int maxResult=nums[0];...原创 2020-08-15 18:24:17 · 132 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。提示:1 <=arr.length <= 10^5-100 <= arr[i] <= 100解题思路:设动态规划表dp,dp[i]代表以元素nums[i]为结尾的连续子数组最大和。刚开始d...原创 2020-08-15 17:51:51 · 168 阅读 · 0 评论 -
LeetCode509. 斐波那契数
斐波那契数,通常用F(n) 表示,形成的序列称为斐波那契数列。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定N,计算F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2.示例 3...原创 2020-08-15 13:59:16 · 152 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5提示:0...原创 2020-08-15 13:55:30 · 127 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000方法一:效率比较低class Solution { public String replaceSpace(String s) { String string = s.replaceAll(" ", "%20"); ret...原创 2020-08-15 13:37:13 · 264 阅读 · 0 评论 -
LeetCode70. 爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶class Solution { public int c...原创 2020-08-15 11:35:08 · 116 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 1001.首先我用递归直接做的,但是超时了。。。,因为可能有很多重复计算class Solution { publi.原创 2020-08-15 11:27:05 · 152 阅读 · 0 评论 -
LeetCode54. 螺旋矩阵
给定一个包含m x n个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]详细思路可以看我的上一篇博客(两道题其实一样,Arr...原创 2020-08-14 23:18:07 · 183 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix =[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length<= ..原创 2020-08-14 23:08:10 · 143 阅读 · 0 评论 -
编写函数maxsame(char1,char2) 返回字符串char1和char2的最大相同子串,比如maxsame("abcdefghijklmn","mndefghlm") 返回 "defgh"
这道题只需判断长串是否包含短串即可,让短串长度逐渐减小,把短串的所有可能都遍历一遍,如果有满足的就返回(有满足的肯定是最长的那个,因为是长度逐渐减小的)。 以下是本人纯手写,大家可以瞅瞅哈import java.util.*;public class Test { public static void main(String[] args) { Sc...原创 2020-04-07 21:19:58 · 413 阅读 · 0 评论 -
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。 给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。输入格式 输入一行,包含一个单词...原创 2020-03-17 11:01:27 · 2927 阅读 · 11 评论 -
简单算法练习(一)
【1】两点距离描述输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算并输出两点间的距离。输入第一行输入一个整数n(0<n<=1000),表示有n组测试数据;随后每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。输出对于每组输入数据,输出一行,结果保留两位小数。样例输入2...原创 2020-02-23 10:24:31 · 561 阅读 · 0 评论 -
使用Set集合,生成1-100之内不重复的5个随机整数
package cn.ls.lanqiao;import java.util.HashSet;import java.util.Random;import java.util.Set;public class Test { public static void main(String[] args) { Random r = new Random(); Set<I...原创 2020-02-07 21:36:05 · 1152 阅读 · 0 评论 -
1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等.要求:"4"不能在第三位,"3"与"5"不能相连.
package cn.ls.lanqiao;public class Test { private static String[] ls = { "1", "2", "2", "3", "4", "5" }; public static void main(String[] args) { int sum = 0; for (int i = 122345; i < 543...原创 2020-01-29 14:50:49 · 611 阅读 · 0 评论 -
不重复的字符
不重复的字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。s = "leetcode"返回0.s = "loveleetcode",返回2.注意事项:您可以假定该字符串只包含小写字母。这道题用到了HashMap的一个方法叫getOrDefault()方法default V getOrDefault(Object key, ...原创 2019-12-03 14:21:46 · 833 阅读 · 0 评论 -
奖券数目
1.问题描述:奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。请提交该数字(一个整数),不要写任何多余的内容或说明性文字。思路:5重循环,第一...原创 2019-11-27 21:12:08 · 509 阅读 · 0 评论