随笔分类 - leetcode
leetcode刷题记录
摘要:用哈希表 public int longestConsecutive(int[] nums) { //未排序的数组,先进行排序再进行遍历???光排序就是O(n2)的时间复杂度了吧。 //还有啥办法 //加入哈希map,比较有没有与当前数字连续的键,如果有就进行添加,按顺序。但是这样的话,并不能一下子
阅读全文
摘要:自己想复杂了,虽然意识到了是什么问题,但是处理的过程复杂化了 public boolean search(int[] nums, int target) { int first = 0,last = nums.length; while(first != last){ int mid = first
阅读全文
摘要:完成,还算顺利 public List<List<String>> groupAnagrams(String[] strs) { //将第一个字符串放进一个数组,之后与前面的组的第一个字符串做比较, // 当出现新的字符的时候,就添加一个新的数组进去, // 依次类推,直到遍历结束,返回结果 //字
阅读全文
摘要:应该是用各种排序算法都行的吧 但是效果并不是很好,是可以优化的吧。 public void sortColors(int[] nums) { int n = nums.length; for(int i = 0;i<n;i++){ for(int j =i;j<n;j++){ if(nums[i]>
阅读全文
摘要:自己哼哧哼哧做了好久,两个多小时,终于完成了。。。 public boolean isMatch(String s, String p) { //对p进行预处理 int j = 0; while (j+1<p.length()){ if(p.charAt(j) == '*' && p.charAt(
阅读全文
摘要:还可以; public void merge(int[] nums1, int m, int[] nums2, int n) { if(m == 0){ if (n >= 0) System.arraycopy(nums2, 0, nums1, 0, n); return; } int k = nu
阅读全文
摘要:虽然做出来了,但是好像效果并不是很好。。 public Node connect(Node root) { if(root == null){ return null; } //构建一个队列 Queue<Node> queue = new ArrayDeque<>(); queue.add(root
阅读全文
摘要:我是将链表转成了数组,然后就变成和108题是一样的了。 但是效果并不是很好。 public TreeNode sortedListToBST(ListNode head) { ArrayList<Integer> list = new ArrayList<>(); if(head == null)
阅读全文
摘要:不是我自己写出来的,思想大概是懂的,没自己写,看了别人的代码; public List<TreeNode> generateTrees(int n) { if(n == 0){ return new LinkedList<>(); } return generate_trees(1,n); } pr
阅读全文
摘要:还可以,自己做得出来。 public TreeNode buildTree(int[] inorder, int[] postorder) { //用一个map来存储中序 int n = inorder.length; if(n == 0){ return null; }else if(n == 1
阅读全文
摘要:public Node connect(Node root) { if(root == null){ return root; } Queue<Node> Q = new LinkedList<>(); Q.add(root); while (Q.size() > 0){ int size = Q.
阅读全文
摘要:先中序遍历,对中序遍历得到的数组进行排序,将排序之后的数组与排序之前的数组比较,就可以找到是哪两个数进行了交换。 再中序遍历二叉树进行节点的值的交换,得到结果。 但是写得不够简洁,性能并不怎么样。 public void recoverTree(TreeNode root) { ArrayList<
阅读全文
摘要:public List<List<Integer>> zigzagLevelOrder(TreeNode root) { if(root == null){ return new ArrayList<>(); } List<List<Integer>> results = new ArrayList
阅读全文
摘要:public List<List<Integer>> levelOrderBottom(TreeNode root) { LinkedList<List<Integer>> res = new LinkedList<>(); if(root == null){ return res; } Queue
阅读全文
摘要:这道题自己完成的,不难。 回溯。 public boolean exist(char[][] board, String word) { int m = board.length; int n = board[0].length; int wordLength = word.length(); if
阅读全文
摘要:看了大佬的题解,茅塞顿开 public void solveSudoku(char[][] board) { if(board == null || board.length != 9 || board[0] == null || board[0].length != 9){ return; } b
阅读全文
摘要:public List<String> restoreIpAddresses(String s) { int len = s.length(); List<String> res = new ArrayList<>(); if(len<4 ||len>12) { return res; } Dequ
阅读全文
摘要:public List<List<String>> partition(String s) { int len = s.length(); List<List<String>> totalList = new ArrayList<>(); if(len == 0){ return totalList
阅读全文
摘要:这道题的动态规划,我自己没有想清楚,看了答案之后才恍然大悟,不难。 public boolean wordBreak(String s, List<String> wordDict) { boolean[] f = new boolean[s.length()+1]; f[0] = true; fo
阅读全文
摘要:还好做出来了,就是慢了点。 public int numDistinct(String s, String t) { int m = s.length(); int n = t.length(); if(m<n){ return 0; }else if(m ==n){ if(s.equals(t))
阅读全文

浙公网安备 33010602011771号