• [leetcode]TwoSum系列问题


    1.普通数组找两个数,哈希表建立数值和下标的映射,遍历时一边判断一边添加

    /*
        哇,LeetCode的第一题...啧啧
         */
        public int [] twoSum(int[] nums, int target) {
            /*
            两个数配合组成target
            建立值和下标的映射,遍历数组时一边判断是否有另一半,一边添加新映射到哈希表
             */
            Map<Integer,Integer> map = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                int a = target-nums[i];
                if (map.containsKey(a))
                    return new int[]{i,map.get(a)};
                map.put(nums[i],i);
            }
            return null;
        }

    2.顺序数组,双指针分别靠向中间

    public int[] twoSum(int[] num, int target) {
            /*
            two sum第二题,排序好的数组,双指针
             */
            int left = 0,right = num.length-1;
            while (left<right)
            {
                int a = num[left] + num[right];
                if (a == target)
                    return new int[]{left+1,right+1};
                if (a > target)
                    right--;
                else left++;
            }
            return null;
        }

    3.BST,中序遍历后中上一题的做法做

    public boolean findTarget(TreeNode root, int k) {
            /*
            中序遍历得到排序数组,然后就是two sum2的做法
             */
            List<Integer> list = new ArrayList<>();
            Stack<TreeNode> stack = new Stack<>();
            while (!stack.isEmpty()||root!=null)
            {
                if (root!=null)
                {
                    stack.push(root);
                    root = root.left;
                }
                else {
                    root = stack.pop();
                    list.add(root.val);
                    root = root.right;
                }
            }
            //下面开始挑选
            int l = 0,r = list.size()-1;
            while (l < r)
            {
                int a = list.get(l) + list.get(r);
                if (a==k) return true;
                if (a>k) r--;
                else l++;
            }
            return false;
        }
  • 相关阅读:
    第二十一天作业
    第二十天:继承
    第二十天作业
    第十六天
    第十九天作业
    day53
    day52
    day51
    day50
    day44
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8366094.html
Copyright © 2020-2023  润新知