强化第一章

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;
    }

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;

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;
    }

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;
    }

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;
    }

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);
    }

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);
    }

时间: 2024-08-25 00:45:45

强化第一章的相关文章

OSGI实战第一章

第一章         解开OSGI的面纱 OSGI是什么?是Java平台的一个模块化层. 模块化:软件应用程序的代码被分割为表示独立内容的逻辑单元,可简化开发,可通过强化逻辑模块的界限来提高可维护性. Java模块化的不足 a)         Java使用访问修饰符(如public.protected.private和包级私有),解决底层面向对象封装,而不是逻辑系统划分. 比如,如果需要代码在多个包之间课件,那么包内的代码必须声明为public,那么所有的模块都可以使用这个public类.这

第一章线程管理

Java 7 并发编程实战手册目录 代码下载(https://github.com/Wang-Jun-Chao/java-concurrency) 第一章线程管理 1.1简介 在计算机领域中,我们说的并发(Concurrency)是指一系列任务的同时运行.如果一 台电脑有多个处理器或者有一个多核处理器,这个同时性(Simultaneity)是真正意义的并 发:但是一台电脑只有一个单核处理器,这个同时性并不是真正的并发 与并发相关的另一个概念是并行(Parallelism).与并发有不同的定义一样

统计学习方法 笔记&lt;第一章&gt;

第一章 统计学习方法概述 1.1 统计学习 统计学习(statistical learning)是关于计算机基于数据概率模型并运用模型进行预测和分析的学科.统计学习也称为统计机器学习,现在人们提及的机器学习一般都是指统计机器学习. 统计学习的对象是数据(data),关于数据的基本假设是同类数据具有一定的统计规律性(前提):比如可以用随机变量描述数据中的特征,用概率分布描述数据的统计规律等. 统计学习的目的:对现有的数据进行分析,构建概率统计模型,分析和预测未知新数据,同时也需要考虑模型的复杂度以

Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第一章

Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 1.    关于HtmlHelper和UrlHelper 因为大部分的web请求的目标都是向客户端发送HTML代码.因此,Asp.Net MVC也是为我们创建HTML提供了各种帮助.除了Razor,另外还有两个最为重要的帮助类就是HtmlHelper和UrlHelper,他们作为控制器

20172327 2017-2018-2 《第一行代码Android》第一章学习总结

学号 2017-2018-2 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等. 2.系统运行底层 - 通过一些C/C++库来为Android系统提供了主要的特性支持 库名 功能 SQLite库 提供数据库的支持 OpenGL/ES库 提供3D绘图支持 Webkit

第一章、什么是阿斯伯格综合征

目录 第一章.什么是阿斯伯格综合征 一.通向诊断的路 (一)婴儿期和幼儿期的孤独症诊断 (二)在小学低年级辨别阿斯伯格综合征 (三)曾有过其他发育障碍类型的诊断 (四)在青少年阶段的初次诊断 (五)行为规范障碍和人格异常迹象 (六)亲友中有人被诊断为孤独症或阿斯伯格综合征 (七)从媒体上了解到阿斯伯格综合征症状 (八)就业问题 二.为什么需要做诊断 三.用心理补偿和调整策略来面对与众不同 (-)反应性抑郁症 (二)沉迷于想象 (三)抗拒和傲慢 (四)模仿 四.得到诊断的利与弊 本章重点及策略 阿

Unity 游戏框架搭建 2019 (九~十二) 第一章小结&amp;第二章简介&amp;第八个示例

第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示例中有的是我们后续库的基础工具,也有的是在项目中非常实用的小工具,还有一些示例是实践了在框架搭建方向上非常重要的 C# 语法知识. 第二章大纲如下. 第八个示例(一) 在之前,我们完成了一个导出的功能.但是在完成这个功能的过程中,我们也遇到了一些问题.我们回忆一下,在<MenuItem 复用>的这

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题

计算机网络安全第一章

计算机网络不安全因素:偶发因素.自然因素.认为因素(被动攻击.主动攻击.邻近攻击.内部人员攻击.分发攻击) 不安全的主要原因: 1.互联网具有不安全性:开放的网络,国际性的网络,自由性的网络 2.操作系统存在的安全问题:操作系统软件自身的不安全性,留下"后门".操作 系统体系结构造成的不安全隐患.操作系统可以创建进程.操作系统的无口令入口及隐蔽通道 3.数据安全问题 4.传输线路安全问题 5.网络应用存在的安全问题 6.网络安全管理问题 计算机网络安全是一门涉及计算机科学.网络技术.通