Java
ruo砚
以前的代码还真的是忘得一干二净
展开
-
【LeetCode 56】合并区间
LeetCode 56原创 2022-01-04 20:30:14 · 222 阅读 · 0 评论 -
【LeetCode 49】字母异位词分组
比较复杂的方法。 public static List<List<String>> groupAnagrams(String[] strs) { List<List<String>> list = new ArrayList<List<String>>(); int n = strs.length; if (n == 0) return null; int[] pointers原创 2021-12-31 14:27:17 · 182 阅读 · 0 评论 -
【LeetCode 48】旋转图像
public void rotate(int[][] matrix) { // put upside down int rows = matrix.length; int cols = matrix[0].length; for (int r = 0; r < rows / 2; r++) { for (int c = 0; c < cols; c++) { int tmp = matrix[r][c...原创 2021-12-31 09:05:32 · 114 阅读 · 0 评论 -
【LeetCode 46】【LeetCode 47】全排列
public static List<List<Integer>> permute(int[] nums) { List<Integer> ret = new ArrayList<Integer>(); List<List<Integer>> list = new ArrayList<List<Integer>>(); boolean[] read = new boolean...原创 2021-12-30 16:19:00 · 346 阅读 · 0 评论 -
【LeetCode 43】字符串相乘
public static String multiply(String num1, String num2) { String ret = ""; int n1 = num1.length(); int n2 = num2.length(); // use num2 to multiply num1 if (n1 < n2) { String tmp = num1; num1 = num2; ...原创 2021-12-26 15:09:48 · 186 阅读 · 0 评论 -
【LeetCode41】缺失的第一个正数
根据参考答案给出的一点提示,完成代码。 public static int firstMissingPositive(int[] nums) { int ret = 1; boolean flag = false; int posCount = 0; for (int i = 0; i < nums.length; i++) if (nums[i] > 0) posCount++; for (int i = 0原创 2021-12-23 20:43:21 · 163 阅读 · 0 评论 -
【LeetCode 40】组合总和
public static List<List<Integer>> combinationSum2(int[] candidates, int target) { List<List<Integer>> list = new ArrayList<List<Integer>>(); Arrays.sort(candidates); List<Integer> ret = new Array...原创 2021-12-23 15:42:48 · 196 阅读 · 0 评论 -
【LeetCode 39】组合总和
参考题解 public List<List<Integer>> combinationSum(int[] candidates, int target) { int len = candidates.length; List<List<Integer>> res = new ArrayList<>(); if (len == 0) { return res;原创 2021-12-22 10:01:34 · 49 阅读 · 0 评论 -
【LeetCode 35】搜索插入位置
二分法的关键在于理解清楚边界的语义,然后逐步缩小边界范围。 public static int searchInsert(int[] nums, int target) { int ret = 0; int l = 0; int h = nums.length; while (l < h) { int mid = l + (h-l) / 2; if (nums[mid] == target) return原创 2021-12-20 19:01:06 · 46 阅读 · 0 评论 -
【LeetCode 33 34】排序数组
思路 需要算法复杂度为O(logn),则应该使用二分法。 【注意1】二分法的初始值l和h设定以及应该用while(l<h)还是while(l<=h): 如果使用[l,h),则应该使用while(l<h),如果使用[l,h],则应该使用while(l<=h) 【注意2】在有序数组中逐步查询的边界。 【LeetCode 33】 // 第一种边界条件 public static int search(int[] nums, int target) { int l原创 2021-12-20 17:19:00 · 50 阅读 · 0 评论 -
【LeetCode 31】下一个排列
参考算法描述 public static void nextPermutation(int[] nums) { int j = nums.length - 1; int i = j-1; while (i >= 0) { if (nums[i] < nums[j]) break; i--; j--; } if (i != -1) // 没有查找到顺序对,应该返回最开始的一组数据原创 2021-12-16 20:28:48 · 41 阅读 · 0 评论 -
【LeetCode 30】串联所有单词的子串
思路 滑动窗口和HashMap,有了这两个关键点后编码较为容易。 public static List<Integer> findSubstring(String s, String[] words) { List<Integer> ret = new ArrayList<Integer>(); int lengthOfWord = words[0].length(); int lengthOfWords = words.leng原创 2021-12-15 20:15:18 · 310 阅读 · 0 评论 -
【LeetCode 28】KMP算法
public class KMP { int[] next; String pattern; String target; KMP(String target, String pattern) { this.pattern = pattern; this.target = target; this.next = new int[this.pattern.length()]; } public void createNext() { int j = 0; int i原创 2021-12-15 13:55:41 · 226 阅读 · 0 评论 -
【LeetCode 50】Pow(x, n)
// 递归计算 public double myPow(double x, int n) { if (n == 1) return x; if (n == -1) return 1/x; if (n == 0) return 1; if (n % 2 == 0) { double tmp = myPow(x, n/2); return tmp * tmp; } .原创 2021-12-14 17:19:01 · 42 阅读 · 0 评论 -
【LeetCode 27】移除元素
统一LeetCode 26与LeetCode 27题 26题 public static int removeDuplicates(int[] nums) { if (nums.length <= 1) return nums.length; int ptr = 0; for (int i = 1; i < nums.length; i++) { if (nums[i] != nums[ptr]) {原创 2021-12-13 17:40:56 · 170 阅读 · 0 评论 -
【LeetCode 26】删除有序数组中的重复项
比较简单。 public static int removeDuplicates(int[] nums) { if (nums.length <= 1) return nums.length; int p1 = 0, p2 = 1; int point = 0; while (true) { nums[point] = nums[p1]; while (p2 < nums.length &原创 2021-12-13 14:18:00 · 161 阅读 · 0 评论 -
【LeetCode 25】K 个一组翻转链表
思路 若子链表的长度超过k,则对该子链表进行反转。联系LeetCode 206题即可以解答。 public static ListNode reverseKGroup(ListNode head, int k) { if (k <= 1) return head; ListNode dummy = new ListNode(); dummy.next = head; ListNode preNode = dummy; ListNode p = head; wh原创 2021-12-13 13:56:26 · 163 阅读 · 0 评论 -
【LeetCode 206】反转链表
public static ListNode reverseList(ListNode head) { if (head == null) return null; ListNode dummy = new ListNode(); dummy.next = head; ListNode preNode = dummy; ListNode p = head; while (p != null) { ListN...原创 2021-12-13 09:26:00 · 159 阅读 · 0 评论 -
【LeetCode 24】两两交换链表中的节点
public static ListNode swapPairs(ListNode head) { ListNode ret = new ListNode(); // dummy head ret.next = head; ListNode p = head; ListNode preNode = ret; while (p != null) { if (p.next != null) { preNod...原创 2021-12-08 17:15:36 · 47 阅读 · 0 评论 -
【LeetCode 23】合并K个升序链表
思路1 借鉴合并两个升序链表的算法,两两合并。 public ListNode mergeKLists(ListNode[] lists) { if (lists.length == 0) return null; if (lists.length == 1) return lists[0]; ListNode tmp = mergeTwoLists(lists[0], lists[1]); for (i原创 2021-12-08 16:13:37 · 160 阅读 · 0 评论 -
【LeetCode 22】括号生成
思路 深度优先遍历 Version1: 如果用‘+’和’-'来表示一个括号串的话,可以发现,一个合格的字符串在每时每刻的值都>=0 public static List<String> generateParenthesis(int n) { Map<Integer, Character> map = new HashMap<Integer, Character>(); map.put(1, '('); map.put(-1, ')原创 2021-12-08 11:10:42 · 198 阅读 · 0 评论 -
【LeetCode 21】合并两个有序链表
难点 添加了dummy节点后,使得“节点插入中间”与“节点插入头部”这两种情况合并,简化代码。 public static ListNode mergeTwoLists(ListNode list1, ListNode list2) { if (list1 == null) return list2; if (list2 == null) return list1; ListNode h2 = new ListNode(); //原创 2021-12-07 15:13:16 · 273 阅读 · 0 评论 -
【LeetCode 20】有效的括号
简单的题目。 public static boolean isValid(String s) { boolean ret = false; Deque<Character> stack = new ArrayDeque<Character>(); int i = 0; for (; i < s.length(); i++) { if (s.charAt(i) == '(' || s.charAt(i) ==原创 2021-12-07 08:47:07 · 192 阅读 · 0 评论 -
【LeetCode 19】删除链表的倒数第 N 个结点
很简单的题目。 public static ListNode removeNthFromEnd(ListNode head, int n) { if (head != null && n > 0) { ListNode p1 = head, p2 = head, preP1 = p1; int nn = n-1; // 两个指针间隔为 n-1 个步长 while (nn > 0) { p2 = p2.next; nn--;原创 2021-12-06 15:48:51 · 143 阅读 · 0 评论 -
【LeetCode 15 18 16】三数与四数之和,最接近的三数之和
题目很简单,直接给出18题的代码。 public static List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> ret = new ArrayList<List<Integer>>(); Arrays.sort(nums); for (int i = 0; i < nums.length; i+原创 2021-11-24 11:03:20 · 732 阅读 · 0 评论 -
【LeetCode 14】最长公共前缀
思路 比较简单。 Version1 自己写的,不多说了。 public static String longestCommonPrefix(String[] strs) { String ret = ""; int i = 0, j = 0; char c = strs[0].charAt(0); while (true) { // 退出循环条件有2种 // 条件1 某一个字符串截止 // 条件2 某一个字符串原创 2021-11-21 20:30:12 · 60 阅读 · 0 评论 -
【LeetCode 13】罗马数字转整数
思路 以下的几个版本,2和3思路类似。3个版本时间复杂度仅仅相差常数。 Version1 时间复杂度是O(13n) public static int romanToInt(String s) { int ret = 0; int[] n = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] m = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX"原创 2021-11-21 12:38:34 · 185 阅读 · 0 评论 -
【LeetCode 12】整数转罗马数字
思路 类似于贪心的思想,最先使用的是较大的数字。 Version1 public static String intToRoman(int num) { String ret = ""; Map<Integer, String> hashTable = new HashMap<Integer, String>(); //写的时候发现并没有用... hashTable.put(1, "I"); hashTable.put(5, "V"); hashTable.p原创 2021-11-21 11:24:21 · 187 阅读 · 0 评论 -
【LeetCode 11】盛最多水的容器
思路1 第一个思路是利用一个水平板从最高的位置处向最低位置处垂直移动,计算当前高度下,可以得到的最大面积。如果高度的范围是m,节点的个数为n,则时间复杂度为O(mn)。可以通过60个测试例子中的54个,之后的会超时。 public static int maxArea(int[] height) { int ret = 0; // 给出最大height O(n) int maxHeight = 0; for (int i = 0; i < height.length; i++)原创 2021-11-21 09:59:32 · 302 阅读 · 0 评论 -
【LeetCode 10】正则表达式匹配
错误版本 可以通过2/3的测试样例,发现每次判断当前字符的时候还需要判断后面一个甚至两个字符的情况。且代码有重复的情况,没有把各种情况完全归并到一起。没能很好的抽象问题。 public static boolean isMatch(String s, String p) { boolean ret = false; int m = s.length(); // for patter s int i = 0; int n = p.length(); // for patter p in原创 2021-11-20 14:59:00 · 186 阅读 · 0 评论 -
【LeetCode 7】整数反转
难点 整数反转本身简单,难点在于判断是否越界。 【注】LeetCode没有给出加法越界的情况,将加法越界注释掉,也可以通过所有测试样例。i.e.事实上,存在ret = 214748364, remain=8,这时,ret * 10 没有越界(2147483647),但是加法越界了。 public static int reverse(int x) { int ret = 0; int d = x; int remain; while (x != 0) { remain =原创 2021-11-18 17:29:39 · 60 阅读 · 0 评论 -
【LeetCode 6】Z字形变换
思路 寻找每个位置处的序号规律,在O(n)时间复杂度内可以恢复到原来的字符串。 p.s. 基本上是一次做出来的,優秀ですよ。 public static String convert(String s, int numRows) { String ret = ""; int n = s.length(); if (n != 0) { if (numRows == 1) return s; int m = 2 * numRows - 2; int t = 0;原创 2021-11-18 16:45:39 · 49 阅读 · 0 评论 -
【LeetCode 5】最长回文子串
思路1 失败思路 希望通过双指针,O(n)的时间复杂度得到回文子串,但是仅仅能通过不到50%的测试样例。 写的还是挺简洁的,但是问题出现在"abdbab"时,无法给出最长回文子串"bab"。原因在于,两侧指针只有向中间靠拢的过程,而没有回退到原来位置的过程,指针在中间位置的"db"相遇。 public static String longestPalindrome(String s) { String str = ""; int n = s.length(); if (n !=原创 2021-11-18 11:38:16 · 48 阅读 · 0 评论 -
【LeetCode 4】寻找两个正序数组的中位数
思路及难点 寻找数组中第k小的数字 在寻找第k小的数字时,每次删除k/2个数字,即下一次寻找第k/2个数字。将时间复杂度降低至O(log(k))。对于中位数来说,k=(m+n)/2,因此将时间复杂度降低到O(log(m+n))。 public static double findMedianSortedArrays(int[] nums1, int[] nums2) { int m = nums1.length; int n = nums2.length; int k = (m+n) / 2原创 2021-11-17 13:14:36 · 304 阅读 · 0 评论 -
【LeetCode 3】最长无重复子串
最长无重复子串 思路:滑动窗口 【难点1】滑动窗口的起始和结束位置 窗口的起始位置为第一个重复元素的下一个位置,结束位置为第二个重复元素的下一个位置。 例如:“abcdbm”,第一次遍历,滑动窗口的位置为i=0, j=0,接下来,j不断循环寻找重复元素,最终停止在j=4的位置上;则下一次滑动窗口的位置为i=2, j=5。 这样做的原理在于,包括第一个重复元素的字符串长度不能再增加,于是需要去掉第一个重复元素;而又已知在第一个和第二个重复元素之间,不存在重复元素,因此滑动窗口的结束位置在第二个重复元素之原创 2021-11-15 15:01:27 · 216 阅读 · 0 评论 -
【LeetCode 1】两数之和
[LeetCode] 两数之和思路新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 思路 先对数组进行排序,之后从已经排序的数组两侧开始进行加法;如果两数字 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持原创 2021-11-12 21:44:45 · 383 阅读 · 0 评论 -
Eclipse 关于 change to jre 1.5 报错问题
由于compiler 的 execution environment 与 library 不同导致的 这样就可以解决问题了原创 2018-04-24 12:24:29 · 638 阅读 · 0 评论 -
初学Exceptions
异常的第一种用法是Java比C++增加的一种使用方法,但是其抛出异常的方法一般只有直接抛出到method体之外,不能用try catch(原因不明确,可能是因为try catch l里的variables都只能在curly brakets 里使用);如果要将读入文件单独成为一个method的话,抛出的异常需要两次,先抛出到mathod之外,再抛出到main之外。 package myexcepti原创 2015-10-03 14:28:36 · 279 阅读 · 0 评论 -
Sorting Lists1
package sortobjects;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List;class Person { private String name; private int id;public S原创 2015-10-04 23:03:29 · 340 阅读 · 0 评论 -
Sorting Lists2
package naturalsorting;import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.TreeSet;class Person imp原创 2015-10-04 23:12:18 · 372 阅读 · 0 评论