diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..26d33521 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Week_01/java/PlusOne.java b/Week_01/java/PlusOne.java new file mode 100644 index 00000000..c41a1407 --- /dev/null +++ b/Week_01/java/PlusOne.java @@ -0,0 +1,21 @@ +public class PlusOne { + public int[] plusOne(int[] digits) { + int index = digits.length-1; + while(true){ + if(index>=0&&digits[index]==9){ + digits[index--]=0; + }else if (index >= 0){ + digits[index] = digits[index]+1; + break; + }else{ + break; + } + } + if(index == -1){ + digits = new int[digits.length + 1]; + digits[0] = 1; + } + return digits; + } + +} diff --git a/Week_01/java/RotateArray.java b/Week_01/java/RotateArray.java new file mode 100644 index 00000000..6bbbb040 --- /dev/null +++ b/Week_01/java/RotateArray.java @@ -0,0 +1,29 @@ +//旋转数组 +public class RotateArray { + public static void rotate(int[] nums, int k) { + + int len = nums.length; + k = k % len; + rever(nums,0,len-1); + rever(nums,0,k-1); + rever(nums,k,len-1); + } + + public static void rever(int[]nums, int start, int end){ + int len = end-start+1; + for(int i=0;i stack = new LinkedList(); + + for(int i=0;i0){ + stack.push(i); + continue; + }else if(stack.isEmpty()&&height[i]==0){ + continue; + } + + while(!stack.isEmpty()&&height[stack.peek()]>1); + int target = num/mid; + if(target==mid) { + if (num % mid == 0) //如果取余为0说明相等 + return true; + right = mid - 1; //缩小上边界 + } else if(target>mid){ + left = mid+1; + } else{ + right = mid-1; + } + } + return false; + } + + public static void main(String[] args) { + System.out.println(isPerfectSquare(16)); + } +} diff --git a/Week_01/java/submissions.java b/Week_01/java/submissions.java new file mode 100644 index 00000000..7998a4ea --- /dev/null +++ b/Week_01/java/submissions.java @@ -0,0 +1,26 @@ +import java.util.ArrayList; +import java.util.List; + +public class submissions { + public List generateParenthesis(int n) { + List rst= new ArrayList(); + subFun(rst,0,0,n,""); + return rst; + } + + public void subFun(List rst,int left, int right,int n, String subRst){ + if(left==n&&right==n) { + rst.add(subRst); + return; + } + + if(left rstList = new ArrayList<>(); + Map numMap = new HashMap<>(); + for(int i : nums1){ + if(numMap.containsKey(i)){ + numMap.put(i,numMap.get(i)+1); + }else{ + numMap.put(i,1); + } + } + for(int j:nums2){ + if(numMap.get(j)!=null && numMap.get(j)!=0){ + rstList.add(j); + numMap.put(j,numMap.get(j)-1); + } + } + int[] rstNums= new int[rstList.size()]; + for(int k=0;kleft) return ""; + + if(c == '('){ + ++left; + if(left>=2){ + rst.append('('); + } + } + if(c == ')'){ + ++right; + if(right == left){ + left = 0; + right = 0; + }else{ + rst.append(')'); + } + } + } + return rst.toString(); + + } +} diff --git a/Week_02/java/ReverseStringII.java b/Week_02/java/ReverseStringII.java new file mode 100644 index 00000000..62e7d2a3 --- /dev/null +++ b/Week_02/java/ReverseStringII.java @@ -0,0 +1,25 @@ +public class ReverseStringII { + public String reverseStr(String s, int k) { + char[] chars = s.toCharArray(); + int len = chars.length; + + for(int i =0;i nums[maxIndex]) maxIndex= i; + } + return maxIndex; + } + + public static void main(String[] args) { + int[] nums = new int[]{1,3,-1,-3,5,3,6,7}; + int[] rsts = maxSlidingWindow(nums, 3); + for(int i =0;i> threeSum(int[] nums) { + Arrays.sort(nums); + List> rst = new ArrayList<>(); + int len = nums.length; + if(len<3||nums[0]>0) return rst; + + for(int i=0;i0&&nums[i]==nums[i-1]) continue; + sumSub(nums[i],i+1,len-1,nums,rst); + } + return rst; + } + + public static void sumSub(int target, int start, int end, int[] nums, List> rst){ + while(start singleRst = Arrays.asList(target,nums[start],nums[end]); + rst.add(singleRst); + while(start0){ + end--; + } + } + } + + + public static void main(String[] args) { + int[] nums = new int[]{-1,0,1,2,-1,-4}; + System.out.println(threeSum(nums)); + } + + +} diff --git a/Week_02/java/TopK.java b/Week_02/java/TopK.java new file mode 100644 index 00000000..3ff2f575 --- /dev/null +++ b/Week_02/java/TopK.java @@ -0,0 +1,75 @@ +import java.util.*; + +public class TopK { + // 使用Map和数组处理 效率差 + public static int[] topKFrequent(int[] nums, int k) { + Map numCountMap = new HashMap<>(); + for(int num : nums){ + numCountMap.put(num, numCountMap.getOrDefault(num, 0) + 1); + } + int[] rst = new int[k]; + int minIndex=0; + int i=0; + for(Integer key: numCountMap.keySet()){ + if(i numCountMap.get(rst[minIndex])){//如果此元素是否比数组最小值大 + rst[minIndex] = key; + minIndex = minNumIndex(rst, numCountMap); //重新寻找出K高中的最小值 + } + } + return rst; + } + public static int minNumIndex(int[] nums, Map map){ + int tmpIndex = 0; + for(int i=1;i numCountMap = new HashMap<>(); + for(int num : nums){ + numCountMap.put(num, numCountMap.getOrDefault(num, 0) + 1); + } + + PriorityQueue priQueue = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return numCountMap.get(o1) - numCountMap.get(o2) ;//升序排列,最前面是最小值 + } + }); + for(Integer key: numCountMap.keySet()){ + if(priQueue.size() < k) priQueue.add(key); + + else if(numCountMap.get(key) >numCountMap.get(priQueue.peek())){ + priQueue.remove(); + priQueue.add(key); + } + } + int rst[] = new int[k]; + for(int i=0;i pEnd) return null; + TreeNode root = new TreeNode(preorder[pStart]); + + int rootIndex; + for(rootIndex = iStart; rootIndex < iEnd;rootIndex++){ + if(inorder[rootIndex]==preorder[pStart]) + break; + } + int leftNodeNum = rootIndex - iStart; + root.left = buildTreeSub(preorder, inorder, pStart+1, pStart+leftNodeNum, iStart, rootIndex-1); + root.right = buildTreeSub(preorder, inorder, pStart+leftNodeNum+1, pEnd, rootIndex+1, iEnd); + return root; + } + + public static void main(String[] args) { +// int[] preorder = new int[]{3,9,20,15,7}; +// int[] inorder = new int[]{9,3,15,20,7}; + int[] preorder = new int[]{1,2}; + int[] inorder = new int[]{2,1}; + TreeNode treeNode = buildTree(preorder, inorder); + System.out.println(treeNode); + } + +} diff --git a/Week_03/java/LowestComNode.java b/Week_03/java/LowestComNode.java new file mode 100644 index 00000000..a10ee85f --- /dev/null +++ b/Week_03/java/LowestComNode.java @@ -0,0 +1,21 @@ + +//class TreeNode { +// int val; +// TreeNode left; +// TreeNode right; +// TreeNode(int x) { val = x; } +// } + +public class LowestComNode { + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + if(root==null || root==p || root==q) return root; // 找到目标节点 或 到叶子尽头 + + TreeNode left = lowestCommonAncestor(root.left, p, q); // 现在左子树找 + TreeNode right = lowestCommonAncestor(root.right, p, q); // 找右子树 + + if(left==null) return right; // 此子树包含右节点 或 返回null + if(right==null) return left; // 此子树包含左节点 不包含右节点 + return root; //此节点为目标值 包含左右节点 + } + +} diff --git a/Week_03/java/NQueens.java b/Week_03/java/NQueens.java new file mode 100644 index 00000000..e68c9088 --- /dev/null +++ b/Week_03/java/NQueens.java @@ -0,0 +1,46 @@ +import java.util.*; + +public class NQueens { + static List> rst = new ArrayList<>(); + + public static List> solveNQueens(int n) { + if(n<=0) return null; + List row = new ArrayList<>(); + List pie = new ArrayList<>(); + List na = new ArrayList<>(); + solveNQueensSub(n,0, new ArrayList<>(), row, pie, na); + return rst; + } + + public static void solveNQueensSub(int totalN, int curLevel, List singleLine, List row, List pie, List na){ + if(curLevel == totalN ){ + char[] chars = new char[totalN]; + List rstFir = new ArrayList<>(); + for(Integer i:singleLine){ + Arrays.fill(chars, '.'); + chars[i] = 'Q'; + rstFir.add(new String(chars)); + } + rst.add(rstFir); + return; + } + for(int queenRow=0;queenRow> lists = solveNQueens(4); + System.out.println(lists.toString()); + } + +} diff --git a/Week_03/java/PhoneNumber.java b/Week_03/java/PhoneNumber.java new file mode 100644 index 00000000..80679db0 --- /dev/null +++ b/Week_03/java/PhoneNumber.java @@ -0,0 +1,42 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PhoneNumber { + public static List letterCombinations(String digits) { + Map numMap = new HashMap<>(); + numMap.put("2","abc"); + numMap.put("3","def"); + numMap.put("4","ghi"); + numMap.put("5","jkl"); + numMap.put("6","mno"); + numMap.put("7","pqrs"); + numMap.put("8","tuv"); + numMap.put("9","wxyz"); + List rstList = new ArrayList<>(); + if(digits.equals("")) return rstList; + letterCombinSub(digits, 0, "", rstList, numMap); + return rstList; + } + public static void letterCombinSub(String digits, int numLevel, String curLetter, List rstList, Map numMap){ + if(numLevel == digits.length()){ + rstList.add(curLetter); + return; + } + char c = digits.charAt(numLevel); + String letters = numMap.get(String.valueOf(c)); + for(int i =0; i strings = letterCombinations("23"); + System.out.println(strings.toString()); + + } + + +} diff --git a/Week_03/java/SwapNode.java b/Week_03/java/SwapNode.java new file mode 100644 index 00000000..e270fba2 --- /dev/null +++ b/Week_03/java/SwapNode.java @@ -0,0 +1,34 @@ +public class SwapNode { + /** + * Definition for singly-linked list. + */ + public class ListNode { + int val; + ListNode next; + ListNode() {} + ListNode(int val) { this.val = val; } + ListNode(int val, ListNode next) { this.val = val; this.next = next; } + } + + + public ListNode swapPairs(ListNode head) { + ListNode preHead = new ListNode(0); + preHead.next = head; + + ListNode curNode = preHead; + while(curNode.next!=null&&curNode.next.next!=null){ + ListNode first = curNode.next; + ListNode second = first.next; + + curNode.next = second; + first.next =second.next; + second.next = first; + + + curNode = first; + } + return preHead.next; + } + + +} diff --git a/Week_04/java/FirstUniqueChar.java b/Week_04/java/FirstUniqueChar.java new file mode 100644 index 00000000..8e6a9242 --- /dev/null +++ b/Week_04/java/FirstUniqueChar.java @@ -0,0 +1,20 @@ +import java.util.HashMap; +import java.util.Map; + +public class FirstUniqueChar { + + public int firstUniqChar(String s) { + Map wordMap = new HashMap<>(); + char[] chars = s.toCharArray(); + for(char ch: chars){ + wordMap.put(ch,wordMap.getOrDefault(ch,0)+1); + } + + for (int i = 0; i < chars.length; i++) { + if (wordMap.get(chars[i])==1) return i; + } + return -1; + + } + +} diff --git a/Week_04/java/LemonadeChange.java b/Week_04/java/LemonadeChange.java new file mode 100644 index 00000000..c5b5cc05 --- /dev/null +++ b/Week_04/java/LemonadeChange.java @@ -0,0 +1,40 @@ +import java.util.HashMap; +import java.util.Map; + +public class LemonadeChange { + public static boolean lemonadeChange(int[] bills) { + if(bills.length==0) return true; + int five = 0; + int ten = 0; + for(int money: bills){ + switch(money){ + case 5: + five++; + break; + case 10: + if(five==0) + return false; + five--; + ten++; + break; + case 20: + if(ten>0&&five>0){ + ten--; + five--; + }else if(five>2){ + five-=3; + }else{ + return false; + } + break; + } + } + return true; + } + + public static void main(String[] args) { + int[] bills = new int[]{5,5,5,10,20}; + boolean b = lemonadeChange(bills); + System.out.println(b); + } +} diff --git a/Week_04/java/NumberOfIslands.java b/Week_04/java/NumberOfIslands.java new file mode 100644 index 00000000..533f95c3 --- /dev/null +++ b/Week_04/java/NumberOfIslands.java @@ -0,0 +1,37 @@ +/** + * 计算岛屿数量,深度优先遍历 + */ +public class NumberOfIslands { + public static int numIslands(char[][] grid) { + int h = grid.length; + int count = 0; + if(h == 0) return 0; + int l = grid[0].length; + for(int i=0;i=grid.length||j<0||j>=grid[0].length||grid[i][j]!='1') + return; + grid[i][j]='0'; + removeIsland(grid,i-1,j); + removeIsland(grid,i+1,j); + removeIsland(grid,i,j-1); + removeIsland(grid,i,j+1); + } + + public static void main(String[] args) { +// char[][] grid = new char[][]{{'1','1','1','1','0'}, {'1','1','0','1','0'},{'1','1','0','0','0'},{'0','0','0','0','0'}}; + char[][] grid = new char[][]{{'1','1','0','0','0'}, {'1','1','0','0','0'},{'0','0','1','0','0'},{'0','0','0','1','1'}}; + + int i = numIslands(grid); + System.out.println(i); + } +} diff --git a/Week_04/java/Permute.java b/Week_04/java/Permute.java new file mode 100644 index 00000000..7d272aa1 --- /dev/null +++ b/Week_04/java/Permute.java @@ -0,0 +1,28 @@ +import java.util.ArrayList; +import java.util.List; + +//全排列 +public class Permute { + public List> permute(int[] nums) { + List> res = new ArrayList<>(); + int[] used = new int[nums.length]; + permuteSub(nums, 0, used, new ArrayList<>(), res); + return res; + + } + + private void permuteSub( int[] nums, int level, int[] used, ArrayList rstSingle, List> result) { + if (level == nums.length) { + result.add(new ArrayList<>(rstSingle)); + return; + } + for (int i = 0; i < nums.length; i++) { + if (used[i] == 1) continue; + used[i] = 1; + rstSingle.add(nums[i]); + permuteSub(nums, level+1, used, rstSingle, result); + used[i] = 0; + rstSingle.remove(level); + } + } +} diff --git a/Week_04/java/SearchMatrix.java b/Week_04/java/SearchMatrix.java new file mode 100644 index 00000000..6eda54d1 --- /dev/null +++ b/Week_04/java/SearchMatrix.java @@ -0,0 +1,33 @@ +import java.util.Arrays; + +public class SearchMatrix { + //74. 搜索二维矩阵 + public static boolean searchMatrix(int[][] matrix, int target) { + int x = matrix.length; + if(x==0) return false; + int y = matrix[0].length; + int begin =0; + int end = x*y-1; + while(begin <= end){ + int mid = (begin + end)/2; //mid 为矩阵元素长度的一半(即将二维数组看成一维数组,求mid的值一样) + int mid_element = matrix[mid/y][mid%y]; //找二维数组中间位置的元素,行的值是 mid的值除以列取整, 列的值是mid的值除以列取 + // #余数(判断该行的第几个元素) + if(mid_element == target) + return true; + else if(mid_element >=target) + end = mid - 1; + else + begin = mid + 1; + + } + return false; + + } + + public static void main(String[] args) { +// int[][]tmp = new int[][]{{1,3,5,7},{10,11,16,20},{23,30,34,60}}; + int[][]tmp = new int[][]{{1,1}}; + boolean b = searchMatrix(tmp, 2); + System.out.println(b); + } +} diff --git a/Week_04/java/WordLadder.java b/Week_04/java/WordLadder.java new file mode 100644 index 00000000..5c883417 --- /dev/null +++ b/Week_04/java/WordLadder.java @@ -0,0 +1,69 @@ +import java.util.*; +import java.util.zip.CheckedOutputStream; + +public class WordLadder { + public static int ladderLength(String beginWord, String endWord, List wordList) { + if(beginWord.isEmpty()||endWord.isEmpty()||!wordList.contains(endWord)) + return 0; + + Set wordSet = new HashSet<>(wordList); //set判断contains 优于List 很多 + wordSet.remove(beginWord); + Queue queue = new LinkedList<>(); + queue.offer(beginWord); + Set visitedSet = new HashSet<>(); + visitedSet.add(beginWord); + int count = 0; + while(!queue.isEmpty()){ + System.out.println("======:"+count); + int curSize = queue.size(); // 确定当前轮次处理值的个数 + count++; + for(int i=0;i visitedSet, Queue queue, Set wordList){ + char[] chars = curWord.toCharArray(); + for(int i=0;i wordList = Arrays.asList("hot","dot","dog","lot","log","cog"); +// System.out.println(ladderLength("hit", "cog", wordList)); +// List wordList = Arrays.asList("a","b","c"); +// System.out.println(ladderLength("a", "c", wordList)); + List wordList = Arrays.asList("slit","bunk","wars","ping","viva","wynn","wows","irks","gang","pool","mock","fort","heel","send","ship","cols","alec","foal","nabs","gaze","giza","mays","dogs","karo","cums","jedi","webb","lend","mire","jose","catt","grow","toss","magi","leis","bead","kara","hoof","than","ires","baas","vein","kari","riga","oars","gags","thug","yawn","wive","view","germ","flab","july","tuck","rory","bean","feed","rhee","jeez","gobs","lath","desk","yoko","cute","zeus","thus","dims","link","dirt","mara","disc","limy","lewd","maud","duly","elsa","hart","rays","rues","camp","lack","okra","tome","math","plug","monk","orly","friz","hogs","yoda","poop","tick","plod","cloy","pees","imps","lead","pope","mall","frey","been","plea","poll","male","teak","soho","glob","bell","mary","hail","scan","yips","like","mull","kory","odor","byte","kaye","word","honk","asks","slid","hopi","toke","gore","flew","tins","mown","oise","hall","vega","sing","fool","boat","bobs","lain","soft","hard","rots","sees","apex","chan","told","woos","unit","scow","gilt","beef","jars","tyre","imus","neon","soap","dabs","rein","ovid","hose","husk","loll","asia","cope","tail","hazy","clad","lash","sags","moll","eddy","fuel","lift","flog","land","sigh","saks","sail","hook","visa","tier","maws","roeg","gila","eyes","noah","hypo","tore","eggs","rove","chap","room","wait","lurk","race","host","dada","lola","gabs","sobs","joel","keck","axed","mead","gust","laid","ends","oort","nose","peer","kept","abet","iran","mick","dead","hags","tens","gown","sick","odis","miro","bill","fawn","sumo","kilt","huge","ores","oran","flag","tost","seth","sift","poet","reds","pips","cape","togo","wale","limn","toll","ploy","inns","snag","hoes","jerk","flux","fido","zane","arab","gamy","raze","lank","hurt","rail","hind","hoot","dogy","away","pest","hoed","pose","lose","pole","alva","dino","kind","clan","dips","soup","veto","edna","damp","gush","amen","wits","pubs","fuzz","cash","pine","trod","gunk","nude","lost","rite","cory","walt","mica","cart","avow","wind","book","leon","life","bang","draw","leek","skis","dram","ripe","mine","urea","tiff","over","gale","weir","defy","norm","tull","whiz","gill","ward","crag","when","mill","firs","sans","flue","reid","ekes","jain","mutt","hems","laps","piss","pall","rowe","prey","cull","knew","size","wets","hurl","wont","suva","girt","prys","prow","warn","naps","gong","thru","livy","boar","sade","amok","vice","slat","emir","jade","karl","loyd","cerf","bess","loss","rums","lats","bode","subs","muss","maim","kits","thin","york","punt","gays","alpo","aids","drag","eras","mats","pyre","clot","step","oath","lout","wary","carp","hums","tang","pout","whip","fled","omar","such","kano","jake","stan","loop","fuss","mini","byrd","exit","fizz","lire","emil","prop","noes","awed","gift","soli","sale","gage","orin","slur","limp","saar","arks","mast","gnat","port","into","geed","pave","awls","cent","cunt","full","dint","hank","mate","coin","tars","scud","veer","coax","bops","uris","loom","shod","crib","lids","drys","fish","edit","dick","erna","else","hahs","alga","moho","wire","fora","tums","ruth","bets","duns","mold","mush","swop","ruby","bolt","nave","kite","ahem","brad","tern","nips","whew","bait","ooze","gino","yuck","drum","shoe","lobe","dusk","cult","paws","anew","dado","nook","half","lams","rich","cato","java","kemp","vain","fees","sham","auks","gish","fire","elam","salt","sour","loth","whit","yogi","shes","scam","yous","lucy","inez","geld","whig","thee","kelp","loaf","harm","tomb","ever","airs","page","laud","stun","paid","goop","cobs","judy","grab","doha","crew","item","fogs","tong","blip","vest","bran","wend","bawl","feel","jets","mixt","tell","dire","devi","milo","deng","yews","weak","mark","doug","fare","rigs","poke","hies","sian","suez","quip","kens","lass","zips","elva","brat","cosy","teri","hull","spun","russ","pupa","weed","pulp","main","grim","hone","cord","barf","olav","gaps","rote","wilt","lars","roll","balm","jana","give","eire","faun","suck","kegs","nita","weer","tush","spry","loge","nays","heir","dope","roar","peep","nags","ates","bane","seas","sign","fred","they","lien","kiev","fops","said","lawn","lind","miff","mass","trig","sins","furl","ruin","sent","cray","maya","clog","puns","silk","axis","grog","jots","dyer","mope","rand","vend","keen","chou","dose","rain","eats","sped","maui","evan","time","todd","skit","lief","sops","outs","moot","faze","biro","gook","fill","oval","skew","veil","born","slob","hyde","twin","eloy","beat","ergs","sure","kobe","eggo","hens","jive","flax","mons","dunk","yest","begs","dial","lodz","burp","pile","much","dock","rene","sago","racy","have","yalu","glow","move","peps","hods","kins","salk","hand","cons","dare","myra","sega","type","mari","pelt","hula","gulf","jugs","flay","fest","spat","toms","zeno","taps","deny","swag","afro","baud","jabs","smut","egos","lara","toes","song","fray","luis","brut","olen","mere","ruff","slum","glad","buds","silt","rued","gelt","hive","teem","ides","sink","ands","wisp","omen","lyre","yuks","curb","loam","darn","liar","pugs","pane","carl","sang","scar","zeds","claw","berg","hits","mile","lite","khan","erik","slug","loon","dena","ruse","talk","tusk","gaol","tads","beds","sock","howe","gave","snob","ahab","part","meir","jell","stir","tels","spit","hash","omit","jinx","lyra","puck","laue","beep","eros","owed","cede","brew","slue","mitt","jest","lynx","wads","gena","dank","volt","gray","pony","veld","bask","fens","argo","work","taxi","afar","boon","lube","pass","lazy","mist","blot","mach","poky","rams","sits","rend","dome","pray","duck","hers","lure","keep","gory","chat","runt","jams","lays","posy","bats","hoff","rock","keri","raul","yves","lama","ramp","vote","jody","pock","gist","sass","iago","coos","rank","lowe","vows","koch","taco","jinn","juno","rape","band","aces","goal","huck","lila","tuft","swan","blab","leda","gems","hide","tack","porn","scum","frat","plum","duds","shad","arms","pare","chin","gain","knee","foot","line","dove","vera","jays","fund","reno","skid","boys","corn","gwyn","sash","weld","ruiz","dior","jess","leaf","pars","cote","zing","scat","nice","dart","only","owls","hike","trey","whys","ding","klan","ross","barb","ants","lean","dopy","hock","tour","grip","aldo","whim","prom","rear","dins","duff","dell","loch","lava","sung","yank","thar","curl","venn","blow","pomp","heat","trap","dali","nets","seen","gash","twig","dads","emmy","rhea","navy","haws","mite","bows","alas","ives","play","soon","doll","chum","ajar","foam","call","puke","kris","wily","came","ales","reef","raid","diet","prod","prut","loot","soar","coed","celt","seam","dray","lump","jags","nods","sole","kink","peso","howl","cost","tsar","uric","sore","woes","sewn","sake","cask","caps","burl","tame","bulk","neva","from","meet","webs","spar","fuck","buoy","wept","west","dual","pica","sold","seed","gads","riff","neck","deed","rudy","drop","vale","flit","romp","peak","jape","jews","fain","dens","hugo","elba","mink","town","clam","feud","fern","dung","newt","mime","deem","inti","gigs","sosa","lope","lard","cara","smug","lego","flex","doth","paar","moon","wren","tale","kant","eels","muck","toga","zens","lops","duet","coil","gall","teal","glib","muir","ails","boer","them","rake","conn","neat","frog","trip","coma","must","mono","lira","craw","sled","wear","toby","reel","hips","nate","pump","mont","died","moss","lair","jibe","oils","pied","hobs","cads","haze","muse","cogs","figs","cues","roes","whet","boru","cozy","amos","tans","news","hake","cots","boas","tutu","wavy","pipe","typo","albs","boom","dyke","wail","woke","ware","rita","fail","slab","owes","jane","rack","hell","lags","mend","mask","hume","wane","acne","team","holy","runs","exes","dole","trim","zola","trek","puma","wacs","veep","yaps","sums","lush","tubs","most","witt","bong","rule","hear","awry","sots","nils","bash","gasp","inch","pens","fies","juts","pate","vine","zulu","this","bare","veal","josh","reek","ours","cowl","club","farm","teat","coat","dish","fore","weft","exam","vlad","floe","beak","lane","ella","warp","goth","ming","pits","rent","tito","wish","amps","says","hawk","ways","punk","nark","cagy","east","paul","bose","solo","teed","text","hews","snip","lips","emit","orgy","icon","tuna","soul","kurd","clod","calk","aunt","bake","copy","acid","duse","kiln","spec","fans","bani","irma","pads","batu","logo","pack","oder","atop","funk","gide","bede","bibs","taut","guns","dana","puff","lyme","flat","lake","june","sets","gull","hops","earn","clip","fell","kama","seal","diaz","cite","chew","cuba","bury","yard","bank","byes","apia","cree","nosh","judo","walk","tape","taro","boot","cods","lade","cong","deft","slim","jeri","rile","park","aeon","fact","slow","goff","cane","earp","tart","does","acts","hope","cant","buts","shin","dude","ergo","mode","gene","lept","chen","beta","eden","pang","saab","fang","whir","cove","perk","fads","rugs","herb","putt","nous","vane","corm","stay","bids","vela","roof","isms","sics","gone","swum","wiry","cram","rink","pert","heap","sikh","dais","cell","peel","nuke","buss","rasp","none","slut","bent","dams","serb","dork","bays","kale","cora","wake","welt","rind","trot","sloe","pity","rout","eves","fats","furs","pogo","beth","hued","edam","iamb","glee","lute","keel","airy","easy","tire","rube","bogy","sine","chop","rood","elbe","mike","garb","jill","gaul","chit","dons","bars","ride","beck","toad","make","head","suds","pike","snot","swat","peed","same","gaza","lent","gait","gael","elks","hang","nerf","rosy","shut","glop","pain","dion","deaf","hero","doer","wost","wage","wash","pats","narc","ions","dice","quay","vied","eons","case","pour","urns","reva","rags","aden","bone","rang","aura","iraq","toot","rome","hals","megs","pond","john","yeps","pawl","warm","bird","tint","jowl","gibe","come","hold","pail","wipe","bike","rips","eery","kent","hims","inks","fink","mott","ices","macy","serf","keys","tarp","cops","sods","feet","tear","benz","buys","colo","boil","sews","enos","watt","pull","brag","cork","save","mint","feat","jamb","rubs","roxy","toys","nosy","yowl","tamp","lobs","foul","doom","sown","pigs","hemp","fame","boor","cube","tops","loco","lads","eyre","alta","aged","flop","pram","lesa","sawn","plow","aral","load","lied","pled","boob","bert","rows","zits","rick","hint","dido","fist","marc","wuss","node","smog","nora","shim","glut","bale","perl","what","tort","meek","brie","bind","cake","psst","dour","jove","tree","chip","stud","thou","mobs","sows","opts","diva","perm","wise","cuds","sols","alan","mild","pure","gail","wins","offs","nile","yelp","minn","tors","tran","homy","sadr","erse","nero","scab","finn","mich","turd","then","poem","noun","oxus","brow","door","saws","eben","wart","wand","rosa","left","lina","cabs","rapt","olin","suet","kalb","mans","dawn","riel","temp","chug","peal","drew","null","hath","many","took","fond","gate","sate","leak","zany","vans","mart","hess","home","long","dirk","bile","lace","moog","axes","zone","fork","duct","rico","rife","deep","tiny","hugh","bilk","waft","swig","pans","with","kern","busy","film","lulu","king","lord","veda","tray","legs","soot","ells","wasp","hunt","earl","ouch","diem","yell","pegs","blvd","polk","soda","zorn","liza","slop","week","kill","rusk","eric","sump","haul","rims","crop","blob","face","bins","read","care","pele","ritz","beau","golf","drip","dike","stab","jibs","hove","junk","hoax","tats","fief","quad","peat","ream","hats","root","flak","grit","clap","pugh","bosh","lock","mute","crow","iced","lisa","bela","fems","oxes","vies","gybe","huff","bull","cuss","sunk","pups","fobs","turf","sect","atom","debt","sane","writ","anon","mayo","aria","seer","thor","brim","gawk","jack","jazz","menu","yolk","surf","libs","lets","bans","toil","open","aced","poor","mess","wham","fran","gina","dote","love","mood","pale","reps","ines","shot","alar","twit","site","dill","yoga","sear","vamp","abel","lieu","cuff","orbs","rose","tank","gape","guam","adar","vole","your","dean","dear","hebe","crab","hump","mole","vase","rode","dash","sera","balk","lela","inca","gaea","bush","loud","pies","aide","blew","mien","side","kerr","ring","tess","prep","rant","lugs","hobo","joke","odds","yule","aida","true","pone","lode","nona","weep","coda","elmo","skim","wink","bras","pier","bung","pets","tabs","ryan","jock","body","sofa","joey","zion","mace","kick","vile","leno","bali","fart","that","redo","ills","jogs","pent","drub","slaw","tide","lena","seep","gyps","wave","amid","fear","ties","flan","wimp","kali","shun","crap","sage","rune","logs","cain","digs","abut","obit","paps","rids","fair","hack","huns","road","caws","curt","jute","fisk","fowl","duty","holt","miss","rude","vito","baal","ural","mann","mind","belt","clem","last","musk","roam","abed","days","bore","fuze","fall","pict","dump","dies","fiat","vent","pork","eyed","docs","rive","spas","rope","ariz","tout","game","jump","blur","anti","lisp","turn","sand","food","moos","hoop","saul","arch","fury","rise","diss","hubs","burs","grid","ilks","suns","flea","soil","lung","want","nola","fins","thud","kidd","juan","heps","nape","rash","burt","bump","tots","brit","mums","bole","shah","tees","skip","limb","umps","ache","arcs","raft","halo","luce","bahs","leta","conk","duos","siva","went","peek","sulk","reap","free","dubs","lang","toto","hasp","ball","rats","nair","myst","wang","snug","nash","laos","ante","opal","tina","pore","bite","haas","myth","yugo","foci","dent","bade","pear","mods","auto","shop","etch","lyly","curs","aron","slew","tyro","sack","wade","clio","gyro","butt","icky","char","itch","halt","gals","yang","tend","pact","bees","suit","puny","hows","nina","brno","oops","lick","sons","kilo","bust","nome","mona","dull","join","hour","papa","stag","bern","wove","lull","slip","laze","roil","alto","bath","buck","alma","anus","evil","dumb","oreo","rare","near","cure","isis","hill","kyle","pace","comb","nits","flip","clop","mort","thea","wall","kiel","judd","coop","dave","very","amie","blah","flub","talc","bold","fogy","idea","prof","horn","shoo","aped","pins","helm","wees","beer","womb","clue","alba","aloe","fine","bard","limo","shaw","pint","swim","dust","indy","hale","cats","troy","wens","luke","vern","deli","both","brig","daub","sara","sued","bier","noel","olga","dupe","look","pisa","knox","murk","dame","matt","gold","jame","toge","luck","peck","tass","calf","pill","wore","wadi","thur","parr","maul","tzar","ones","lees","dark","fake","bast","zoom","here","moro","wine","bums","cows","jean","palm","fume","plop","help","tuba","leap","cans","back","avid","lice","lust","polo","dory","stew","kate","rama","coke","bled","mugs","ajax","arts","drug","pena","cody","hole","sean","deck","guts","kong","bate","pitt","como","lyle","siam","rook","baby","jigs","bret","bark","lori","reba","sups","made","buzz","gnaw","alps","clay","post","viol","dina","card","lana","doff","yups","tons","live","kids","pair","yawl","name","oven","sirs","gyms","prig","down","leos","noon","nibs","cook","safe","cobb","raja","awes","sari","nerd","fold","lots","pete","deal","bias","zeal","girl","rage","cool","gout","whey","soak","thaw","bear","wing","nagy","well","oink","sven","kurt","etna","held","wood","high","feta","twee","ford","cave","knot","tory","ibis","yaks","vets","foxy","sank","cone","pius","tall","seem","wool","flap","gird","lore","coot","mewl","sere","real","puts","sell","nuts","foil","lilt","saga","heft","dyed","goat","spew","daze","frye","adds","glen","tojo","pixy","gobi","stop","tile","hiss","shed","hahn","baku","ahas","sill","swap","also","carr","manx","lime","debs","moat","eked","bola","pods","coon","lacy","tube","minx","buff","pres","clew","gaff","flee","burn","whom","cola","fret","purl","wick","wigs","donn","guys","toni","oxen","wite","vial","spam","huts","vats","lima","core","eula","thad","peon","erie","oats","boyd","cued","olaf","tams","secs","urey","wile","penn","bred","rill","vary","sues","mail","feds","aves","code","beam","reed","neil","hark","pols","gris","gods","mesa","test","coup","heed","dora","hied","tune","doze","pews","oaks","bloc","tips","maid","goof","four","woof","silo","bray","zest","kiss","yong","file","hilt","iris","tuns","lily","ears","pant","jury","taft","data","gild","pick","kook","colt","bohr","anal","asps","babe","bach","mash","biko","bowl","huey","jilt","goes","guff","bend","nike","tami","gosh","tike","gees","urge","path","bony","jude","lynn","lois","teas","dunn","elul","bonn","moms","bugs","slay","yeah","loan","hulk","lows","damn","nell","jung","avis","mane","waco","loin","knob","tyke","anna","hire","luau","tidy","nuns","pots","quid","exec","hans","hera","hush","shag","scot","moan","wald","ursa","lorn","hunk","loft","yore","alum","mows","slog","emma","spud","rice","worn","erma","need","bags","lark","kirk","pooh","dyes","area","dime","luvs","foch","refs","cast","alit","tugs","even","role","toed","caph","nigh","sony","bide","robs","folk","daft","past","blue","flaw","sana","fits","barr","riot","dots","lamp","cock","fibs","harp","tent","hate","mali","togs","gear","tues","bass","pros","numb","emus","hare","fate","wife","mean","pink","dune","ares","dine","oily","tony","czar","spay","push","glum","till","moth","glue","dive","scad","pops","woks","andy","leah","cusp","hair","alex","vibe","bulb","boll","firm","joys","tara","cole","levy","owen","chow","rump","jail","lapp","beet","slap","kith","more","maps","bond","hick","opus","rust","wist","shat","phil","snow","lott","lora","cary","mote","rift","oust","klee","goad","pith","heep","lupe","ivan","mimi","bald","fuse","cuts","lens","leer","eyry","know","razz","tare","pals","geek","greg","teen","clef","wags","weal","each","haft","nova","waif","rate","katy","yale","dale","leas","axum","quiz","pawn","fend","capt","laws","city","chad","coal","nail","zaps","sort","loci","less","spur","note","foes","fags","gulp","snap","bogs","wrap","dane","melt","ease","felt","shea","calm","star","swam","aery","year","plan","odin","curd","mira","mops","shit","davy","apes","inky","hues","lome","bits","vila","show","best","mice","gins","next","roan","ymir","mars","oman","wild","heal","plus","erin","rave","robe","fast","hutu","aver","jodi","alms","yams","zero","revs","wean","chic","self","jeep","jobs","waxy","duel","seek","spot","raps","pimp","adan","slam","tool","morn","futz","ewes","errs","knit","rung","kans","muff","huhs","tows","lest","meal","azov","gnus","agar","sips","sway","otis","tone","tate","epic","trio","tics","fade","lear","owns","robt","weds","five","lyon","terr","arno","mama","grey","disk","sept","sire","bart","saps","whoa","turk","stow","pyle","joni","zinc","negs","task","leif","ribs","malt","nine","bunt","grin","dona","nope","hams","some","molt","smit","sacs","joan","slav","lady","base","heck","list","take","herd","will","nubs","burg","hugs","peru","coif","zoos","nick","idol","levi","grub","roth","adam","elma","tags","tote","yaws","cali","mete","lula","cubs","prim","luna","jolt","span","pita","dodo","puss","deer","term","dolt","goon","gary","yarn","aims","just","rena","tine","cyst","meld","loki","wong","were","hung","maze","arid","cars","wolf","marx","faye","eave","raga","flow","neal","lone","anne","cage","tied","tilt","soto","opel","date","buns","dorm","kane","akin","ewer","drab","thai","jeer","grad","berm","rods","saki","grus","vast","late","lint","mule","risk","labs","snit","gala","find","spin","ired","slot","oafs","lies","mews","wino","milk","bout","onus","tram","jaws","peas","cleo","seat","gums","cold","vang","dewy","hood","rush","mack","yuan","odes","boos","jami","mare","plot","swab","borg","hays","form","mesh","mani","fife","good","gram","lion","myna","moor","skin","posh","burr","rime","done","ruts","pays","stem","ting","arty","slag","iron","ayes","stub","oral","gets","chid","yens","snub","ages","wide","bail","verb","lamb","bomb","army","yoke","gels","tits","bork","mils","nary","barn","hype","odom","avon","hewn","rios","cams","tact","boss","oleo","duke","eris","gwen","elms","deon","sims","quit","nest","font","dues","yeas","zeta","bevy","gent","torn","cups","worm","baum","axon","purr","vise","grew","govs","meat","chef","rest","lame"); + System.out.println(ladderLength("sand", "acne", wordList)); + + Queue q = new PriorityQueue<>((o1,o2)-> o2-o1); + + + } + +} diff --git a/Week_05/java/LastStone.java b/Week_05/java/LastStone.java new file mode 100644 index 00000000..e33f10f9 --- /dev/null +++ b/Week_05/java/LastStone.java @@ -0,0 +1,57 @@ +import java.util.Arrays; +import java.util.Comparator; +import java.util.PriorityQueue; + +public class LastStone { + + public static int lastStoneWeight(int[] stones) { + Arrays.sort(stones); + while(stones.length>=2){ + int len = stones.length; + if(stones[len-1]==stones[len-2]) { + stones = Arrays.copyOf(stones, len - 2); + }else { + stones[len-2] = stones[len-1] - stones[len-2]; + stones = Arrays.copyOf(stones, len - 1); + } + Arrays.sort(stones); + System.out.println(Arrays.toString(stones)); + } + if(stones.length==1) return stones[0]; + else return 0; + + } + + public static int lastStoneWeight1(int[] stones) { + +// Comparator comparator = new Comparator() { +// @Override +// public int compare(Integer o1, Integer o2) { +// return (o2 - o1); +// } +// }; + PriorityQueue pq = new PriorityQueue<>( + (o1, o2) -> o2-o1 + ); + for(Integer stone: stones){ + pq.add(stone); + } + while(pq.size()>1){ + int last1 = pq.poll(); + int last2 = pq.poll(); + if(last1!=last2)pq.add(last1-last2); + } + if(pq.size()==1) return pq.poll(); + return 0; + } + + + + + + public static void main(String[] args) { + int[] stones = new int[]{2,7,4,1,8,1}; + int i = lastStoneWeight1(stones); + System.out.println(i); + } +} diff --git a/Week_05/java/LongestCommonSubsequence.java b/Week_05/java/LongestCommonSubsequence.java new file mode 100644 index 00000000..935d3acc --- /dev/null +++ b/Week_05/java/LongestCommonSubsequence.java @@ -0,0 +1,23 @@ +public class LongestCommonSubsequence { + //1143. 最长公共子序列 + public static int longestCommonSubsequence(String text1, String text2) { + int m = text1.length(); + int n = text2.length(); + int[][] dp = new int[m+1][n+1]; + for(int i =0;inums[j]){ + dp[i]=Math.max(dp[i],dp[j]+1); + } + } + rst = Math.max(rst, dp[i]); + + } + return rst; + + + } + + public static void main(String[] args) { + int[] nums = new int[]{1,3,6,7,9,4,10,5,6}; + LongestIncreasingSubsequence obj = new LongestIncreasingSubsequence(); + System.out.println(obj.lengthOfLIS(nums)); + + } + + +} diff --git a/Week_05/java/Mininum.java b/Week_05/java/Mininum.java new file mode 100644 index 00000000..70fa4d37 --- /dev/null +++ b/Week_05/java/Mininum.java @@ -0,0 +1,47 @@ +import java.util.*; + +public class Mininum { + /** + * 433. 最小基因变化 //广度优先遍历 + */ + public int minMutation(String start, String end, String[] bank) { + Set bankSet = new HashSet(Arrays.asList(bank)); + if(!bankSet.contains(end)) return -1; + Queue queue = new LinkedList<>(); + queue.offer(start); + Set visited = new HashSet<>(); + visited.add(start); + int count = 1; + while(!queue.isEmpty()){ + int len = queue.size(); + for(int i=0;i bankSet, Queue queue, Set visited){ + char[] chars = curStr.toCharArray(); + char[] charBank = new char[]{'A','C','G','T'}; + for(int i=0;i() { + @Override + public int compare(int[] o1, int[] o2) { + return o1[1]-o2[1]; + } + }); + + if(intervals.length==0) return 0; + int count = 1; + int x_end = intervals[0][1]; + for(int i =1;i=x_end){ + count++; + x_end = intervals[i][1]; + } + } + return intervals.length-count; + } + + public static void main(String[] args) { + + int[][] secArray = new int[][]{{1,2}, {2,3}}; +// int[][] secArray = new int[][]{{1,100},{11,22},{1,11},{2,12}}; + int i = eraseOverlapIntervals(secArray); + System.out.println(i); + } + + +} diff --git a/Week_05/java/Struct.java b/Week_05/java/Struct.java new file mode 100644 index 00000000..92a96c04 --- /dev/null +++ b/Week_05/java/Struct.java @@ -0,0 +1,18 @@ +import java.util.*; + +public class Struct { + public static void main(String[] args) { + + String[] strArray = new String[3]; + List strList = new ArrayList<>(); + Map map = new HashMap<>(); + Set set = new HashSet<>(); + Stack stack = new Stack<>(); + Queue queue = new LinkedList<>(); + //PriorityQueue 优先队列 java用其实现大小根堆 + PriorityQueue priorityQueue = new PriorityQueue<>( + (o1, o2) -> (o2-o1) //升序排列 + ); + + } +} diff --git a/Week_05/java/UniquePaths.java b/Week_05/java/UniquePaths.java new file mode 100644 index 00000000..27ba9f6a --- /dev/null +++ b/Week_05/java/UniquePaths.java @@ -0,0 +1,16 @@ +public class UniquePaths { + //62. 不同路径 + public int uniquePaths(int m, int n) { + int[][] dp = new int[m][n]; + for(int i=0;i deque = new LinkedList<>(); + int len = nums.length; + int[] rst = new int[len-k+1]; + int index = 0; + for(int i=0; i=coin && store[i-coin] 然后回溯减少较大面值的币 + * + */ + public static int min=Integer.MAX_VALUE; + public static int coinChange1(int[] coins, int amount) { + if(amount == 0) return 0; + Arrays.sort(coins); + coinChangeSun(coins, amount, coins.length-1,0); + return min==Integer.MAX_VALUE ? -1 : min; + } + public static void coinChangeSun(int[] coins, int amount, int coinIndex, int coinNum){ + if(amount==0) + min = Math.min(min, coinNum); + if(coinIndex<0) + return; + + for(int i=amount/coins[coinIndex]; i>=0 && i+coinNum{ +// int x; +// int y; +// int step; +// +// @Override +// public int compareTo(Node o) { +// return this.step-o.step; +// } +//} + +/** + * 1091. 二进制矩阵中的最短路径 + * BFS 慢 + */ +public class ShortestPathInBinaryMatrix { + public static int shortestPathBinaryMatrix(int[][] grid) { +// PriorityQueue pq = new PriorityQueue<>(); + int m = grid.length; + int n = grid[0].length; + if(grid[0][0]==1||grid[m-1][n-1]==1) return -1; + if(m==1&&n==1) return 1; + + int[][] directions = {{1,1},{-1,1},{1,-1},{-1,-1},{0,1},{0,-1},{1,0},{-1,0}}; + Queue queue = new LinkedList<>(); + grid[0][0]=1; + + queue.offer(new int[]{0,0}); + int pathLen = 1; + while (!queue.isEmpty()){ + int size = queue.size(); + while(size-->0) { + int[] xy = queue.poll(); + for (int[] d : directions) { + int nextX = xy[0] + d[0]; + int nextY = xy[1] + d[1]; + if (nextX < 0 || nextX >= m || nextY < 0 || nextY >= n) + continue; + if (grid[nextX][nextY] != 1) { + grid[nextX][nextY] = 1; + System.out.println(nextX + ":" + nextY); + queue.offer(new int[]{nextX, nextY}); + } + if (nextX == m - 1 && nextY == n - 1) { + return pathLen + 1; + } + } + } + pathLen++; + } + return -1; + } + + public static void main(String[] args) { +// int[][] grid = new int[][]{{0,0,0},{1,1,0},{1,1,0}}; +// int[][] grid = new int[][]{{0,0,0},{1,1,0},{1,1,0}}; + int[][] grid = new int[][]{{0}}; + System.out.println(shortestPathBinaryMatrix(grid)); + } + +} +//""" +//000 +//110 +//110 +//""" diff --git a/Week_07/java/WordLadder1.java b/Week_07/java/WordLadder1.java new file mode 100644 index 00000000..e2cc1e57 --- /dev/null +++ b/Week_07/java/WordLadder1.java @@ -0,0 +1,110 @@ +import java.util.*; + +/** + * 单词接龙 + */ +public class WordLadder1 { + /** + * BFS + */ + public int ladderLength(String beginWord, String endWord, List wordList) { + + Set wordSet = new HashSet<>(wordList); + if (!wordList.contains(endWord)) return 0; + + Queue queue = new LinkedList<>(); + queue.offer(beginWord); + Set visitedSet = new HashSet<>(); + visitedSet.add(beginWord); + int count=1; + while(!queue.isEmpty()){ + int len = queue.size(); + for(int i=0;i wordSet, Queue queue, Set visitedSet) { + char[] curChars = curStr.toCharArray(); + for(int i = 0;i wordList) { + Set wordSet = new HashSet<>(wordList); + if(!wordSet.contains(endWord)) + return 0; + Set beginSet = new HashSet<>(); + Set endSet = new HashSet<>(); + Set visitedSet = new HashSet<>(); + int count = 1; + beginSet.add(beginWord); + endSet.add(endWord); + while(!beginSet.isEmpty()||!endSet.isEmpty()){ + if(beginSet.size()>endSet.size()||beginSet.isEmpty()){ + Set tmpset = beginSet; + beginSet = endSet; + endSet = tmpset; + } + + Set nextBeginSet = new HashSet<>(); + if(ladderLengthSub2(wordSet, beginSet,endSet,visitedSet, nextBeginSet)) + return count+1; + beginSet = nextBeginSet; + count++; + } + return 0; + } + + public static boolean ladderLengthSub2(Set wordSet, Set beginSet, Set endSet, Set visitedSet, Set nextBeginSet) { + for(String curStr:beginSet) { + char[] curChars = curStr.toCharArray(); + for(int i = 0;i wordList = Arrays.asList("hot", "dot", "dog", "lot", "log"); + List wordList = Arrays.asList("hot", "dog"); + System.out.println(ladderLength2("hot", "dog", wordList)); + } +} diff --git a/Week_07/java/WordLadder2.java b/Week_07/java/WordLadder2.java new file mode 100644 index 00000000..b2a5cc01 --- /dev/null +++ b/Week_07/java/WordLadder2.java @@ -0,0 +1,110 @@ +import java.util.*; + +/** + * 单词接龙 + */ +public class WordLadder2 { + /** + * BFS + */ + public int ladderLength(String beginWord, String endWord, List wordList) { + + Set wordSet = new HashSet<>(wordList); + if (!wordList.contains(endWord)) return 0; + + Queue queue = new LinkedList<>(); + queue.offer(beginWord); + Set visitedSet = new HashSet<>(); + visitedSet.add(beginWord); + int count=1; + while(!queue.isEmpty()){ + int len = queue.size(); + for(int i=0;i wordSet, Queue queue, Set visitedSet) { + char[] curChars = curStr.toCharArray(); + for(int i = 0;i wordList) { + Set wordSet = new HashSet<>(wordList); + if(!wordSet.contains(endWord)) + return 0; + Set beginSet = new HashSet<>(); + Set endSet = new HashSet<>(); + Set visitedSet = new HashSet<>(); + int count = 1; + beginSet.add(beginWord); + endSet.add(endWord); + while(!beginSet.isEmpty()||!endSet.isEmpty()){ + if(beginSet.size()>endSet.size()||beginSet.isEmpty()){ + Set tmpset = beginSet; + beginSet = endSet; + endSet = tmpset; + } + + Set nextBeginSet = new HashSet<>(); + if(ladderLengthSub2(wordSet, beginSet,endSet,visitedSet, nextBeginSet)) + return count+1; + beginSet = nextBeginSet; + count++; + } + return 0; + } + + public static boolean ladderLengthSub2(Set wordSet, Set beginSet, Set endSet, Set visitedSet, Set nextBeginSet) { + for(String curStr:beginSet) { + char[] curChars = curStr.toCharArray(); + for(int i = 0;i wordList = Arrays.asList("hot", "dot", "dog", "lot", "log"); + List wordList = Arrays.asList("hot", "dog"); + System.out.println(ladderLength2("hot", "dog", wordList)); + } +} diff --git a/Week_07/java/WordSearchII.java b/Week_07/java/WordSearchII.java new file mode 100644 index 00000000..3dff8bfd --- /dev/null +++ b/Week_07/java/WordSearchII.java @@ -0,0 +1,165 @@ +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +class Trie { + public boolean isEnd; + public Trie[] next; + public String val; + + /** + * Initialize your data structure here. + */ + public Trie() { + isEnd = false; + next = new Trie[26]; + } + + /** + * Inserts a word into the trie. + * @return + */ + public void insert(String word) { + if (word == null || word.length() == 0) return ; + Trie curr = this; + char[] words = word.toCharArray(); + for (int i = 0; i < words.length; i++) { + int n = words[i] - 'a'; + if (curr.next[n] == null) curr.next[n] = new Trie(); + curr = curr.next[n]; + } + curr.isEnd = true; + curr.val = word; + } + + public boolean search(String word) { + Trie node = searchPrefix(word); + return node != null && node.isEnd; + } + + /** Returns if there is any word in the trie that starts with the given prefix. */ + public boolean startsWith(String prefix) { + Trie node = searchPrefix(prefix); + return node != null; + } + + private Trie searchPrefix(String word) { + Trie node = this; + char[] words = word.toCharArray(); + for (int i = 0;i < words.length;i++) { + node = node.next[words[i] - 'a']; + if (node == null) return null; + } + return node; + } +} + +public class WordSearchII { + Set ans = new HashSet<>(); + + /** + * 成功实现,速度很慢 + * @param board + * @param words + * @return + */ + public List findWords(char[][] board, String[] words) { + + Trie trie = new Trie(); + for(String word: words){ + trie.insert(word); + } + + int m = board.length; + int n = board[0].length; + for(int i=0;i(ans); + } + + public void findDfs(int i, int j, char[][] board, String singleRst, Trie trie){ + int [][] site = {{1,0},{0,1},{-1,0},{0,-1}}; + + if(i<0||i>=board.length||j<0||j>=board[0].length) return; + + char ch = board[i][j]; + if(ch=='@'||trie.next[ch-'a']==null) + return; + board[i][j] ='@'; + trie = trie.next[ch-'a']; +// singleRst = singleRst+ch; + if(trie.isEnd){ + ans.add(trie.val); +// return; //不能返回同组其他元素还需要遍历 + } + for(int[] index:site) { + findDfs(i+index[0],j+index[1], board, singleRst,trie); + } +// findDfs(i+1,j, board, singleRst+ch,trie); +// findDfs(i-1,j, board, singleRst+ch,trie); +// findDfs(i,j+1, board, singleRst+ch,trie); +// findDfs(i,j-1, board, singleRst+ch,trie); + board[i][j] = ch; + } + + + /** + * 可以实现 太慢了 + * @param board + * @param words + * @return + */ + public List findWords2(char[][] board, String[] words) { + Trie trie = new Trie(); + for (String word : words) { + trie.insert(word); + } + int m = board.length; + int n = board[0].length; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + dfs(board, "", i, j, trie); + } + } + return new ArrayList<>(ans); + } + + public void dfs(char[][] board, String str, int x, int y, Trie trie) { + if (x < 0 || x >= board.length || y < 0 || y >= board[0].length) return; + + str += board[x][y]; + if (board[x][y]=='@'||!trie.startsWith(str)) return; + + if (trie.search(str)) { + ans.add(str); + } + char ch = board[x][y]; + + board[x][y] ='@'; + dfs(board, str, x - 1, y, trie); + dfs(board, str, x + 1, y, trie); + dfs(board, str, x, y - 1, trie); + dfs(board, str, x, y + 1, trie); + board[x][y] = ch; + } + + + public static void main(String[] args) { + char[][] board = {{'o','a','a','n'},{'e','t','a','e'},{'i','h','k','r'},{'i','f','l','v'}}; + String[] words = {"oath","pea","eat","rain","hklf", "hf"}; + + +// char[][] board = {{'o','a','a','n'},{'e','t','a','e'},{'i','h','k','r'},{'i','f','l','v'}}; +// String[] words = {"oath","pea","eat","rain"}; +// char[][] board ={{'a'}}; +// String[] words ={"a"}; + WordSearchII wordSearchII = new WordSearchII(); + System.out.println(wordSearchII.findWords(board, words)); + + + } +} diff --git a/Week_08/java/RelativeSortArray.java b/Week_08/java/RelativeSortArray.java new file mode 100644 index 00000000..067d2d2d --- /dev/null +++ b/Week_08/java/RelativeSortArray.java @@ -0,0 +1,47 @@ +import java.util.*; + +public class RelativeSortArray { + /** + * 使用Map、List实现 + * @param arr1 + * @param arr2 + * @return + */ + public int[] relativeSortArray(int[] arr1, int[] arr2) { + Map arr1Map = new HashMap<>(); + for(int num: arr1){ + arr1Map.put(num,arr1Map.getOrDefault(num,0)+1); + } + List rst = new ArrayList<>(); + for(int num2: arr2){ + if(arr1Map.containsKey(num2)){ + for(int i=0;i rst2 = new ArrayList<>(); + for (Integer key : arr1Map.keySet()) { + for (int j = 0; j < arr1Map.get(key); j++) { + rst2.add(key); + } + } + rst2.sort(Integer::compareTo); + rst.addAll(rst2); + return rst.stream().mapToInt(i->i).toArray(); + } + + + + public static void main(String[] args) { + int[] arr1 = new int[]{2,3,1,3,2,4,6,7,9,2,19}; + int[] arr2 = new int[]{2,1,4,3,9,6}; + RelativeSortArray relativeSortArray = new RelativeSortArray(); + int[] ints = relativeSortArray.relativeSortArray(arr1, arr2); + for(int i :ints){ + System.out.println(i); + } + + } +} diff --git a/Week_08/java/ReversePairs.java b/Week_08/java/ReversePairs.java new file mode 100644 index 00000000..4144e52d --- /dev/null +++ b/Week_08/java/ReversePairs.java @@ -0,0 +1,42 @@ +public class ReversePairs { + /** + * 翻转对 + * @param nums + * @return + */ + public int reversePairs(int[] nums) { + return merger(nums, 0, nums.length-1); + } + + public int merger(int[] nums, int left, int right){ + if(left>=right) return 0; + int mid = left+(right-left)/2; + int count = merger(nums,left,mid) + merger(nums,mid+1,right); + int[] tmp = new int[right-left+1]; + int i = left, t=left, k=0; + for(int j = mid+1;j<=right;j++){ + while (i<=mid && nums[i]<=(long) 2*nums[j]) i++; //正着数会丢掉数据,所以选择算差 + while (t<=mid && nums[t]nums[j]){ + dp[i] = Math.max(dp[i],dp[j]+1); + } + } + rst = Math.max(rst,dp[i]); + } + + return rst; + } + + public static void main(String[] args) { + int[] nums = new int[]{1,3,6,7,9,4,10,5,6}; + LongestIncreasingSubsequence longestIncreasingSubsequence = new LongestIncreasingSubsequence(); + System.out.println(longestIncreasingSubsequence.lengthOfLIS(nums)); + } +} diff --git "a/Week_\346\257\225\344\270\232\346\200\273\347\273\223/README.md" b/Week_end/README.md similarity index 100% rename from "Week_\346\257\225\344\270\232\346\200\273\347\273\223/README.md" rename to Week_end/README.md diff --git a/Week_end/java/KthLargestElementInAnArray.java b/Week_end/java/KthLargestElementInAnArray.java new file mode 100644 index 00000000..edbe85dc --- /dev/null +++ b/Week_end/java/KthLargestElementInAnArray.java @@ -0,0 +1,49 @@ +import java.util.PriorityQueue; + +/** + * 第K大的数 + */ +public class KthLargestElementInAnArray { + public int findKthLargest(int[] nums, int k) { + int len = nums.length; + PriorityQueue maxHeap = new PriorityQueue<>(len, (a, b) -> b - a); + + for(int i=0;i map = new HashMap<>(); +// char[] chars = s.toCharArray(); + int max = 0; + int start=0; + for(int i=0;i> triangle) { + int size = triangle.size(); + int[][]dp = new int[size+1][size+1]; + for(int i=size-1;i>=0;i--){ + for(int j=0;j<=i;j++){ + dp[i][j] = Math.min(dp[i+1][j],dp[i+1][j+1])+triangle.get(i).get(j); + } + } + return dp[0][0]; + } + + public int minimumTotal2(List> triangle) { + int size = triangle.size(); + int[]dp = new int[size+1]; + for(int i=size-1;i>=0;i--){ + for(int j=0;j<=i;j++){ + dp[j] = Math.min(dp[j],dp[j+1])+triangle.get(i).get(j); + } + } + return dp[0]; + } +}