前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日算法题:Day 24

每日算法题:Day 24

作者头像
算法工程师之路
发布2019-08-27 14:41:34
4890
发布2019-08-27 14:41:34
举报
作者:TeddyZhang,公众号:算法工程师之路

Day 24, Linux知识点走起~

1

编程题

【剑指Offer】不用加减乘除做加法

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路: 首先我们知道两个数相加,

  • 首先是每个为对应相加,然后再加上对应的进位数!而二进制也是如此,如果两个二进制进行异或^,那么就相当于是每位相加,但不考虑进位。那么进位怎么办呢?
  • 我们可以通过两个数相与&得到两个数相加的进位数,但需要向左移一位对应相加,但是怎么怎么将其对应位相加呢?
  • 我们仍然重复这两个过程即可!知道进位数为0则跳出循环
  • 当然这个循环也可以使用递归的方式来实现,代码更加简洁!

迭代版

代码语言:javascript
复制
class Solution {
public:
    int Add(int num1, int num2)
    {
        while(num2 != ){
            int tmp = num1 ^ num2;
            num2 = (num1 & num2) << ;
            num1 = tmp;
        }
        return num1;
    }
};

递归版,只需要一句话,简化了上面的代码

代码语言:javascript
复制
class Solution {
public:
    int Add(int num1, int num2)
    {
        return num2 !=  ? Add(num1^num2, (num1&num2) << ) : num1;
    }
};

【剑指Offer】字符串转换成整数

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。

输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0

思路: 假如一个数1234,我们可以通过循环遍历每个数字,然后通过res=res*10+str[i]-'0',这是得到整数的核心代码,但是由于这个数还存在不合法的数字,因此再次之前要先进行判断,由于字符串可能出现符号'+','-'等,也要进行判断,注意判断后我们将符号位设置为'0',这么做为了在不影响结果的情况下,编程变得更加方便!

代码语言:javascript
复制
class Solution {
public:
    int StrToInt(string str) {
        int len = str.length();
        if(len <=  || str[] == ) return ;
        int symbol = , res = ;  // 什么都不加默认为正数
        if(str[] == '+'){
            symbol = ;
            str[] = '0';
        }else if(str[] == '-'){
            symbol = -1;
            str[] = '0';
        }
        for(int i = ;i < str.length();i++){
            if(str[i] < '0' || str[i] > '9'){
                res = ;
                break;
            }
            res = res *  + str[i] - '0';
        }
        return symbol * res;
    }
};

2

概念题

【Liunx】wc命令详解,以及功能示例

wc全称为"Word Count", 利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

命令格式:wc [-clw][--help][--version][文件…]

  • -c或者-bytes只显示字节数
  • -l或者-line只显示行数
  • -w或者-word只显示字数

例如:grep "for" proc.c | wc -l 表示proc.c的for循环一种有多少个,非常实用的功能!

【Linux】Linux中read()是系统调用的么?

系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api. read()函数不是库函数,为系统调用,Linux常用的系统函数为open/close/read/write/fntl

【Linux】Linux中文件属性

文件分为文件内容和数据,在Linux中分成两个部分:用户数据(user data)与元数据(metadata),其中:

  • 用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;
  • 元数据则是文件的附加属性,如文件名、文件大小、创建时间、所有者、文件所在的inode等信息。

在 Linux 中,元数据中的 inode 号(inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

上图就表示两个文件为硬链接的情况,两个文件共用同一个inode节点,相当于对一组数据起不同的文件名,每增加一个文件名,inode节点链接数增加一,反之,删除一个链接数减一,直到为零,内存被系统回收!这叫做硬链接,那么软连接呢?我们后面再说哟!!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者:TeddyZhang,公众号:算法工程师之路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档