diff --git a/5.leetcode/src/com/fanxb/common/Q33.java b/5.leetcode/src/com/fanxb/common/Q33.java new file mode 100644 index 0000000..be42f69 --- /dev/null +++ b/5.leetcode/src/com/fanxb/common/Q33.java @@ -0,0 +1,53 @@ +package com.fanxb.common; + +public class Q33 { + + + public int search(int[] nums, int target) { + int n = nums.length; + if (n == 1) return nums[0] == target ? 0 : -1; + int l = 0, r = n - 1; + while (l < r) { + boolean s = nums[l] < nums[r]; + int m = (l + r) / 2; + if (nums[m] == target) { + return m; + } else { + if (nums[m] >= nums[0]) { + //说明m落在左边的升序 + if (nums[m] < target) { + if (l == m) l++; + else l = m; + } else { + if (!s && nums[l] > target) { + //说明target在右边的升序里 + if (l == m) l++; + else l = m; + } else { + r = m; + } + + } + } else { + //m落在右边的升序 + if (nums[m] > target) { + r = m; + } else { + if (s || nums[l] > target) { + //说明target在右边的升序里 + if (l == m) l++; + else l = m; + } else { + r = m; + } + } + } + } + } + return nums[l] == target ? l : -1; + } + + public static void main(String[] args) { + System.out.println(new Q33().search(new int[]{1, 3}, 0)); + } +} diff --git a/5.leetcode/src/com/fanxb/common/Q68.java b/5.leetcode/src/com/fanxb/common/Q68.java index 2df2943..ae2e305 100644 --- a/5.leetcode/src/com/fanxb/common/Q68.java +++ b/5.leetcode/src/com/fanxb/common/Q68.java @@ -1,10 +1,5 @@ package com.fanxb.common; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - /** * Created with IntelliJ IDEA * @@ -12,55 +7,30 @@ import java.util.List; * Date: 2020/6/11 9:56 */ public class Q68 { - public List fullJustify(String[] words, int maxWidth) { - List res = new ArrayList<>(); - List temp = new ArrayList<>(); - int size = words.length, lengthCount = 0, usedWidth = 0; - for (int i = 0; i < size; i++) { - lengthCount += words[i].length() + 1; - if (lengthCount > maxWidth + 1) { - //说明放不下了 - res.add(dealOne(temp, maxWidth, usedWidth, false)); - temp.clear(); - usedWidth = 0; - lengthCount = words[i].length() + 1; - } - temp.add(words[i]); - usedWidth += words[i].length(); - } - if (!temp.isEmpty()) { - res.add(dealOne(temp, maxWidth, usedWidth, true)); - } - return res; - } - - private String dealOne(List temp, int maxWidth, int usedWidth, boolean lastOne) { - StringBuilder res = new StringBuilder(); - res.append(temp.get(0)); - int size = temp.size(); - if (size == 1) return res.append(" ".repeat(maxWidth - usedWidth)).toString(); - if (lastOne) { - for (int i = 1; i < size; i++) res.append(' ').append(temp.get(i)); - return res.append(" ".repeat(maxWidth - res.length())).toString(); - } else { - //每个间隙的长度 - int everyWidth = (maxWidth - usedWidth) / (size - 1); - //前几个间隙需要加一个空格 - int needPlusCount = (maxWidth - usedWidth) % (size - 1); - for (int i = 1; i < size; i++) { - res.append(" ".repeat(everyWidth)); - if (needPlusCount > 0) { - res.append(' '); - needPlusCount--; + public int searchInsert(int[] nums, int target) { + int l = 0, r = nums.length - 1; + while (l < r) { + int m = (l + r) / 2; + if (nums[m] > target) { + if (r == m) { + l++; + } else { + r = m; + } + } else if (nums[m] == target) { + return m; + } else { + if (l == m) { + l++; + } else { + l = m; } - res.append(temp.get(i)); } } - return res.toString(); + return nums[l] < target ? l + 1 : l; } public static void main(String[] args) { - Q68 q68 = new Q68(); - System.out.println(q68.fullJustify(new String[]{"This", "is", "an", "example", "of", "text", "justification."}, 16).toString()); + System.out.println(new Q68().searchInsert(new int[]{1, 3, 5, 6}, 5)); } }