算法练习
_hello world
这个作者很懒,什么都没留下…
展开
-
LeetCode 7.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21两个思路,第一个使用余数,第二个使用字符串:方法一:public int reverse(int x) { int result = 0; while(x!=0){ int tmp = x%10; x/=10原创 2020-09-05 10:17:18 · 215 阅读 · 0 评论 -
Leetcode 5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”方法一:时间超限,自己思路:将字符串赋给map集合,字符为键,下标为值,值为集合,集合中存储的都是每个字符重复的下标根据每个entry的值,获取每个字符对应的集合。遍历集合,每次从集合中拿出两个值,一个作为起始 一个作为终点,两个值截取的字符串判断是否为回文原创 2020-08-09 09:48:16 · 164 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。原创 2020-08-08 09:49:17 · 133 阅读 · 0 评论 -
Leetcode 2.两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解答方法一:自己拼凑的写法:自己总结需要解决三个问题:原创 2020-08-06 20:26:45 · 111 阅读 · 0 评论 -
算法12(旋转数组的最小数字)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0方法一:循环遍历法(暴力求解)根据旋转数组的特性,数组中突然变小的数字必为最小。若无则返回第一个数字class Solution { public int minAr原创 2020-07-26 11:22:49 · 142 阅读 · 0 评论 -
算法10(斐波那契数列)
写一个函数,输入 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方法一(不可行原创 2020-07-18 11:39:51 · 456 阅读 · 0 评论 -
算法09(用两个栈实现队列)
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:方法调用次序: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:方法调用次序: [“CQueue”,“deleteHea原创 2020-07-17 13:11:31 · 98 阅读 · 0 评论 -
算法07(重建二叉树)
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7以下是用递归写出的方法,使用了时间换空间的做法,因为无法动态加载数组。package Mypage;public class Solution {原创 2020-07-16 15:48:22 · 101 阅读 · 0 评论 -
算法06(从头到尾打印链表)
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:head = [1,3,2]输出:[2,3,1]方法一:使用栈,因为栈的特点是先进后出,可以直接反向输出。package MyTest;import java.util.Stack;public class MyStack{ public static void main(String[] args) { ListNode listNode1 = new ListNode(1); ListNode listN原创 2020-07-12 08:54:06 · 165 阅读 · 0 评论 -
算法(剑指Offer05 替换空格)
题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。例:输入:s = "We are happy."输出:"We%20are%20happy."方法一:该方法是我第一次就想到的,因为是刚学完正则表达式,所以尝试一下,该方法没有任何意义。public String replaceSpace(String s) { return s.replaceAll("\\s", "%20"); }方法二:该方法是看解析找到的,认为比较好的一个方法:即迭代字原创 2020-07-11 09:36:35 · 105 阅读 · 0 评论 -
算法(剑指Offer04 二维数组中的查找)
问题描述:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定转载 2020-07-10 17:36:17 · 107 阅读 · 0 评论