PsiACE Fizz-Buzz Developer Life is short, so why not do something you like?

Current work

2018.08.22 - 进行对 Open Data Structure 的翻译工作,以及新的关于 Django 的写作计划 @ 翻译与创作

Arch Linux 初始服务器设置

Part 0,前言。Part 1,使用 vps2arch 创建 Arch Linux 服务器。Part 2,采取一些配置步骤作为基本设置的一部分。Part 3,接下来...。这将提高服务器的安全性和可用性,并有助于你接下来的操作。

Arch Linux server

在 Linux 上运行 MASM 汇编

本文介绍了如何在 Linux 环境下通过 DOSBox 和 MASM 5.x 配置 MASM 学习环境。

masm 汇编语言

关于 PsiACE.Me 的一些调整

重复劳动是一项没有意义的事情, 所以 PsiACE.ME 将放弃连载更新一些翻译上或创作上成体系的大部头, 这些内容将分别放在独立的存储库中进行维护。 已经发布过的内容仍将保留,但可能不会更新。

关于 ODS-CN 将存储于 https://github.com/psiace/ods-cn,具体情况请参见 README 文件。

最近一直很惫怠,没能写一些很有意思的东西,我希望在接下来的几个月内有所改善。

welcome 公告

Javascript 轮播图

原生代码实现轮播图,这里并没有什么特别的内容,前人已经总结的很好了,仅仅是用来自己记录一下。

Javascript 沸点工作室

LeetCode 暑期练习记录

一些精简的思路和代码,没有难度的练习

数据结构与算法 题解 LeetCode 沸点工作室

尝试使用 Jekyll 与 GitHub Pages

本文章介绍一些关于 Jekyll 与 GitHub Pages 的内容,为了简化流程仅仅介绍如何快速开始以及在已有主题之上进行个性化定制。

尝试使用 Jekyll 与 GitHub Pages feature image Photo Credit: Jekyll(Page Screenshots)
Jekyll GitHub Pages 静态站点生成器 沸点工作室

开放数据结构 · 为什么选择这本书?

本章给出了选择Open Data Structures的理由,最为重要的一点是,本书是免费且自由的。

ODS 数据结构与算法 译作

LeetCode 7. Reverse Integer

原题链接:https://leetcode-cn.com/problems/reverse-integer/description/

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例1:

输入: 123
输出: 321

示例2:

输入: -123
输出: -321

示例3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

分析:

本题分类为数学

重点即为关于是否溢出的判断,加减法查看标志位,乘除法逆运算和原来的数字是否相同

题解:

class Solution {
public:
    int reverse(int x) {
        int ans = 0;
        while (x) {
             int temp = ans * 10 + x % 10;
             if (temp / 10 != ans)  //如果不等的话说明temp已经溢出了
                 return 0;
        ans = temp;
        x /= 10;
        }
        return ans;
    }
};

数据结构与算法 题解 LeetCode简单题

LeetCode 1. Two Sum

原题链接:https://leetcode-cn.com/problems/two-sum/description/

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

分析:

本题分类为数组哈希表

vector中元素使用连续的存储位置,这意味着可以使用到其元素的常规指针上的偏移量来访问它们的元素,并且与数组中的效率一样高。但是与数组不同的是,它们的大小可以动态改变,它们的存储由容器自动处理。(可以片面把它理解为一个动态数组)

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

Map是一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可以称为该关键字的值)的数据处理能力,内部建有红黑树(非一种严格意义上的平衡二叉树),具有对数据自动排序的功能,所以在其内部所有的数据都是有序的。

循环遍历,下标为i,在hash_table中查找data[i],如果没有则插入hash_table中;如果有,则记录该位置i。再在hash_table中查找target-data[i],如果有没有则丢弃i,开始下一个循环(即++i);如果有,则记该位置为n。最终i,n都找到时,进行输出(返回值),算法结束。

题解:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int, int> hash_table;
        vector<int> index;
        for(int i = 0; i < nums.size(); ++i){
            if (!hash_table.count(nums.at(i))){
                hash_table.insert(make_pair(nums.at(i), i));
            }
            if (hash_table.count(target - nums.at(i))){
                int n = hash_table.at(target - nums.at(i));
                if (n != i){
                    index.push_back(n);
                    index.push_back(i);
                    break;
                }
            }
        }
    return index;        
    }
};

不需要对i和n进行排序,这是由于遍历从起始位置开始,第一次找到对应值时,必然满足i比n小。

数据结构与算法 题解 LeetCode简单题

开放数据结构 · 致谢

本章为Open Data Structures的Acknowledgment部分

ODS 数据结构与算法 译作

开放数据结构 · 概览

Open Data Structures是由Pat Morin撰写的数据结构的入门指南。此处为中文译制版。

开放数据结构 · 概览 feature image Photo Credit: Pat Morin, Open Data Structure
ODS 数据结构与算法 译作

欢迎访问PsiACE.Me

这是我的个人站点,提供一些在计算机科学方面的闲谈。

你可能在这个网站上找到以下内容:

  • 关于编程的入门引导和一些算法
  • 进一步地,关于编译原理,图形学,以及操作系统的探讨
  • 一些关于数学,物理,文学,投资的无关紧要的内容
  • 日常生活
  • 暂时还没想好的更多

希望这些琐碎的东西可以对你有所益助。

注意: 在categories和tags里的文章是按发布时间进行排序的,对于categories,先发表的文章在上面,而tags则恰恰相反。

快乐黑客!


welcome