
算法
mameng1998
学习是前进的唯一动力
展开
-
Java 找到字符串中第一个出现一次的字符
【代码】Java 找到字符串中第一个出现一次的字符。原创 2023-04-22 12:12:11 · 263 阅读 · 0 评论 -
最长公共前缀 java
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。数据范围: 0≤n≤5000, 0≤len(strsi)≤5000。进阶:空间复杂度 O(1),时间复杂度O(n∗len)原创 2022-11-14 12:11:03 · 301 阅读 · 0 评论 -
BM2 链表内指定区间反转
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。给出的链表为 1→ 2 → 3 → 4 → 5 → NULL 1→2→3→4→5→NULL, m=2,n=4。返回 1→ 4→ 3→ 2→ 5→ NULL 1→4→3→2→5→NULL.要求:时间复杂度 O(n) ,空间复杂度 O(n)进阶:时间复杂度 O(n),空间复杂度 O(1)原创 2022-11-09 23:02:09 · 113 阅读 · 0 评论 -
NC7 买卖股票的最好时机(一)
在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天。数据范围: 0 \le n \le 10^5 , 0 \le val \le 10^40≤n≤105,0≤val≤104。要求:空间复杂度 O(1),时间复杂度 O(n)原创 2022-11-06 16:19:10 · 103 阅读 · 0 评论 -
NC48 在旋转过的有序数组中寻找目标值
有一个长度为 n 的按严格升序排列的整数数组 nums ,在实行 search 函数之前,在某个下标 k 上进行旋转,使数组变为[nums[k],nums[k+1],.....,nums[nums.length-1],nums[0],nums[1],.......,nums[k-1]]。比如,数组[0,2,4,6,8,10]在下标3处旋转之后变为[6,8,10,0,2,4], 当给定target为10时,10的下标是2,target为3时,nums数组中不存在3,所以返回-1。原创 2022-11-06 15:48:23 · 110 阅读 · 0 评论 -
NC41 最长无重复子数组
数据范围:0\le arr.length \le 10^50≤arr.length≤105,0 < arr[i] \le 10^50原创 2022-11-05 22:57:33 · 89 阅读 · 0 评论 -
NC45 实现二叉树先序,中序和后序遍历
数据范围:0 \le n \le 10000≤n≤1000,树上每个节点的val值满足 0 \le val \le 1000≤val≤100。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。原创 2022-11-05 16:48:54 · 111 阅读 · 0 评论 -
NC12 重建二叉树
数据范围:n \le 2000n≤2000,节点的值 -10000 \le val \le 10000−10000≤val≤10000。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。返回根节点,系统会输出整颗二叉树对比结果,重建结果如题面图示。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)2.pre 和 vin 均无重复元素。原创 2022-11-04 15:04:20 · 217 阅读 · 0 评论 -
NC17 最长回文子串
对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。要求:空间复杂度 O(1)O(1),时间复杂度 O(n^2)O(n2)进阶: 空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)数据范围: 1 \le n \le 10001≤n≤1000。最长的回文子串为"aba"与"bab",长度都为3。原创 2022-11-03 23:23:52 · 199 阅读 · 0 评论 -
NC14 按之字形顺序打印二叉树
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val|原创 2022-11-03 22:26:50 · 92 阅读 · 0 评论 -
NC3 链表中环的入口结点
3.有环:当fast与slow第一次相遇时,fast指向头结点,然后slow慢指针走一步,fast走一步,再次相遇时就可返回环节点。返回链表的环的入口结点即可,我们后台程序会打印这个结点对应的结点值;环的部分只有一个结点,所以返回该环形链表入口结点,后台程序打印该结点对应的结点值,即2。给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。返回环形链表入口结点,我们后台程序会打印该环形链表入口结点对应的结点值,即3。可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。原创 2022-11-02 23:08:01 · 197 阅读 · 0 评论 -
NC15 求二叉树的层序遍历
NC15 求二叉树的层序遍历_圆滚滚的柴柴的博客-优快云博客原创 2022-11-02 18:51:03 · 80 阅读 · 0 评论 -
java合并区间
数组 arrs 表示若干个区间的集合。合并所有重叠的区间,并返回 一个不重叠的区间数组。输入:arrs = [[1,3],[2,6],[8,10], [15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。输出:[[1,6],[8,10],[15,18]]输入:arrs = [[1,4],[4,5]]输出:[[1,5]]原创 2022-11-02 18:48:35 · 1283 阅读 · 0 评论 -
java实现一个数组中奇数在左,偶数在右,且元素的相对位置不变
java实现一个数组中奇数在左,偶数在右,且元素的相对位置不变。原创 2022-10-13 16:51:16 · 495 阅读 · 0 评论 -
java 有/无重复字符串的排列组合
输出:abc acb bac bca cab cba。原创 2022-09-02 16:24:21 · 425 阅读 · 0 评论 -
Java 统计字符串中数字出现的次数,然后按照降序排列,出现次数相同按照键的大小降序排列
【代码】Java 统计字符串中数字出现的次数,然后按照降序排列,出现次数相同按照键的大小降序排列。原创 2022-09-01 20:53:25 · 660 阅读 · 0 评论 -
Java 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。
【代码】Java 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。原创 2022-09-01 20:36:29 · 1090 阅读 · 0 评论 -
二叉树的层序遍历--Java实现
package org.simpleframework.leetcode;import java.util.*;/** * @author mazhen * @className LevelTraversal * @Description 层序遍历: https://blog.youkuaiyun.com/weixin_43548025/article/details/106460961 * @date 2021/5/13 11:13 */public class LevelTraversal {原创 2021-05-14 16:41:43 · 393 阅读 · 0 评论 -
数组的排列组合-java实现
数组的排列组合,通过递归实现package org.simpleframework.leetcode;import java.util.Stack;/** * @author mazhen * @className ArrayCombination * @Description 数组的排列组合 * @date 2021/4/23 11:02 */public class ArrayCombination { static Stack<Integer> stack =原创 2021-04-23 11:33:56 · 1619 阅读 · 1 评论 -
两个队列实现栈--Java实现
import java.util.LinkedList;import java.util.Queue;/** * @author mazhen * @className QueueToStack * @Description 两个队列实现栈 * @date 2021/3/29 10:26 */public class QueueToStack { Queue<Integer> queue1 = new LinkedList<>(); Queue&l原创 2021-04-16 16:40:20 · 344 阅读 · 0 评论 -
找出字符串中无重复最长子串-java实现
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解题思路:滑动窗口算法class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int k = 0, max = 0; Set<原创 2021-04-13 19:20:21 · 2671 阅读 · 0 评论 -
java 将两个字符串做数字相加,并返回字符串
题目描述:传入的两个字符串都不能转为整型或长整型直接相加。import java.util.LinkedList;/** * @author mazhen * @className Test * @Description 将两个字符串做数字相加,并返回字符串 * @date 2021/4/9 19:38 */public class Test { public static String strSum (String str1,String str2) { if原创 2021-04-13 15:03:50 · 2513 阅读 · 4 评论 -
java实现单链表反转
public class SingleNodeTest { static class ListNode { int value; ListNode next; ListNode(int val) { value = val; next = null; } } public static ListNode reverseListNode (ListNode root) {原创 2021-04-12 17:30:25 · 88 阅读 · 0 评论 -
动态规划之Triangle(三角形) Java实现
问题给定一个三角形的数字阵列,选择一条自顶向下的路径,使得沿途的所有数字之和最小。(每一步只能移动到相邻的格子中)如上图所示的三角形阵列,其最小路径之和为11(2+3+5+1)。原创 2020-12-30 19:43:32 · 603 阅读 · 2 评论 -
动态规划之Climbing Stairs(爬楼梯) java实现
问题有一个楼梯,总共有n阶台阶。每一次,可以上一个台阶,也可以上两个台阶。问,爬这样的一个楼梯,一共有多少不同的方法?如n=3,可以爬上这个梯子的方法有:[1,1,1],[1,2],[2,1],所以答案为3。问题分析动态规划的问题,我们先把问题转化为递归问题进行分析:看到上面的图,大家是不是有一种熟悉的感觉,没错,这就是斐波那契数列的递归图。先通过递归方式解决问题,然后以动态规划方式解决问题。问题解决递归方式public static int computeWay(int n) {原创 2020-12-24 17:50:34 · 361 阅读 · 1 评论 -
什么是动态归划
动态规划的定义将原问题拆解成若干子问题 ,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案。动态规划的解析动态规划的问题是由递归问题演变而来,如下图所示:例子通过斐波那契数列引出动态规划:自顶向下的解决斐波那契数列问题public class Solution { public int Fibonacci(int n) { if(n == 0) { return 0; } if(n ==原创 2020-12-23 20:05:14 · 469 阅读 · 0 评论 -
最大公因数、幂运算算法--Java
最大公因数:public static int gcd(int m,int n){ while(n != 0){ int rem = m%n; m = n; n = rem; } return m;}算法连续计算余数直到余数是0为止,最后的非0余数就是最大公因数。幂运算:public static ...原创 2017-12-24 23:25:39 · 456 阅读 · 0 评论 -
二分(折半)法查找--Java--防溢出
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以...原创 2017-12-24 17:04:21 · 995 阅读 · 0 评论 -
最大子序列和算法最优解--Java
public class MaxSubSumClass { public static void main(String[] args) { int[] array = {2,6,9,-10,-30,90}; System.out.println(maxSubMax(array)); } public static int maxSubMax(int[] array)...原创 2017-12-24 16:38:47 · 667 阅读 · 0 评论 -
大数组查找排序总结
问题:假设一个文件中有9亿条不重复的9位整数,现在要求对这个文件进行排序。 一般解题思路: 1、将数据导入到内存中 2、将数据进行排序 (比如插入排序、快速排序) 3、将排序好的数据存入文件 难题: 一个整数为4个字节 即使使用数组也需要900,000,000 * 4byte = 3.4G内存 对于32位系统,访问2G转载 2017-10-18 22:31:09 · 1252 阅读 · 0 评论