刷题
刷题记录
꒰๑˘ᴗ˘๑꒱
这个作者很懒,什么都没留下…
展开
-
第三大的数
第三大的数给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第...原创 2020-05-13 15:32:08 · 56 阅读 · 0 评论 -
反转链表
反转链表方法一:迭代public ListNode reverseList(ListNode head) { ListNode newHead=null; ListNode p=head; while(p!=null){ ListNode next=p.next; p.next=newHead; newHead=p; ...原创 2020-05-10 15:42:19 · 53 阅读 · 0 评论 -
子集
子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]方法一:回溯public List<List<Integer>> su...原创 2020-05-06 23:00:22 · 102 阅读 · 0 评论 -
反转字符串中的元音字母
题目来源编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入:"hello"输出:"holle"示例 2:输入:"leetcode"输出: "leotcede"我的思路:双指针i,j如果两个指针对应的元素都是元音,交换并i++,j--都不是元音,i++,j--i是元音而j不是,j--j是元音而i不是,i++public String reverse...原创 2020-05-05 18:24:30 · 84 阅读 · 0 评论 -
子序列
判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:...原创 2020-05-11 16:18:52 · 102 阅读 · 0 评论 -
最大子序和
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6方法一:贪心贪心策略:如果之前的和小于0就丢弃,当前和就是当前元素如果之前元素的和大于0,当前和为之前和加上当前元素public in...原创 2020-05-06 14:30:36 · 57 阅读 · 0 评论 -
打乱数组
题目来源打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。solution.shuffle();// 重设数组到它的初始状态[1,2,3]...原创 2020-05-10 11:01:26 · 66 阅读 · 0 评论 -
最长上升序列
最长连续递增序列给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1方法一:滑动窗口滑动窗...原创 2020-05-06 19:28:55 · 101 阅读 · 0 评论 -
链表相交
题目来源量链表如果相交,返回相交的第一个结点,否则返回null我的思路:分别将两个链表存起来,如果最后一个结点不相等则不相交,否则往前找到第一个不相等的结点,这个结点的next即为相交的第一个结点public ListNode getIntersectionNode(ListNode headA, ListNode headB) { List<ListNode> lis...原创 2020-05-09 22:01:26 · 48 阅读 · 0 评论 -
合并K个排序链表
题目来源合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6方法一:先排序再合并public ListNode mergeKLists(ListNode[] lists...原创 2020-05-05 17:55:07 · 66 阅读 · 0 评论 -
最长公共子序列(LCS)
题目来源给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 *子序列 *是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列...原创 2020-05-06 15:08:55 · 95 阅读 · 0 评论 -
旋转数组
旋转数组给定一个数组,将数组中的元素向右移动 k个位置,其中 k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]输入: [-1,-100,3,99] 和 k =...原创 2020-05-11 12:32:45 · 79 阅读 · 0 评论 -
打家劫舍
题目一你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 ...原创 2020-05-10 10:42:24 · 61 阅读 · 0 评论 -
栈与队列
用栈实现队列方法一一个栈用来放数据,一个栈用来取数据push:O(1)pop:最好O(1),最坏O(n)class MyQueue { private Stack<Integer> stack1=new Stack<>(); private Stack<Integer> stack2=new Stack<>(); ...原创 2020-05-10 14:15:03 · 55 阅读 · 0 评论 -
全排列
全排列给定一个没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:回溯public List<List<Integer>> permute(int[] nums) { List<List<Int...原创 2020-05-06 21:05:30 · 60 阅读 · 0 评论 -
验证回文字符串
题目来源给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符方法一:暴力时间复杂度O(n2)方法二:双指针两个指针i,j如果相等,前进不相等,判断i+1...j或i...j-1是否为回文时间复杂度O(n)public boolean ...原创 2020-05-05 18:50:01 · 59 阅读 · 0 评论 -
N皇后问题
输出解的个数private int count = 0;public int totalNQueens(int n) { int[] placed = new int[n];//数组下标表示第i个皇后,值为皇后放置的纵坐标 dfs(placed, 0); return count;}public void dfs(int[] placed, int row) {...原创 2020-05-06 23:37:36 · 50 阅读 · 0 评论 -
变态跳台阶
题目来源一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法方法一:暴力设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以是0~n-1个台阶那么总的方法数就是所有可能的和。也就是f[n] = f[n-1] + f[n-2] + ... + f[0]显然初始条...原创 2020-06-06 17:29:00 · 50 阅读 · 0 评论 -
滑动窗口的最大值&队列的最大值
滑动窗口的最大值给定一个数组 nums,有一个大小为 k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -...原创 2020-05-13 18:07:30 · 69 阅读 · 0 评论 -
topK
数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4全局排序,O(n*lg(n))局部排序,只排序TopK个数,O(n*k)堆:维...原创 2020-06-03 00:21:27 · 81 阅读 · 0 评论 -
Pow(x, n)
题目来源实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0...原创 2020-06-07 00:02:52 · 81 阅读 · 0 评论 -
机器人的运动范围
题目来源地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0]的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够...原创 2020-06-06 22:04:53 · 53 阅读 · 0 评论 -
二维数组中的查找
题目来源在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 1...原创 2020-05-16 16:41:25 · 57 阅读 · 0 评论 -
数据流的中位数
数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:...原创 2020-06-06 20:14:34 · 74 阅读 · 0 评论 -
合并两个排序的链表&反转链表
合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy=ne...原创 2020-06-08 01:24:02 · 122 阅读 · 0 评论 -
翻转单词顺序
题目来源输入:"the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出:"example good a"解释: 如果两个单词间有多余的空格,将...原创 2020-05-26 23:27:22 · 90 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一方法一:双指针我的方法:public int[] exchange(int[] nums) { int i=0; int...原创 2020-06-08 01:05:49 · 63 阅读 · 0 评论 -
从尾到头打印链表
题目来源输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]用栈public int[] reversePrint(ListNode head) { Stack<Integer> stack=new Stack(); ListNode p=head; while(p!...原创 2020-05-16 16:52:44 · 58 阅读 · 0 评论 -
数组中重复的数字
数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 :输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3方法一:Set遍历数组,在遍历过程中将遇到的元素存起来,如果发现当前遇到的元素已经存在...原创 2020-05-16 15:58:04 · 104 阅读 · 0 评论 -
在排序数组中查找数字
在排序数组中查找数字统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0我的思路:二分查找到target,再分别向前向后找等于target的值public int search(int[] nums, in...原创 2020-06-06 20:16:00 · 246 阅读 · 0 评论 -
整数拆分
整数拆分给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36说明:你可以假设 n不小于 2 且不大于 58方法一:暴力递归(超时)设 F(n) ...原创 2020-06-07 20:20:22 · 197 阅读 · 0 评论 -
三叉树的垂直输出和水平输出
imageimage三叉树的结构如上图。垂直输出:A,B,D,A,C,G,A,C,K,水平输出:A,B,C,D,G,K,class Node { public String value; public Node left; public Node middle; public Node right; ...原创 2020-05-26 16:27:22 · 207 阅读 · 0 评论 -
链表排序
对链表进行插入排序对链表进行插入排序。输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5public ListNode insertionSortList(ListNode head) { if (he...原创 2020-05-13 22:07:08 · 55 阅读 · 0 评论 -
最大数
题目来源给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。希望高位的数字越大越好注意比较规则和0开头的情况public String largestNumber(int[] nums) {...原创 2020-05-13 15:51:00 · 71 阅读 · 0 评论 -
矩阵中的路径
矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[["a","b","c","e"],["s","f","c","s"],["...原创 2020-06-06 20:22:36 · 54 阅读 · 0 评论 -
课程表(拓扑排序)
课程表你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需...原创 2020-05-28 13:18:18 · 104 阅读 · 0 评论 -
正则表达式匹配
正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 **整个 **字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:...原创 2020-06-08 00:37:09 · 81 阅读 · 0 评论 -
约瑟夫环
圆圈中最后剩下的数字0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3**输出: **3示例 2:输入: n = 10, m...原创 2020-06-15 00:07:46 · 51 阅读 · 0 评论 -
不用加减乘除做加法&求1+2+…+n
不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数和:a^b进位:(a&b)<<1由于不能使用加法,需要运算到直到进位等于0public int add(int a, in...原创 2020-06-15 01:12:06 · 106 阅读 · 0 评论 -
把数组排成最小的数
把数组排成最小的数输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例 2:输入: [3,30,34,5,9]输出: "3033459"提示:0 < nums.length <= 100说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字...原创 2020-06-10 00:31:35 · 86 阅读 · 0 评论