绳子覆盖的点
给定一个数组int[]points 代表点,再给一个绳子长度length=n,求绳子最多能覆盖多少个点。两端被覆盖被计算在内。
思路1:points排序,然后一个小贪心,绳子的右端压在一个点上(没必要压在两个点中间),然后根据绳子长度能算出来左端的点,用二分查points的位置
思路2:双指针滑动窗口,LR指针间的距离小于绳子长度时,R右移,否则L右移,记录最大间隔。
交换字符
一个数组只包含两种字符A和B,想让A全挪到左边,B全挪到右边,但只能在相邻字符间交换,至少需要多少次?
二叉树还原
private TreeNode build(String[] preArray, int preStart, int preEnd, String[] inArray, int inStart, int inEnd){if (preStart > preEnd || inStart > inEnd) return null;int index = 0 , rootVal = Integer.valueOf(preArray[preStart]);for (int i = 0; i < inArray.length; i++) {if (Integer.valueOf(inArray[i]) == rootVal){index = i;break;}}int inNumbers = index - inStart;TreeNode root = new TreeNode(rootVal);root.left = build(preArray,preStart+1,preStart+inNumbers,inArray,inStart,index-1);root.right = build(preArray,preStart+inNumbers+1,preEnd,inArray,index+1,inEnd);return root;}
