算法
常见算法
count的专栏
这个作者很懒,什么都没留下…
展开
-
排序算法java
归并/** * 归并排序 * * @param array * @return */ public static int[] MergeSort(int[] array) { if (array.length < 2) return array; int mid = array.length / 2; int[] left = Arrays.copyOfRange(array, 0, mid);原创 2021-07-08 18:31:50 · 122 阅读 · 0 评论 -
LeetCode──排序链表(148)
排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序思路:(1) 寻找中间节点,分成两个子链表(2) 对两个子链表进行归并排序(3) 合并有序链表代码:class Solution { public ListNode sortList(ListNode head) { if(head == null || head.next == null) return head; ListNode middle = middleNode原创 2020-07-20 22:41:28 · 162 阅读 · 0 评论 -
反转链表
1. 反转链表(LeetCode206)反转一个单链表public ListNode reverseList(ListNode head) { if(head == null) return null; ListNode pre = null; ListNode cur = head; //指针反转 while(cur != null){ ListNode tmp = cur.next;原创 2020-07-20 22:10:42 · 172 阅读 · 0 评论 -
LeetCode──基本计算器(224)
题目:实现一个基本的计算器来计算一个简单的字符串表达式的值字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格示例 1:输入: "1 + 1"输出: 2示例 2:输入: " 2-1 + 2 "输出: 3示例 3:输入: "(1+(4+5+2)-3)+(6+8)"输出: 23思路:一个栈用来存数字,一个栈用来存符号如果是数字,并且数字栈为空或者符号栈栈顶为(,把数字压入数字栈;否则对该数字与数字栈顶的数与符号栈顶的符号进行计算,并且把新值压入数字栈原创 2020-07-11 18:17:32 · 300 阅读 · 0 评论 -
LeetCode──最长公共前缀(14)
题目:编写一个函数来查找字符串数组中的最长公共前缀如果不存在公共前缀,返回空字符串 “”示例 1:输入:["flower","flow","flight"]输出: "fl"示例 2:输入:["dog","racecar","car"]输出:""解释: 输入不存在公共前缀。思路:1. 当数组长度为0,返回空字符串2. 初始化第一个元素为结果3. 从第二个元素开始比较,假设结果与该元素得到最长公共前缀4 当前最长公共前缀为空,返回空字符串5 比较完所有元素后,得到最终结果示例 1原创 2020-06-15 13:48:49 · 121 阅读 · 0 评论 -
剑指offer──1~n整数中1出现的次数
1~n整数中1出现的次数题目:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次思路:1. 当cur = 02304low = 4, high = 23,此时digit为10,即十位的 1 出现次数范围为:0010~2219只看高低位,229 - 0 + 1 = 230 ---------> 23 * 10high * digit2. 当cur = 12314lo原创 2020-06-14 13:24:47 · 166 阅读 · 0 评论 -
剑指offer──数值的整数次方
数值的整数次方题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题思路:快次幂3的5次方base = 11(3的二进制)exponent = 101(5的二进制)res = 1n = 101快次幂n(二进制)res(十进制)下一个base(十进制)下一次n(二进制)(101 & 1) != 0res *= base, res = 3bas原创 2020-06-14 09:04:42 · 108 阅读 · 0 评论 -
LeetCode──完全平方数(279)
题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.思路1.用一个数组dp[]来记录组成和的完全平方数的最少个数,int[] dp = ne...原创 2020-01-27 11:43:06 · 151 阅读 · 0 评论 -
LeetCode──不同路径(62)
题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上...原创 2020-01-26 22:51:53 · 72 阅读 · 1 评论 -
LeetCode──打家劫舍(198)
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷...原创 2020-01-26 17:26:01 · 110 阅读 · 0 评论 -
LeetCode──买股票的最佳时机(121)
题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意...原创 2020-01-22 19:44:02 · 178 阅读 · 0 评论 -
LeetCode──下一个排列(31)
题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,18,4,7,6,5,3,1 → 8,5,1,3,4...原创 2020-01-22 14:10:12 · 124 阅读 · 0 评论 -
LeetCode──爬楼梯(70)
题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。思路1. 当只有一层楼梯,只有一种选择,即f(1) = 12. 当有2层楼梯,可以一次爬一个台阶或者一次爬两个台阶,两种选择,即f(2) = 23. 有n(n >= 3)层楼梯时, 可以爬一层到达第n层,即f(n - 1),...原创 2020-01-20 10:43:09 · 100 阅读 · 0 评论 -
剑指offer──不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:位运算1.两个数异或:相当于每一位相加,而不考虑进位2.两个数相与,并左移一位:相当于求得进位3.将上述两步的结果相加比如num1=6,num2 = 5令num1 = num1 ^ num2,num2 = (num1 & num2) << 1当num2为0时,结果就是num...原创 2020-01-02 13:32:43 · 140 阅读 · 0 评论 -
剑指offer──二叉树中和为某一值的路径
问题:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:深度优先搜索代码:ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList&...原创 2020-01-02 12:35:54 · 129 阅读 · 0 评论 -
二叉树的深度
1.二叉树节点的结构public class TreeNode { int val; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}2.二叉树的深度2.1递归public int TreeDepth...原创 2019-12-30 17:12:52 · 101 阅读 · 0 评论 -
二叉树的遍历
1.二叉树节点的结构public class TreeNode { int val; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}先序遍历结果(中-左-右):1245367中序遍历结果(左-中-右...原创 2019-12-30 16:21:57 · 226 阅读 · 0 评论 -
剑指offer──变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:f(n)表示:n个台阶第一次1,2,…n阶的跳法数f(n-i)表示:n个台阶第一次跳i个台阶的跳法数nf(n)1f(1)2f(2-1) + f(2-2)3f(3-1) + f(3-2) + f(3-3)4f(3) +...原创 2019-11-16 20:40:38 · 109 阅读 · 0 评论 -
剑指offer──跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:一次只能跳一阶或两阶1.如果第一次跳了一阶,那么还剩下n-1个台阶,跳法为JumpFloor(n-1)2.如果第一次跳了两阶,那么还剩下n-2个台阶,跳法为JumpFloor(n-2)3.由1和2可以得出总跳法JumpFloor(n) = JumpFlo...原创 2019-11-02 15:50:17 · 106 阅读 · 0 评论 -
剑指offer──从尾到头打印链表
题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。原创 2019-10-29 21:00:20 · 61 阅读 · 0 评论 -
剑指offer──用两个栈实现队列
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。队列:先进先出栈:先进后出思路:1.stack1负责入队,stack2负责出队2.如果stack1和stack2都为空,则抛出异常3.如果stack2为空,则把satck1的元素都pop掉,并且push到stack24.此时stack2不为空,直接出队,返回pop值代码:public...原创 2019-10-29 10:29:38 · 91 阅读 · 0 评论 -
剑指offer──替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:1.先将其转换为String2.使用String的replaceAll方法String replaceAll(String regex, String replacement);代码public class So...原创 2019-08-23 09:31:23 · 52 阅读 · 0 评论 -
剑指offer──斐波那契数列
问题:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39思路:n > 2, F(n) = F(n - 1) + F(n - 2)public class Solution { public int Fibonacci(int n) { if(n == 1) return 1; el...原创 2019-09-23 15:23:45 · 71 阅读 · 0 评论 -
剑指offer──二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一思路:1.判断数组是否为空2.对每一行数据进行二分查找public class Solution { public boolean Find(int target, int ...原创 2019-08-22 20:36:27 · 93 阅读 · 0 评论