ARTS打卡第四周

ARTS打卡第四周

  • Algorithm主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 – 酷 壳 – CoolShell
  • Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要你阅读并点评至少一篇英文技术文章,我个人最喜欢去的地方是Medium.com(需要梯子)以及各个公司的技术blog,如Netflix的。
  • Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
  • Share:主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考文章。

Algorithm:

剑指 Offer 31. 栈的压入、弹出序列 这个题目考的是模拟,很多笔试题喜欢考察模拟,一方面模拟类型的题目能考察应聘者对于一段文字的抽象能力,另一方面可以考察应聘者熟练使用已有的数据结构。这道题目要求判断一个出栈顺序是否为入栈顺序的一个正确出栈顺序。借助栈的模拟,每次遍历pushed数组,加入一个元素之后,就去遍历popped数组,如果当前栈不为空且遍历的popped[j]和栈顶元素相等就把栈顶元素弹出来,继续遍历popped数组。等遍历popped数组结束之后就继续添加pushed数组的元素到栈顶,当所有的pushed元素遍历完,我们就模拟完入栈和出栈的顺序,这时候如果栈里面还有元素,说明出栈顺序是错的,返回false,栈为空,返回true。

Review:

Leadership is a Research Project  

文章主要讨论领导力是一个研究型的项目,文章观点是认为项目由人组成,很多领导想成为技术专家,但是他们的方向不精确,领导更应该专注于市场和生意,领导要把注意力放在市场,竞争者,策略上面。领导要研究哪些内容呢,主要是员工的经历,目标,工作上的困难,爱好,失眠的原因。总的来说,领导要研究的是员工。

Tip:

(1)遇到一个完全背包的问题,这个完全背包的重点是初始化,因为要求的是最小值,所以除了下标为0的元素,其他元素都要初始化为最大值。这个题目的意思是这样的:给定一个数组arr=[1,2,3,5]和目标长度len=9,用arr里面的长度组成目标长度,不限制使用arr里面的元素次数,求使用的最少元素数目。递推公式很容易想到dp[i]=min(dp[i], dp[i-arr[j]]+1),dp数组中除了下标为0的元素初始化为0,其他元素初始化为Integer.MAX_VALUE-1,不能直接初始化为Integer.MAX_VALUE,否则会溢出。

(2)做题遇到一个对Java的Map中元素排序的问题,要求是对Map中的元素按照value从大到小排序,如果value相同,就按照key从小到大排序。具体的代码如下

import java.util.*;

class Solution {
    public static void main(String[] args) {

        HashMap<String, Integer> map = new HashMap<>();
        map.put("A", 5);
        map.put("B", 5);
        map.put("C", 4);
        map.put("D", 3);
        map.put("E", 6);
        List<Map.Entry<String, Integer>> list = new LinkedList<>(map.entrySet());
        list.sort((o1, o2) -> {
            int res = o2.getValue() - o1.getValue();
            if (res == 0) {
                res = o1.getKey() .compareTo(o2.getKey());
            }
            return res;
        });
        for(Map.Entry<String,Integer> entry : list){
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}

(3)Java的Queue添加元素有两个方法,add()和offer()的区别如下:

add(): 如果有空间,则将指定元素插入到队列末尾,成功时返回 true,如果当前没有可用空间,则抛出IllegalStateException此方法返回一个布尔值,表示操作是否成功。如果元素已添加,则返回 true,否则返回 false。

offer(): 如果可以立即插入指定的元素而不违反容量限制,则它将指定的元素插入此队列。当使用容量受限的队列时,此方法通常优于add(E),后者只能通过抛出异常来插入元素失败。

(4)刷题时会用到字符的计算,比如 ch=’e’,现在我们要把ch变为大写的字符,可以这样做:ch=(char)(‘A’+ch – ‘a’); 注意(‘A’+ch -‘a’)的结果是整数,要转为范围更小的char类型,使用强制类型转换。

Share:

我发现焦虑不能解决问题,事情是这样的,之前因为有些很想去的岗位投递之后简历没通过,或者笔试没通过,我就感到非常焦虑,后来我想通了,我当下的困难是自己的能力还不够,应该继续提升,不能一看到牛客网上的人炫耀offer就乱了自己的节奏,所以还要继续巩固技术和编程能力。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注