zoukankan      html  css  js  c++  java
  • 强化第一章

    1 Two Sum

        public int[] twoSum(int[] numbers, int target) 
        {
            int[] res = {-1, -1};
            if (numbers == null || numbers.length < 2) {
                return res;
            }
            Map<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < numbers.length; i++) {
                if (map.containsKey(target - numbers[i])) {
                    res[0] = map.get(target - numbers[i]) + 1;
                    res[1] = i + 1;
                    return res;
                }
                map.put(numbers[i], i);
            }
            return res;
        }
    View Code

    2 Two Sum - Input array is sorted

            int[] res = new int[]{-1, -1};
            if (nums == null || nums.length == 0) {
                return res;
            }
            int left = 0;
            int right = nums.length - 1;
            while (left < right) {
                int sum = nums[left] + nums[right];
                if (sum == target) {
                    res[0] = left + 1;
                    res[1] = right + 1;
                    return res;
                } else if (sum > target) {
                    right--;
                } else {
                    left++;
                }
            }
            return res;
    View Code

    3 Triangle Count

        public int triangleCount(int s[]) {
            if (s == null || s.length < 3) {
                return 0;
            }
            int res = 0;
            Arrays.sort(s);
            for (int i = s.length - 1; i >= 2; i--) {
                int left = 0, right = i - 1;
                while (left < right) {
                    if (s[left] + s[right] > s[i]) {
                        res += right - left;
                        right--;
                    } else {
                        left++;
                    }
                }
            }
            return res;
        }
    View Code

    4 Segment Tree Build

        public SegmentTreeNode build(int start, int end) {
            if (start > end) {
                return null;
            }
            SegmentTreeNode root = new SegmentTreeNode(start, end);
            if (start != end) {
                int mid = (start + end) / 2;
                root.left = build(start, mid);
                root.right = build(mid + 1, end);
            }
            return root;
        }
    View Code

    5 Segment Tree Build II

        public SegmentTreeNode build(int[] A) {
            // write your code here
            return buildTree(0, A.length - 1, A);
        }
        public SegmentTreeNode buildTree(int start, int end, int[] a){
            if (start > end) {
                return null;
            }
            if (start == end) {
                return new SegmentTreeNode(start, end, a[start]);
            }
            SegmentTreeNode root = new SegmentTreeNode(start, end, a[start]);
            int mid = (start + end) / 2;
            root.left = buildTree(start, mid, a);
            root.right = buildTree(mid + 1, end, a);
            if (root.left != null && root.left.max > root.max) {
                root.max = root.left.max;
            }
            if (root.right != null && root.right.max > root.max) {
                root.max = root.right.max;
            }
            return root;
        }
    View Code

    6 Segment Tree Query

      public int query(SegmentTreeNode root, int start, int end) {
            if (root == null || start > end) {
                return -1;
            }
            if (root.start == start && root.end == end) {
                return root.max;
            }
            int mid = (root.start + root.end) / 2;
            int left_max = Integer.MIN_VALUE;
            int right_max = Integer.MIN_VALUE;
            if (start <= mid) {
                left_max = query(root.left, start, Math.min(mid, end));
            } 
            if (mid + 1 <= end) {
                right_max = query(root.right, Math.max(start, mid + 1), end);
            }
            return Math.max(left_max, right_max);
        }
    View Code

    7 Segment Tree Modify

        public void modify(SegmentTreeNode root, int index, int value) {
            if (root.start == index && root.end == index) {
                root.max = value;
                return;
            }
            int mid = (root.start + root.end) / 2;
            if (root.start <= index && index <= mid) {
                modify(root.left, index, value);
            }
            if (mid + 1 <= index && index <= end) {
                modify(root.right, index, value);
            }
            root.max = Math.max(root.left.max, root.right.max);
        }
    View Code
  • 相关阅读:
    模拟_大数字符串(HDU_2054)
    DP_字串匹配(HDU_1501)
    动态字典树_字串标记查找+大数(HDU_4099)
    动态字典树_字串查找匹配(HDU_1075)
    动态字典树+DFS(HDU_1298)
    动态字典树_拆分查找(HDU_1247)
    动态字典树_统计前缀子串(HDU_1251)
    动态字典树_统计子串(HDU_2846)
    字典树讲解
    HTML5语义标签的实践(blog页面)
  • 原文地址:https://www.cnblogs.com/whesuanfa/p/7465490.html
Copyright © 2011-2022 走看看