ARTS 第6周 -0610

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

打卡地址

 

Algorithm 算法

66.加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]

示例 2:

输入: [4,3,2,9]
输出: [4,3,3,0]
 

示例 3:

输入: [9,9]
输出: [1,0,0]

 

我的解法

class Solution {
    public int[] plusOne(int[] digits) {
        int[] ints1 = new int[digits.length];
        int[] ints2 = new int[digits.length + 1];
        boolean plusOne = true;
        for (int i = digits.length -1; i >= 0 ; i--) {
            if (plusOne) {
                if (digits[i] + 1 < 10) {
                    // 结果不超过10,不需要再向上一位加1.
                    plusOne = false;
                    ints1[i] = ints2[i + 1] = digits[i] + 1;
                } else {
                    ints1[i] = ints2[i + 1] = 0;
                }
            } else {
                // plusOne为false,不在需要加1.
                ints1[i] = ints2[i + 1] = digits[i];
            }
        }
        if (plusOne) {
            ints2[0] = 1;
            return ints2;
        }
        return ints1;
    }
}


 

大佬的解法

class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}

注意:这种解法最终修改了传递的参数


当数组最后一位增加,如果满十就进一,计算计算上一位。如果没有满十,就可以跳出循环,结束运算。

这道题有一种特殊情况,就是最后[9,9]变[1,0,0]这种([9]变[1,0],[9,9,9]变[1,0,0,0]),数组长度最终发生了变化。这种方式就是运算到循环结束最后的结果仍旧大于10。

我和大牛的方法差在他是拿原数组进行计算,修改了传参,但是他的这种方式只要运算到不等于10的情况就可以直接返回原数组,而不需要像我一样,需要循环把原数组的数据放到新数组中。

真正精巧的在于最后[9,9]变[1,0,0]这种([9]变[1,0],[9,9,9]变[1,0,0,0])这种情况。

大牛是这么写的

digits = new int[digits.length + 1];
digits[0] = 1;
return digits;

我傻傻的用两个数组来接收一种和原数组长度相同的情况,一种长度加1的情况,其实长度加1的情况,永远都是下角标为0的值为1,余下的值为0.

digits = new int[digits.length + 1];

这样定义,是明确了数组的一个原理,在最开始通过定义数组长度创建数组的时候,数组的每个位置就已经有值了

1、int类型定义的数组,初始化默认是0

2、String类型定义的数组,默认值是null

3、char类型定义的数组,默认值是0对应的字符

4、double类型定义的数组,默认值是0.0

5、float类型定义的数组,默认值是0.0

而且不仅仅是数组第一个元素有默认值,所有的数组的默认值和上面的规则一样

原文:https://blog.csdn.net/cherry_chenrui/article/details/74612926 

例如:

digits 为[9,9]

digits = new int[digits.length + 1];

digits为[0,0,0]

 

 

Review 回顾


How to Learn Web Development the Smart Way

 

If I learn JavaScript and not the “MEAN” stack — MongoDB, ExpressJS, AngularJS, NodeJS — will web development be 4x easier for me? If I focus my time on JavaScript, will I be 4x better than any developer who uses those four technologies?

如果我只学习js而不是其他通用的技术栈,是不是前端开发要简单四倍?如果我花费所有的时间专注在js上,是不是比使用这四种技术的人强四倍?

 

intuitive:凭直觉得到的;直觉的;有直觉力的;易懂的;

misconception:误解

conception:构思;构想;设想;理解(认为某事怎样或应该怎样);

 

syntax:句法;语构

domain:领域

progression:发展;前进;进程;系列;

negligible:微不足道的;不重要的;不值一提的

scheme:计划;方案;体系;体制;阴谋;诡计;计谋

Learning JavaScript alone is not a fast track to full-stack web development. Learning only a programming language’s syntax — domain specific knowledge — doesn’t mean we’ll become a better full-stack web developer.

Domain specific knowledge alone will make our skill progression a negligible amount easier in the grand scheme of any developer’s career. There is a better approach.

单独学习js并不是快速成为全栈前端工程师的途径,只学习特定领域知识的编程语言,并不意味着能成为一个更好的全栈前端工程师。

在任何一个开发人员漫长宽广的职业生涯中,仅特定领域的知识对于我们技术发展来说是微不足道的。

 

procedural:程序上的;程序化;规程特性;

concepts:概念;观念

long-term:长期的;长远的;长期有效的;

benefit:n. 优势;益处;成效;   v. 对(某人)有用;使受益;得益于;得利于

evaluate:估计;评价;评估

merits:优点

analogy:类比;比拟;比喻;类推

 

The smart way to becoming a full-stack web developer is by first learning how to figure out the things that we don’t know — procedural knowledge — and how to teach ourselves foreign concepts. If we want to make the long-term decision that will benefit the growth of our developer careers, we need to think of programming languages differently.

We want to find the best tool for the job and evaluate different technologies based on its merits. Here is a helpful analogy of a practical problem we can use to understand the types of problems we face in web development.

 

 

 

 

 

Tip 知识点

 

SQL大小写的问题

关于 SQL 大小写的问题,我总结了下面两点:

  1. 表名、表别名、字段名、字段别名等都小写;

  2. SQL 保留字、函数名、绑定变量等都大写。
SELECT name, hp_max FROM heros WHERE role_main = '战士'

你能看到 SELECT、FROM、WHERE 这些常用的 SQL 保留字都采用了大写,而 name、hp_max、role_main 这些字段名,表名都采用了小写。此外在数据表的字段名推荐采用下划线命名,比如 role_main 这种。

 

MySQL在Windows下都不区分大小写。

Oracle中,SQL语句是不区分大小写,如果查询中有字符,是区分大小写的

SELECT * FROM heros WHERE name = 'guanyu'; 

SELECT * FROM heros WHERE name = 'GUANYU';

在Oracle中会认为是不同的查询,而在MySQL中是相同的查询

 

同时,我们可以通过修改系统参数来进行配置,比如在MySQL可以通过参数lower_case_table_names来配置数据库和数据表的大小写敏感性

 

 

 

Share分享

搭建个人博客-tonfeiz

第一次听说可以通过github来托管自己的网站,而不需要有自己的服务器,这个真的可以试试,解放了钱包,还不赶快行动。

 

 

 

 

你可能感兴趣的:(ARTS,java)