• Two Sum


    源代码:

    import java.util.Arrays;
    public class Solution {
        public int[] twoSum(int[] numbers, int target) {
            int[] results = new int[2];
            int len = numbers.length;
            Node[] nodes = new Node[len];
            for (int i = 0; i < len; i++) {
                nodes[i] = new Node(i + 1, numbers[i]);
            }
            /*
            Node tempNode = null;
            
            for (int i = 0; i < len; i++) {
                for (int j = 0; j < len - 1 - i; j++) {
                    if (nodes[j].value > nodes[j + 1].value) {
                        tempNode = nodes[j];
                        nodes[j] = nodes[j + 1];
                        nodes[j + 1] = tempNode;
                    }
                }
            }
            */
            Arrays.sort(nodes);
    
            int key = -1, index = -1;
            for (int i = 0; i < len; i++) {
                key = target - nodes[i].value;
                index = binarySearch(nodes, key);
                if (index != -1 && i != index) {
                    if (nodes[i].index < nodes[index].index) {
                        results = new int[] { nodes[i].index, nodes[index].index };
                    } else {
                        results = new int[] { nodes[index].index, nodes[i].index };
                    }
                    return results;
                }
            }
    
            return results;
        }
        
        public int binarySearch(Node[] nodes, int key) {
            int left = 0, right = nodes.length - 1, mid = (left + right) >> 1;
    
            while (left <= right) {
                mid = (left + right) >> 1;
                if (nodes[mid].value == key) {
                    return mid;
                } else if (nodes[mid].value > key) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            }
            return -1;
        }
    
        class Node implements Comparable<Node>{
            int index;
            int value;
    
            public Node() {
            }
    
            public Node(int index, int value) {
                this.index = index;
                this.value = value;
            }
            @Override
            public int compareTo(Node node) {
    
                if (this == node) {
                    return 0;
                }
                return this.value - node.value;
            }
        }
    }
  • 相关阅读:
    Defining Database and Instance【数据库与实例】
    安装rlwrap错误的问题解决方法
    ORACLE CONTROL FILE 笔记
    NTP时间服务器配置与解析
    虚拟机下Linux系统安装vmtool工具
    ORACLE clusterware组成
    ORACLE RAC集群硬件资源管理与单节点的区别
    Clusterware后台进程
    oracle数据库重建EM
    微机原理之计算机系统导论
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/3631933.html
Copyright © 2020-2023  润新知