ARST第二周打卡

Algorithm : 做一个 leetcode 的算法题

题目:一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数。如何找出这个缺失的整数?

int FindOneMissNum(int aiArray[], int iNum)
{
    int iMissNum = -1;
#if 0
    // 方法一:利用数组的下标
    // 时间复杂度O(n) 空间复杂度O(n)
    vector<int> vect(iNum + 1, 0);
    for (int i = 0; i < iNum; i++)
    {
        vect[aiArray[i] - 1]++;
    }

    for (int i = 0; i < iNum; i++)
    {
        if (0 == vect[i])
        {
            iMissNum = i + 1;
            break;
        }
    }

//#else 

    // 方法二:先排序,然后比较相邻的两个数差值是否大于1
    //时间复杂度:O(N*lgn),空间复杂为O(1)
    std::sort(aiArray, aiArray + iNum);
    for (int i = 0; i < iNum - 1; i++)
    {
        if (aiArray[i + 1] - aiArray[i] > 1)
        {
            iMissNum = aiArray[i + 1] - 1;
            break;
        }
    }

#else
    // 方法三: 先累加1+2+3+...+100;然后建去数组里面的值,差值就是要查找的数
    //时间复杂度O(n), 空间复杂度O(1)
    //这里注意一下:如果给的数值不是1...100,需要注意不能溢出,所以这种方法慎用!!!!
    int iSum = (1 + 100) * (100 / 2);
    for (int i = 0; i < iNum; i++)
    {
        iSum -= aiArray[i];
    }
    iMissNum = iSum;

#endif

    printf("MissNum = %2d\n", iMissNum);
    return iMissNum;
}

题目扩展:一个无序数组里有若干个正整数,范围从1到100,其中99个整数都出现了偶数次,只有一个整数出现了奇数次(比如1, 1, 2, 2, 3, 3, 4, 5, 5),如何找到这个出现奇数次的整数?

int FindOddNum(int aiArray[], int iNum)
{
    int iOddNum = 0;
#if 0
    //方法一:利用数组下标
    // 时间复杂度O(n), 空间复杂度O(n)
    vector<int> vect(iNum + 1, 0);
    for (int i = 0; i < iNum; i++)
    {
        vect[aiArray[i] - 1]++;
    }

    for (int i = 0; i < iNum; i++)
    {
        if (vect[i] == 1)
        {
            iOddNum = i + 1;
            break;
        }
    }

#else
    //方法二:用异或(^=) 相同为假,不同为真
    // 时间复杂度O(n), 空间复杂度O(1)
    iOddNum ^= aiArray[0];
    for (int i = 1; i < iNum; i++)
    {
        iOddNum ^= aiArray[i];
    }

#endif
    printf("OddNum = %2d\n", iOddNum);
    return iOddNum;
}

题目第二次扩展:一个无序数组里有若干个正整数,范围从1到100,其中98个整数都出现了偶数次,只有两个整数出现了奇数次(比如1, 1, 2, 2, 3, 4, 5, 5),如何找到这个出现奇数次的整数?

解题思路:
     1.遍历整个数组,依次做异或运算。由于数组存在两个出现奇数次的整数,所以最终异或的结果,等同于这两个整数的异或结果。
         这个结果中,至少会有一个二进制位是1(如果都是0,说明两个数相等,和题目不符)

2.根据这个结论,我们可以把原数组按照二进制的末位不同,分成两部分,一部分的末位是1,一部分的末位是0。由于A和B的末位不同,
         所以A在其中一部分,B在其中一部分,绝不会出现A和B在同一部分,另一部分没有的情况。
     3.这样一来就简单了,我们的问题又回归到了上一题的情况,按照原先的异或解法,从每一部分中找出唯一的奇数次整数即可。

//时间复杂度:O(N), 空间复杂度O(1)

int FindTwoOddNum(int aiArray[], int iNum)
{
    // 1.计算两个数异或值
    int iBitStatus = 0;
    for (int i = 0; i < iNum; i++)
    {
        iBitStatus ^= aiArray[i];
    }

    // 2.找到为1的bit位
    int iBit = 0;
    while (1)
    {
        if (iBitStatus & (0x01 << iBit))
        {
            break;
        }
        iBit++;
    }

    int iOddNum = 0;
    int iOddNum2 = 0;
    for (int i = 0; i < iNum; i++)
    {
        if (aiArray[i] & (0x01 << iBit))
        {
            iOddNum ^= aiArray[i];
        }
        else
        {
            iOddNum2 ^= aiArray[i];
        }
    }

    printf("OddNum = %2d, iOddNum2 = %02d\n", iOddNum, iOddNum2);
    return iOddNum;
}

Review : 阅读并点评一篇英文技术文章

原文地址:http://download.redis.io/redis-stable/redis.conf

# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################# GENERAL #####################################

# By default Redis does not run as a daemon. Use ‘yes‘ if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize no

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised no

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
#
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
#
# Creating a pid file is best effort: if Redis is not able to create it
# nothing bad happens, the server will start and run normally.
pidfile /var/run/redis_6379.pid

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile ""

# To enable logging to the system logger, just set ‘syslog-enabled‘ to yes,
# and optionally update the other syslog parameters to suit your needs.
# syslog-enabled no

# Specify the syslog identity.
# syslog-ident redis

# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
# syslog-facility local0

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and ‘databases‘-1
databases 16

# By default Redis shows an ASCII art logo only when started to log to the
# standard output and if the standard output is a TTY. Basically this means
# that normally a logo is displayed only in interactive sessions.
#
# However it is possible to force the pre-4.0 behavior and always show a
# ASCII art logo in startup logs by setting the following option to yes.
always-show-logo yes

Redis配置文件:

通用配置:

1.是否以守护进程运行redis;

2.是否打开监督模式;

3.守护进程模式下,设置pid文件目录;

4.设置日志等级(debug/verbose/notice/warning);

5.设置log文件路径,如果为"",表示输出到标准输出;

6.系统日志开关;

7.设置系统日志标记;

8.指定系统日志工具;

9.设置数据库个数;

10.显示logo;

Tips : 学习一个技术技巧

C++中有哪4个与类型转换相关的关键字?这些关键字各有什么特点,应该在什么场合下使用?

类型转换总结:

  • 去const/volatile属性使用const_cast;

  • 基本类型之间转换使用static_cast;

  • 多态类型之间转换使用dynamic_cast;

  • 不同类型的指针之间转换使用reinterpret_cast;

Share : 分享一篇有观点和思考的技术文章

c++ new delete 常踩的坑

原文链接:

https://wetest.qq.com/lab/view/318.html?from=adsout_qqtips_past2_318&sessionUserType=BFT.PARAMS.230036.TASKID&ADUIN=664510732&ADSESSION=1501034659&ADTAG=CLIENT.QQ.5533_.0&ADPUBNO=26719

原文地址:https://www.cnblogs.com/yzdai/p/11111768.html

时间: 2024-10-09 04:00:15

ARST第二周打卡的相关文章

软件项目管理第二周作业

软件项目管理作业: 1.代码规范 代码就像美食一样,不仅好不好吃,卖相也很重要. 代码风格:简明.易读. 4个空格缩进,行宽100字符,复杂的表达式多用括号清楚的表示逻辑关系,不要好几条语句放在一行等等. 注释主要是知道程序做什么,为什么这样做,还有注意的地方提醒. 2.燃尽图.鱼刺图.甘特图 燃尽图:顾名思义,一堆木头烧完了,一开始挺多的,大事化小,越来越少,直到化为灰烬. 鱼刺图:貌似是鱼刺有很多,一个结果有很多原因且又相互有联系,有果必有因,找出问题的原因,解决问题. 甘特图:工作进度图,

暑假第二周总结

第二周.比赛外时间较上周有了一些进步,不过比赛状态却大不如前. 打了三场个人赛.卡题问题比较严重(尤其round 4最简单的B题卡了4个小时)加上之前的三场总排名应该是第一名.不过罚时仍然是居高不下占据第一.. 组队赛打了两场.一场rank1,一场垫底2333. 由于组内分工,我发现自己对孙子定理.高斯消元等基本数学问题与线段树等基本数据结构变得生疏.好像有两年没写线段树了.. 难题仍然有好多不会,不过比赛之后也在思考,也学到了一些新的东西.我发现如果每次比赛只做会做的题目,只能锻炼思维能力和对

三节课MINI计划第二周

任务:完成一份用户反馈的收集,并进行分析 第一步:去你能想到的公开.非公开渠道收集最近90天,至少40条和B站相关的有效用户差评反馈,并根据你对业务的理解分类整理,以表格的形式进行整理,以图片的方式提交系统. *课程导读 一.通过用户反馈发现问题 (一)通过用户反馈关注什么 1.自身产品的问题 2.竞品的问题(内部or外部) 3.可能的机会点——满足用户的需求 (二)通过哪些渠道收集用户反馈 ps:1.半公开渠道:朋友圈.微信群.用户评价 2.用户表达意愿强烈:百度手机助手.小米应用商店.豌豆荚

2014025670(12)《嵌入式系统程序设计》第二周学习总结

这周学习了gcc和gdb的使用还有makefile. 教材学习内容总结 教材内容开始看的有些吃力,很多地方都不太懂,网上查询和询问同学和老师之后,了解了很多,但是具体操作和实现方面还是比较难. 教材学习中问题和解决过程 对于gcc的操作在实验楼的学习中还是比较顺利,gdb的操作感觉有些村存在问题-----gdb的调试方面有些吃力,应该是自己没努力的结果,打算把问题汇总一下,再试试实验. 课后作业中的问题和解决过程 应用实验楼的第二周,第一周的内容感觉简单,消化很快,没想到第二周就感觉有些吃力,不

学习进度条第二周

  第二周 所花时间 12小时 代码量 180行左右 博客量 3 了解到的知识点 Javaweb开发html的学习,还有javascript的特效和链接网页跳转,网页中图片自行转换,以及构建之法第1.2.3章相关的知识.

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

《Machine Learning》系列学习笔记之第二周

第二周 第一部分 Multivariate Linear Regression Multiple Features Note: [7:25 - θT is a 1 by (n+1) matrix and not an (n+1) by 1 matrix] Linear regression with multiple variables is also known as "multivariate linear regression". We now introduce notatio

20145123刘森明《Java程序设计》第二周学习总结

教材学习内容总结 这一章学习的知识,在以前的C语言中已经学习过了.所以学起来比较的轻松.主要讲的就是数据与变量的类型和运算符:流程控制等知识点. 教材学习中的问题和解决过程 这周在Java上花费的时间较多.首先对于java语言中,虽然之前对于java的语言的语法有所了解,但是对于具体的细节还存在问题.对于输出函数System.out.printf()和Syetem.out.println()的区别,看书后得知Syetem.out.println()函数在编译后会换行,在第一章的“hello wo

20145229吴姗珊《Java程序设计》第二周学习总结

教材学习内容总结 一.类型.变量与运算符 1.类型 整数:可细分为short整数.int整数和long整数.不同长度的整数可储存的整数范围也不同. 字节:byte类型顾名思义.长度就是一字节,需要逐字节处理数据时则需要使用.用于整数时,可表示-128~127的整数. 浮点数:主要用来储存小数数值,主要分为float和double. 字符:char类型用来储存‘A','B','林'等字符符号. 布尔:boolean类型可表示true和false,分别表示真和假. 2.变量 基本规则:用关键词来声明