diff --git a/README.md b/README.md index 1e00928..05a86af 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ - [[11] Container With Most Water ](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8F%8C%E6%8C%87%E9%92%88/ContainerWithMostWater_11.java) - [[26] Remove Duplicates from Sorted Array](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8F%8C%E6%8C%87%E9%92%88/RemoveDuplicatesfromSortedArray_26.java) - [[27] Remove Element ](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8F%8C%E6%8C%87%E9%92%88/RemoveElement_27.java) +- [[88] Merge Sorted Array ](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8F%8C%E6%8C%87%E9%92%88/MergeSortedArray_88.java) ## kSum @@ -90,6 +91,9 @@ - [[709] To Lower Case](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%AD%97%E7%AC%A6%E4%B8%B2/ToLowerCase_709.java) - [[804] Unique Morse Code Words](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%AD%97%E7%AC%A6%E4%B8%B2/UniqueMorseRepresentations_804.java) - [[3] Longest Substring Without Repeating Characters](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%AD%97%E7%AC%A6%E4%B8%B2/LongestSubstringWithoutRepeatingCharacters_3.java) +- [[14] Longest Common Prefix](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%AD%97%E7%AC%A6%E4%B8%B2/LongestCommonPrefix_14.java) +- [[13] Roman to Integer](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%AD%97%E7%AC%A6%E4%B8%B2/RomanToInt_13.java) + ## 尺取法 @@ -113,6 +117,11 @@ - [[461] Hamming Distance](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E5%AD%A6/HammingDistance_461.java) - [[476] Number Complement](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E5%AD%A6/NumberComplement_476.java) - [[728] Self Dividing Numbers](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E5%AD%A6/SelfDividingNumbers_728.java) +- [[67] Add Binary](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E5%AD%A6/AddBinary_67.java) +- [[9] Palindrome Number](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E5%AD%A6/PalindromeNumber_9.java) +- [[7] Reverse Integer](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E5%AD%A6/ReverseInteger_7.java) + + ## 数组 - [[717] 1-bit and 2-bit Characters](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E7%BB%84/BitAnd2bitCharacters_717.java) @@ -124,6 +133,9 @@ - [[922] Sort Array By Parity II](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E7%BB%84/SortArrayByParityII_922.java) - [[766] Toeplitz Matrix](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E7%BB%84/ToeplitzMatrix_766.java) - [[867] Transpose Matrix](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E7%BB%84/Transpose_867.java) +- [[66] Plus One](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E7%BB%84/PlusOne_66.java) +- [[1] Two Sum](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%95%B0%E7%BB%84/TwoSum_1.java) + ## 栈 - [[844] Backspace String Compare](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E6%A0%88/BackspaceStringCompare_844.java) @@ -197,6 +209,7 @@ ### 二叉树的性质 - [[669] Trim a Binary Search Tree](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E4%BA%8C%E5%8F%89%E6%A0%91/%E6%80%A7%E8%B4%A8/TrimBinarySearchTree_669.java) +- [[110] Balanced Binary Tree ](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E4%BA%8C%E5%8F%89%E6%A0%91/%E6%80%A7%E8%B4%A8/BalanceTree_110.java) @@ -246,6 +259,7 @@ ### TwoSequenceDP - [[72] Edit Distance](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/TwoSequencesDP/EditDistance_72.java) - [[77] Combinations](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/TwoSequencesDP/LongestCommonSubsequence_77.java) +- [[53] Maximum Subarray](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/TwoSequencesDP/MaximumSubarray_53.java) ### 背包问题 - [[416] Partition Equal Subset Sum](https://github.com/zaiyunduan123/leetcode-java/blob/master/src/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/背包问题/PartitionEqualSubsetSum_416.java) diff --git "a/src/\344\272\214\345\217\211\346\240\221/\346\200\247\350\264\250/BalanceTree_110.java" "b/src/\344\272\214\345\217\211\346\240\221/\346\200\247\350\264\250/BalanceTree_110.java" new file mode 100644 index 0000000..aa8da71 --- /dev/null +++ "b/src/\344\272\214\345\217\211\346\240\221/\346\200\247\350\264\250/BalanceTree_110.java" @@ -0,0 +1,33 @@ +package 二叉树.性质; + +/** + * @Author jiangyunxiong + * @Date 2019/6/23 9:00 PM + *
+ * Bottom-up 提前阻断法(复杂度 O(N))
+ * 在对root做dfs时,会从下至上获得每个root的左右子树高度,当我们发现有一例左右子树高度差 >1的情况时return -1,代表此树不是平衡树,后面的高度计算都没有意义了,之后一路return -1,不再做后面的DFS。
+ */
+public class BalanceTree_110 {
+ class TreeNode {
+ int val;
+ TreeNode left;
+ TreeNode right;
+
+ TreeNode(int x) {
+ val = x;
+ }
+ }
+
+ public boolean isBalanced(TreeNode root) {
+ return height(root) != -1;
+ }
+
+ private int height(TreeNode root) {
+ if (root == null) return 0;
+ int left = height(root.left);
+ if (left == -1) return -1;
+ int right = height(root.right);
+ if (right == -1 || Math.abs(left - right) > 1) return -1;
+ return Math.max(left, right) + 1;
+ }
+}
diff --git "a/src/\345\212\250\346\200\201\350\247\204\345\210\222/TwoSequencesDP/MaximumSubarray_53.java" "b/src/\345\212\250\346\200\201\350\247\204\345\210\222/TwoSequencesDP/MaximumSubarray_53.java"
new file mode 100644
index 0000000..43735fe
--- /dev/null
+++ "b/src/\345\212\250\346\200\201\350\247\204\345\210\222/TwoSequencesDP/MaximumSubarray_53.java"
@@ -0,0 +1,25 @@
+package 动态规划.TwoSequencesDP;
+
+/**
+ * @Author jiangyunxiong
+ * @Date 2019/4/5 9:52 AM
+ *
+ * 最大子序和
+ *
+ * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
+ */
+public class MaximumSubarray_53 {
+ public int maxSubArray(int[] nums) {
+ int len = nums.length;
+ if (len == 0) {
+ return 0;
+ }
+ int segmentSum = nums[0];
+ int res = nums[0];
+ for (int i = 1; i < nums.length; i++) {
+ segmentSum = Math.max(nums[i], segmentSum + nums[i]);
+ res = Math.max(segmentSum, res);
+ }
+ return res;
+ }
+}
diff --git "a/src/\345\217\214\346\214\207\351\222\210/MergeSortedArray_88.java" "b/src/\345\217\214\346\214\207\351\222\210/MergeSortedArray_88.java"
new file mode 100644
index 0000000..8cfa133
--- /dev/null
+++ "b/src/\345\217\214\346\214\207\351\222\210/MergeSortedArray_88.java"
@@ -0,0 +1,25 @@
+package 双指针;
+
+/**
+ * @Author jiangyunxiong
+ * @Date 2019/4/4 11:13 PM
+ *
+ * 合并两个有序数组
+ *
+ * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
+ */
+public class MergeSortedArray_88 {
+ public void merge(int[] nums1, int m, int[] nums2, int n) {
+ int i = m - 1;
+ int j = n - 1;
+ int k = m + n - 1;
+
+ while (k >= 0) {
+ if (j < 0 || i >= 0 && nums1[i] > nums2[j]) {
+ nums1[k--] = nums1[i--];
+ } else {
+ nums1[k--] = nums2[j--];
+ }
+ }
+ }
+}
diff --git "a/src/\345\255\227\347\254\246\344\270\262/LongestCommonPrefix_14.java" "b/src/\345\255\227\347\254\246\344\270\262/LongestCommonPrefix_14.java"
new file mode 100644
index 0000000..597e5ee
--- /dev/null
+++ "b/src/\345\255\227\347\254\246\344\270\262/LongestCommonPrefix_14.java"
@@ -0,0 +1,24 @@
+package 字符串;
+
+/**
+ * @Author jiangyunxiong
+ * @Date 2019/6/23 1:53 PM
+ */
+public class LongestCommonPrefix_14 {
+ public static void main(String[] args) {
+ LongestCommonPrefix_14 n = new LongestCommonPrefix_14();
+ String a[] = {"c","acc","ccc"};
+ String s = n.longestCommonPrefix(a);
+ }
+ public String longestCommonPrefix(String[] strs) {
+ if(strs.length == 0) return "";
+ String pre = strs[0];
+ for(int i=1;i
+ * 思路
+ * 1. 首先将所有的组合可能性列出并添加到哈希表中
+ * 2. 然后对字符串进行遍历,由于组合只有两种,一种是 1 个字符,一种是 2 个字符,其中 2 个字符优先于 1 个字符
+ * 3. 先判断两个字符的组合在哈希表中是否存在,存在则将值取出加到结果 ans 中,并向后移2个字符。不存在则将判断当前 1 个字符是否存在,存在则将值取出加到结果 ans 中,并向后移 1 个字符
+ * 4. 遍历结束返回结果 ans
+ */
+public class RomanToInt_13 {
+ public static void main(String[] args) {
+ RomanToInt_13 r = new RomanToInt_13();
+ r.romanToInt("III");
+ }
+
+ public int romanToInt(String s) {
+ Map
+ * 1. 先求出整个链表的长度
+ * 2. 根据k值找到需要移动的部分链表的前驱(l-n%l)
+ * 3. 在前驱之后将链表断开,移动后半部分
+ */
+ public ListNode rotateRight(ListNode head, int k) {
+ if (head == null || head.next == null) return head;
+ ListNode dummy = new ListNode(0);
+ dummy.next = head;
+ ListNode fast = dummy, slow = dummy;
+ int i;
+ for (i = 0; fast.next != null; i++) {
+ fast = fast.next;
+ }
+ for (int j = i - k % i; j > 0; j--) {
+ slow = slow.next;
+ }
+ fast.next = dummy.next;//翻转
+ dummy.next = slow.next;
+ slow.next = null;
+ return dummy.next;
+ }
+}