![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
FlyingApe
这个作者很懒,什么都没留下…
展开
-
删除排序数组中重复数字
给定一个排序数组,删除数组中重复的数字,要求在O(1)的空间完成,在原数组上进行操作,返回删除后数组的长度。思路:很简单的题,可以借鉴插入排序的思路,如果相等就不插入。代码:public class RemoveDuplicatesFromSortedArray { public int removeDuplicates(int[] nums) { if(nums.length...原创 2019-01-17 13:37:00 · 175 阅读 · 0 评论 -
区间列表的交集计算
给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)示例:输入:A = [[0,2],[5,10...原创 2019-02-03 12:19:27 · 1025 阅读 · 0 评论 -
电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射关系如下:示例:输入:“23”输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]注:输出字符串顺序任意我的代码:public class LetterCombinati原创 2019-01-29 09:53:54 · 80 阅读 · 0 评论 -
一趟遍历删除链表倒数第N个节点
给定一个链表,删除链表倒数第N个节点,并返回链表头结点。如:给定链表1->2->3->4->5 以及n = 2,返回链表1->2->3->5。思路:两个指针,相距n,当后一个指针到尾部时,p所指向的下个节点就是要删除的节点。代码:public class RemoveNthNodeFromEndOfList { public ListN...原创 2019-01-29 10:22:26 · 402 阅读 · 0 评论 -
关于List值传递还是引用传递的问题
首先可以确定的是,JAVA的List是引用传递,也就是说在作为参数传递进去list和原来的list指向同一空间,互相影响。但仍有些地方需要注意。通过代码解释:代码一:public void test() { List<String> list = new ArrayList<>(); list.add("1"); modify(list); ...原创 2019-01-30 08:12:12 · 6849 阅读 · 1 评论 -
生成括号
这道题有点意思。给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[((())), (()()), (())(), ()(()), ()()()]。 我的思路:要保证括号正确,就要保证生成串过程中左括号数一定是>=右括号数的,在此基础上,列出所有可能的结果。最容易想到的思路当然就是递归了。①如...原创 2019-01-30 08:31:00 · 99 阅读 · 0 评论 -
合并K个有序链表
合并 k 个排序链表,返回合并后的排序链表。public class MergeKSortedLists { public ListNode mergeKLists(ListNode[] lists) { if(lists.length == 0)return null; if(lists.length == 1)return lists[0]; int i = 1; ...原创 2019-01-30 08:58:51 · 393 阅读 · 0 评论 -
两两交换两个相邻节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。如:给定1->2->3->4,返回2->1->4->3。说明:你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 方法一:交换两个节点里的值而节点不动。(该题禁止这样做)方法二:老老实实的交换就好了我的代码:public Li...原创 2019-01-30 09:53:55 · 738 阅读 · 0 评论 -
组合总和(combinationSum)以及List的add()方法的问题
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。 解集不能包含重复的组合。思路:用回溯法,把candidates中的数先加一下,如果不行则回溯。设计递归函数combinati...原创 2019-02-09 11:02:48 · 244 阅读 · 0 评论 -
组合总和②
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 譬如:输入candidates = [10,1,2,7,6,1,5] ,target = 8,所求解集为:[...原创 2019-02-10 11:33:07 · 136 阅读 · 0 评论 -
k个一组翻转链表
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例:输入1->2->3->4->5,k = 2。返回2->1->4->3->5 输入1->2->3->4->5,k = 3...原创 2019-01-31 09:01:21 · 528 阅读 · 0 评论 -
接雨水问题
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入:[0,1,0,2,1,0,1,3,2,1,2,1]输出:6我的思路:两层循环,第一层确定左柱,...原创 2019-02-11 09:44:36 · 434 阅读 · 0 评论 -
缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。要求算法时间复杂度O(n),空间复杂度常数级别。示例1:输入:[1,2,0]输出:3示例2:输入:[3,4,-1,1]输出:2示例3:输入:[7,8,9,10]输出:1我的思路:①遍历一遍数组,如果元素值在1~length之间,则将其放到该值-1的位置(譬如1放到a[0],3放到a[2])。如果元素值...原创 2019-02-11 09:46:15 · 146 阅读 · 0 评论 -
java全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]我的思路:这是一道递归求解的题。因为一个序列的全排列是这样组成的:“这个序列的每个元素做头元素,剩下的元素全排列”。根据引号中的这句话,把它...原创 2019-02-12 10:50:41 · 437 阅读 · 0 评论 -
如何原地旋转矩阵
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。思路:经过观察发现,旋转矩阵有两种方法:一种是将矩阵分层,逐层向内进行旋转;一种是将矩阵转置后对称翻转即可。方法一:public void rotate(int[][] matrix) { ...原创 2019-02-12 11:41:51 · 2360 阅读 · 1 评论 -
字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"]原创 2019-02-13 12:28:59 · 102 阅读 · 0 评论 -
Java向下转型和向上转型
class Base{ public void print() { System.out.println("Run Base's Print()"); }}class Son1 extends Base{ public void print() { System.out.println("Run Son1's Print()"); }}class Son2 extends...原创 2019-03-03 12:01:54 · 155 阅读 · 0 评论 -
查询后的偶数和
给出一个整数数组 A 和一个查询数组 queries。对于第 i 次查询,有 val = queries[i][0], index = queries[i][1],我们会把 val 加到 A[index] 上。然后,第 i 次查询的答案是 A 中偶数值的和。(此处给定的 index = queries[i][1] 是从 0 开始的索引,每次查询都会永久修改数组 A。)返回所有查询的答案...原创 2019-02-03 12:09:05 · 219 阅读 · 1 评论 -
在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例:输入:nums = [5,7,7,8,8,10],target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10],target= 6...原创 2019-02-02 10:08:55 · 199 阅读 · 0 评论 -
最长有效括号
给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。如:输入“(()”,输出2;输入")()())",输出4.思路:两个for循环扫描字符串,用栈检测是否有合格串。我的代码:public class LongestValidParentheses { public int longestValidParentheses(String s) { in...原创 2019-02-02 08:11:41 · 229 阅读 · 0 评论 -
移除数组中某个值的元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。思路:这是一道很简单的题,一个很简单的思路是设置一个变量x记录要删除的元素个数,遍历数组,如果遇到要删除的值则x加1,如果不是要...原创 2019-01-17 13:49:16 · 1463 阅读 · 1 评论 -
利用折半查找在排序数组中查找值的下标,如果没有则返回插入下标
public class SearchInsertPosition { public int searchInsert(int[] nums, int target) { int low = 0,high = nums.length-1; while (low<=high) { int mid = (low+high)/2; if(nums[mid] == tar...原创 2019-01-17 16:12:41 · 956 阅读 · 0 评论 -
无重复字符的最长子串问题
无重复字符的最长子串问题(Long Substring Without repeating characters),要求:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。譬如输入“abcabcbb”,输出最长子串长度为3。我的解法:使用哈希表保存字符在串中的位置(字符值为键,索引为值),用int型变量beginAt记录子串开始位置,遍历串的变量i为子串当前尾部,maxlen...原创 2019-01-12 21:26:44 · 114 阅读 · 0 评论 -
计算两个有序数组的中位数
问题描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。(假设两个数组不会同时为空)如:nums1 = [1,2],nums2 = [3,4],则中位数为2.5;nums1 = [1],nums2 = [2,3],则中位数为2.0我的思路:很容易想到借鉴两条有序链合并的思路...原创 2019-01-12 22:46:36 · 137 阅读 · 0 评论 -
最长回文子串问题
给定一个字符串 s,找到 s 中最长的回文子串。譬如:输入babad,输出bab或者aba。 方法一:暴力法两层for循环给出所有可能的子串,并判断是否为回文串,边循环边记录最长串。时间复杂度为O(n^3)代码:public class LongestPalindromicSubstring { public String longestPalindrome(Str...原创 2019-01-13 23:53:56 · 184 阅读 · 0 评论 -
反转整数
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。当反转后的结果超出[-2^31,2^31]时返回0.譬如输入“123”,返回“321”;输入“-123”,返回“-321”;输入“1534236469”,返回0 我的思路:将输入的整数转为字符串处理。(也可以直接整数处理)。可以使用栈来反转,也可以直接反转。 我的代码:public class Rev...原创 2019-01-14 14:28:22 · 143 阅读 · 0 评论 -
字符串转整型
题目:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,...原创 2019-01-14 15:27:42 · 1993 阅读 · 0 评论 -
检测回文数
检测一个数是否为回文数,即从前往后和从后往前读是一样的数,如“121”是回文数,“-121”不是回文数。思路:①递归,如果一个数是回文数,则以中心点去掉开头结尾仍然是回文数。 ②逆转这个数,与原数比较是否相等,但这样做有可能导致逆转后溢出等问题。因此可以考虑反转后半部分与前半部分比较。代码:(递归)public class NumIsPalindrome {...原创 2019-01-14 16:01:22 · 231 阅读 · 0 评论 -
对称二叉树
判断一棵二叉树是否为对称二叉树。形如:是一棵对称二叉树。这不是一棵对称二叉树。思路:递归;分左右儿子,如果左儿子的左儿子和右儿子的右儿子相等且左儿子的右儿子和右儿子的左儿子相等,则为真。代码:public boolean isSymmetric(TreeNode root) { if(root == null)return true; return isMirror(ro...原创 2019-01-20 11:15:27 · 105 阅读 · 0 评论 -
二叉树层次遍历
层次遍历二叉树,每一次储存在list中,结果按从叶子层到根,从左到右的顺序存储 代码一:class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> lists =...原创 2019-01-21 12:08:01 · 109 阅读 · 0 评论 -
整数转罗马字符
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小...原创 2019-01-15 21:38:15 · 378 阅读 · 0 评论 -
罗马数字转整型数
和上一篇一样的规则。 代码:public class RomanToInteger { public int romanToInt(String s) { int num = 0; char[] a1 = {'I','I','X','X','C','C'}; char[] a2 = {'V','X','L','C','D','M'}; int[] v1 = {4...原创 2019-01-15 22:15:42 · 148 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。譬如:输入:"flower","flow","flight",输出"fl",如果没有相同前缀输出“”。方法一:扫描法(可以横向也可以纵向)我的代码:public class LongestCommonPrefix { public String longestCommonPrefix(St...原创 2019-01-15 22:43:40 · 61 阅读 · 0 评论 -
求下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。例子:(左侧为输入,右侧为输出结果)1,2,3->1,3,23,2,1->1,2,31,1,5->1,5,14,2,0,2,3,2,0->4,2,0,3,...原创 2019-02-01 10:16:23 · 401 阅读 · 0 评论 -
三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。例如给定nums = [-1,0,1,-1,2,-4],满足条件的三元组为[[-1,0,1],[-1,-1,2]]我的思路:思路一:刚开始,我是想着直接用三个指针i,j,k进行遍历,三数之和等于0,且不在lists中则假如...原创 2019-01-28 10:05:26 · 75 阅读 · 0 评论 -
判断括号是否合法
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。譬如:"()[]{}"为合法,"(]"、"([)]"均为非法。思路:栈,遇到左括号入栈,非左括号出栈并检查是否匹配,如果不匹配则非法。如果整个字符串遍历完了且栈也为空,则...原创 2019-01-17 09:35:57 · 1828 阅读 · 1 评论 -
关于TreeSet
TreeSet能够保证集合中无重复元素,且按序排列!所按顺序是元素的自然顺序。因此,如果插入的是数字,譬如1,3,4,8,5,2,那么顺序遍历就会输出123458。如果插入的是字符串,譬如:A,B,Allow,F,Buy,Follow,那么输出就会是:A、Allow、B、Buy、F、Follow基于这个性质,假如有一道题:给定一个数字n,生成n以下所有数且按字典序排列。譬...原创 2019-03-11 09:04:57 · 124 阅读 · 0 评论