左耳听风 ARTS Week 002

要求:
1.每周至少做一个 leetcode 的算法题

2.阅读并点评至少一篇英文技术文章

3.学习至少一个技术技巧

4.分享一篇有观点和思考的技术文章

1.每周至少做一个 leetcode 的算法题

算法题:20.有效括号

给定一个只包括 ‘(‘‘)‘‘{‘‘}‘‘[‘‘]‘ 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

解答:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        char[] chars = s.toCharArray();
        for (char aChar : chars) {
            if (stack.size() == 0) {
                stack.push(aChar);
            } else if (isSym(stack.peek(), aChar)) {
                stack.pop();
            } else {
                stack.push(aChar);
            }
        }
        return stack.size() == 0;
    }

    private boolean isSym(char c1, char c2) {
        return (c1 == ‘(‘ && c2 == ‘)‘) || (c1 == ‘[‘ && c2 == ‘]‘) || (c1 == ‘{‘ && c2 == ‘}‘);
    }
}

2.阅读并点评至少一篇英文技术文章

看《鲁滨孙漂流记 中英版》第2章。

3.学习至少一个技术技巧

今天学的,交大的数据结构笔记:

数据结构学位考:

视频1:

数据元素:数据的基本单位(学生)
数据项:数据的最小单位(性别)
数据对象:性质相同的数据元素的集合(班级)

数据结构:数据元素之间的关系,结构(集合、线性、树形、图)

数据结构的形式:Data_Structure=(D,S)

逻辑结构(集合、线性、树形、图)
物理结构(顺序、链式)

算法:指令的有序序列。
算法的五个特性:有穷性、确定性、可行性、输入、输出。

空间复杂度估算方法:输入数据所占空间+程序所占空间+辅助变量所占空间

顺序表的特点(用一位数组实现):
1、逻辑结构与存储结构一致
2、访问每个数据元素,花费的时间相同
3、随机存取法

线性表的链式表示:
1、不要求连续
2、不可以随机存取,插入删除方便
3、需要2个域:数据域、指针域

双向链表:每个结点有2个指针域,一个指向前驱,一个指向后继。

顺序栈:top指向下一个元素将要存放的位置。

栈空:top=base
栈满:top-base>=stacksize

队列:rear队尾插入数据,front队首删除数据。

顺序队列:有假溢出(有些存储空间是有的,但是不能插入)的问题,用循环队列解决。

循环队列,判断队空:Q.rear==Q.front
循环队列,判断队满:(Q.rear+1) mod MaxSize==Q.front

单链表,在P结点后插入S结点的语句:
1、S->next=P->next;
2、P->next=S;

单链表,尾节点:P->next=NULL

双向循环链表,在P结点后插入S结点(3、2、1、4)
1、S->next=P->next; S->prior=P;
2、P->next->prior=S;P->next=S;

双向循环链表,删除P结点的直接后继结点:
1、R=P->next; P->next=R->next;(用R保存P的后继结点)
2、R->next->prior=R->prior; free(R);

双向循环量表,删除P结点:
1、P->prior->next=P->next;
2、P->next->prior=P->prior;
3、free(P);

视频2:

树:只有一个根节点。

结点的度:结点拥有的子树数。
数的度:树内各结点度的最大值。
深度:树中结点的最大层次。

二叉树:第i层,至多有2^(i-1)个结点
二叉树:深度(高度)为k的二叉树,至多有2^k-1个结点

二叉树的顺序存储:补全为完全二叉树,从左到右、从上到下存储。(一般不采用顺序存储)

二叉树的链式存储(二叉链表):lchild、data、rchild。

遍历二叉树:先序、中序、后序。 

线索二叉树:添加两个指针,前驱和后继。lchild、ltag、data、rtag、rchild。

树的存储:双亲表示法、孩子表示法、带双亲的孩子链表

哈夫曼树:最优树,带权路径长度最短的树。
树的路径长度:从树根到每个结点的路径长度之和。

哈夫曼树的构造过程:先选2个权值最小的。
哈夫曼编码

未完待续~

4.分享一篇有观点和思考的技术文章

我是一个线程:https://mp.weixin.qq.com/s/0V4JKxiRQEMCCaK_89pQGg

原文地址:https://www.cnblogs.com/amusement1992/p/10633916.html

时间: 2024-10-11 17:52:21

左耳听风 ARTS Week 002的相关文章

一切从这里起始(左耳听风 ARTS 6号小组 week 1)

ARTS 具体要求: 1.每周至少做一个 leetcode 的算法题2.阅读并点评至少一篇英文技术文章3.学习至少一个技术技巧4.分享一篇有观点和思考的技术文章 1.Algorithm Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have e

极客时间-左耳听风-程序员攻略-软件设计

程序员练级攻略:软件设计 编程范式 学习编程范式可以让你明白编程的本质和各种语言的编程方式.因此,我推荐以下一些资料,以帮助你系统化地学习和理解. 极客时间的<编程范式游记>系列文章,目录如下. 编程范式游记(1)- 起源 编程范式游记(2)- 泛型编程 编程范式游记(3)- 类型系统和泛型的本质 编程范式游记(4)- 函数式编程 编程范式游记(5)- 修饰器模式 编程范式游记(6)- 面向对象编程 编程范式游记(7)- 基于原型的编程范式 编程范式游记(8)- Go 语言的委托模式 编程范式

左耳听风

主动学习与被动学习 你听别人讲,或是自己看书,或是让别人演示给你,这些都不能让你真正获得学习能力,因为你是在被别人灌输,在听别人说. 只有你开始自己思考,开始自己总结和归纳,开始找人交流讨论,开始践行,并开始对外输出,你才会掌握到真正的学习能力. 学习不是努力读更多的书,盲目追求阅读的速度和数量,这会让人产生低层次的勤奋和成长的感觉,这只是在使蛮力.要思辨,要践行,要总结和归纳,否则,你只是在机械地重复某件事,而不会有质的成长的. 深度学习十分重要 应该怎样进行深度学习呢?下面几点是关键. 高质

【技术思路】极客时间-左耳听风-开篇词2

07 | 推荐阅读:每个程序员都该知道的知识 每个程序员都应该要读的书 https://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read <代码大全> <程序员修练之道> <计算机的构造和解释> <算法导论> <设计模式> <重构> <人月神话> <代码整洁之道&

极客时间-左耳听风-程序员攻略开篇-零基础启蒙

入门教程 Python基础: 与孩子一起学编程:以 Python 语言教你如何写程序 https://book.douban.com/subject/5338024/ 在线编程网址 Codecademy: Learn Python https://www.codecademy.com/learn People Can Program https://www.peoplecanprogram.com/ 在线练习 CodeAbbey http://www.codeabbey.com/index/ta

左耳听风-ARTS-第4周(2019/4/21-2019/4/27)

Algorithm 本周的算法题是删除已排序数据中的重复数字(https://leetcode.com/problems/remove-duplicates-from-sorted-array/).这道题比较简单,基本思路是从开头比较,遇到不同的数字,就进行替换 public static int removeDuplicates(int[] nums) { if (nums == null || nums.length == 0) { return 0; } int i = 0; for (i

极客时间-左耳听风-程序员攻略-Java底层知识

Java 字节码相关 字节码编程,也就是动态修改或是动态生成 Java 字节码.Java 的字节码相当于汇编,其中的一些细节. Java Zone: Introduction to Java Bytecode ,这篇文章图文并茂地讲述了 Java 字节码的一些细节. IBM DeveloperWorks: Java bytecode ,讲 Java 字节码的文章. Java Bytecode and JVMTI Examples,这是一些使用 JVM Tool Interface 操作字节码的比

极客时间-左耳听风-程序员攻略-分布式架构入门

分布式系统涵盖的面非常广,具体来说涵盖如下几方面: 服务调度,涉及服务发现.配置管理.弹性伸缩.故障恢复等. 资源调度,涉及对底层资源的调度使用,如计算资源.网络资源和存储资源等. 流量调度,涉及路由.负载均衡.流控.熔断等. 数据调度,涉及数据复本.数据一致性.分布式事务.分库.分表等. 容错处理,涉及隔离.幂等.重试.业务补偿.异步.降级等. 自动化运维,涉及持续集成.持续部署.全栈监控.调用链跟踪等. 所有这些形成了分布式架构的整体复杂度,也造就了分布式系统中的很多很多论文.图书以及很多很

左耳听风-ARTS-第9周(2019/06/02-2019/06/08)

Algorithm 这周的算法题是plus one(https://leetcode.com/problems/plus-one/). public int[] plusOne(int[] digits) { int i = digits.length - 1; while (i >= 0) { if (digits[i] == 9) { if (i > 0) { digits[i] = 0; i--; } else { int[] target = new int[digits.length