LeetCode 1.Two Sum

来源:互联网 发布:楤木淘宝 编辑:程序博客网 时间:2024/06/16 12:59

1.39 ms 暴力

    public class Solution {        public int[] twoSum(int[] nums, int target) {            int first = 0;            int second = 0;            for (first = 0; first < nums.length; first++) {                for (second = first + 1; second < nums.length; second++) {                    if (nums[first] + nums[second] == target) {                        return new int[] { first, second };                    }                }            }            return new int[] { first, second };        }    }

2.62 ms 暴力

    public class Solution {        public int[] twoSum(int[] nums, int target) {            int second = 0;            List<Integer> visited = new ArrayList<Integer>();            for (; second < nums.length; second++){                int num = target - nums[second];                if (visited.contains(num)){                    return new int[]{visited.indexOf(num), second};                }else{                    visited.add(target - num);                }            }            return null;        }    }

3.12ms 排序+二分查找

    public class Solution {        private int findBybsearch(int start, int num, List<NumCell> numCells) {            int l = start;            int r = numCells.size();            while (l < r) {                int m = (l + r) >> 1;                NumCell numCell = numCells.get(m);                if (num > numCell.value) {                    l = m + 1;                }                if (num == numCell.value) {                    return numCell.index;                }                if (num < numCell.value){                    r = m;                }            }            return -1;        }        private class NumCell implements Comparable<NumCell> {            public NumCell(int v, int i) {                this.value = v;                this.index = i;            }            public int value;            public int index;            @Override            public int compareTo(NumCell o) {                return this.value - o.value;            }        }        public int[] twoSum(int[] nums, int target) {            List<NumCell> numCells = new ArrayList<NumCell>();            for (int i = 0; i < nums.length; i++) {                numCells.add(new NumCell(nums[i], i));            }            Collections.sort(numCells);            for (int i = 0; i < numCells.size(); i++) {                int num = target - numCells.get(i).value;                int index0 = numCells.get(i).index;                int index1 = findBybsearch(i, num, numCells);                if (-1 != index1) {                    return new int[] { Math.min(index0, index1), Math.max(index0, index1) };                }            }            return null;        }    }

4.8ms Java的Map

    public class Solution {        public int[] twoSum(int[] nums, int target) {            Map<Integer, Integer> NumMap = new HashMap<>();            for (int i = 0; i < nums.length; i++) {                if (NumMap.containsKey(target - nums[i])) {                    return new int[] { NumMap.get(target - nums[i]), i };                } else {                    NumMap.put(nums[i], i);                }            }            return null;        }    }
0 0
原创粉丝点击