2018-06-15

Q1: leetcode 653
Q2: leetcode 252
Q3: sorted, no dup, calculate how many pairs of i and j s.t arr[i] + arr[j] == target?
Q4: sorted array, w/ duplicates. calculate how many pairs of i and j s.t arr[i] + arr[j] == target?
We only calculate dup once.[1 1 2 2] target = 3: return 1
Q5:sorted array, w/ duplicates. calculate how many pairs of i and j s.t arr[i] + arr[j] == target?
We calculate dup as different.[1 1 2 2] target = 3: return 4 [1a 1b 2a 2b] 1a2a; 1b 2a; 1a 2b;
Q6: leetcode 1 sorted
Q7: leetcode 1: not sorte
Q8:leetcode 66 array
Q9: leetcode 66 as linked list
Q10: String add "123" + "12" =>"135" o(1) space,

//Q8
class Solution {
    public int[] plusOne(int[] digits) {
      int n = digits.length;
      for (int i = n - 1; i >= 0; i--) {
        if (digits[i] != 9) {
          digits[i] += 1;
          return digits;
        }
        digits[i] = 0; //can we delete this? why not?
      }
      
      int[] results = new int[n + 1];
      results[0] = 1;
      return results;
    }
}
//Q9
class Solution {
    public Node plusOne(Node root) {
      if (helper(root)) {
        Node newN = new Node(1);
        newN.next = root;
        return newN;
      }
      return root;
    }
    
    private boolean helper(Node cur) {
      if (cur == null) {
          return true;        
      }
      
      // if son returns T, means need to carry 1

      if (helper(cur.next)) {
        if (cur.val != 9) {
          cur.val += 1;
          return false;
        }
        cur.val = 0;
        return true;
      }
      return false;
    }
}
//
//Q leetcode 1, not sorted
    public int[] twoSum(int[] nums, int target) {

        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            List<Integer> sameVal = map.getOrDefault(nums[i], new ArrayList());
            sameVal.add(i);
            map.put(nums[i], sameVal);
        }
        Arrays.sort(nums);
        int i = 0;
        
        int j = nums.length - 1;
        int[] result = new int[2];
        while (i < j) {
            int sum = nums[i] + nums[j];
            if (sum == target ) {
                List<Integer> sameVal = map.get(nums[i]);
                
                result[0] = sameVal.get(sameVal.size() - 1);
                sameVal.remove(sameVal.size() - 1);
                  List<Integer> sameVal2 = map.get(nums[j]);
                result[1] =sameVal2.get(sameVal2.size() - 1);
                 sameVal2.remove(sameVal2.size() - 1);
                return result;
            } else if (sum < target) {
                i++;
            } else {
                j--;
            }
        }
        return result;
    }

//Q
    public int[] twoSum(int[] nums, int target) {

        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            List<Integer> sameVal = map.getOrDefault(nums[i], new ArrayList());
            sameVal.add(i);
            map.put(nums[i], sameVal);
        }
        Arrays.sort(nums);
        int i = 0;
        
        int j = nums.length - 1;
        int[] result = new int[2];
        while (i < j) {
            int sum = nums[i] + nums[j];
            if (sum == target ) {
                List<Integer> sameVal = map.get(nums[i]);
                
                result[0] = sameVal.get(sameVal.size() - 1);
                sameVal.remove(sameVal.size() - 1);
                  List<Integer> sameVal2 = map.get(nums[j]);
                result[1] =sameVal2.get(sameVal2.size() - 1);
                 sameVal2.remove(sameVal2.size() - 1);
                return result;
            } else if (sum < target) {
                i++;
            } else {
                j--;
            }
        }
        return result;
    }|

//Q1
class Solution {
    public int[] twoSum(int[] nums, int target) {
        if (nums == null || nums.length == 0) {
            return null;
        }

        Map<Integer,Integer> map = new HashMap<>();
         int[] result = new int[2];
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target - nums[i])) {
                result[0] = map.get(target - nums[i]);
                result[1] = i;
                return result;
            } else {
                map.put(nums[i], i);
            }
        }
        return result;
}}

//
int i = 0; 
int j = n - 1;
int count = 0;
while (i < j) {
  int sum = arr[i] + arr[j];
  if (sum < target) {
    i++;
  } else (if sum > target) {
    j--;
  } else {

    if (arr[i] = arr[j]) {
      int num = j - i + 1;
      count += (num - 1) * num / 2;
    } else {
        int countI = 1;
        int countJ = 1;
          while (i + 1 < j && arr[i + 1] == arr[i]) {
        //while (i + 1 < n && arr[i + 1] == arr[i]) {
          i++; //容易漏
          countI++;
        }
          while (j - 1 > i    && arr[j - 1] == arr[i]) {
        //while (j - 1 >= 0 && arr[j - 1] == arr[i]) {
          j--;
          countJ++;
        }
    
      count += countI * countJ;
      i++; //容易漏
      j--;
    }
  }
}
return count;

//int i = 0; 
int j = n - 1;
int count = 0;
while (i < j) {
  int sum = arr[i] + arr[j];
  if (sum < target) {
    i++;
  } else (if sum > target) {
    j--;
  } else {
    count++;
    while (i + 1 < j && arr[i + 1] == arr[i]) {
    //while (i + 1 < n && arr[i + 1] == arr[i]) {
      i++;
    }
    i++;
    j--;
  }
}
//Q3
int i = 0; 
int j = n - 1;
int count = 0;
while (i < j) {
  int sum = arr[i] + arr[j];
  if (sum < target) {
    i++; //第一次写反了, j--
  } else (if sum > target) {
    j--;
  } else {
    count++;
    i++;
    j--;
  }
}

//Q:653
class Solution {
    public boolean findTarget(TreeNode root, int k) {
        Set<Integer> set = new HashSet<>();
        return helper(root, k, set);
    }
    
    private boolean helper(TreeNode root, int k, Set<Integer> set) {
        if (root == null) {
            return false;
        }
        if (set.contains(k - root.val)) {
            return true;
        }
        set.add(root.val);
        if (helper(root.left, k , set) || helper(root.right, k, set)) {
            return true;
        } 
        return false;
    }
}

//Q252
/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
class Solution {
    public boolean canAttendMeetings(Interval[] intervals) {
        if (intervals == null || intervals.length == 0) {
            return true;
        }
       Arrays.sort(intervals, new Comparator<Interval>(){
           @Override
            public int compare(Interval o1, Interval o2) {
                return Integer.compare(o1.start, o2.start);
            }
        });
        Interval pre = intervals[0];
        for (int i = 1; i < intervals.length; i++) {
            Interval next = intervals[i];
            if (next.start < pre.end) {
                return false;
            }
            pre.end = Math.max(pre.end, next.end);
        }
        
        return true;
    }
}


//Q10
int m = s1.size();
int n = s2.size();
int i = m - 1;
int j = n - 1;
StringBuilder sb = new StringBuilder();
int carry  = 0;
while(i >= 0 && j >= 0) {
  int tmp = carry + s1.charAt(i) + s1.charAt(j) - 2 * '0';
  int cur = tmp % 10;
  int carry = tmp >= 10 ? 1 : 0;
  sb.append(cur.toChar());
}
addRemaining(i, j);
return sb.toString().reverse();
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 白云翩翩舞,清风拂面来。繁花欲出彩,小径独徘徊。绿衫叶叶浓,彩蝶施粉黛。 登高远眺望,忧思浮心间。岁月易变迁,落叶...
    夏诺xn阅读 1,391评论 35 52
  • 很多时候,这个世界,不是非黑即白的。尤其是牵扯到感情的时候,很难分清楚孰是孰非。 有人说,兄弟姐妹是打断骨头连着筋...
    花开悄无声阅读 567评论 4 2
  • 最近是不是朋友圈上被莫名其妙的ysl星辰给刷屏了,特别是男生,几乎被刷的一头雾水,这YSL星辰到底是什么梗呢? 从...
    WingsBlog阅读 1,358评论 0 0
  • 一、5月27日 今天五点起床,6:28火车。慌忙取票,发现丢掉的票。感谢老天,一切正常。 没吃早饭...
    阳光土路阅读 276评论 0 0
  • 如果说我从未想过要过怎样的生活那是假的。我既想过得舒适不想忙累,又想过得体面不想狼狈。我知道在城市的投影下很少人...
    噢泡果奶阅读 232评论 0 1