两元素去重
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]输出: 1示例 2:
输入: [4,1,2,1,2]输出: 4
一开始我的想法是暴力枚举,python代码如下:
123for i in nums: if(nums.count(i)==1): return i
后来一想,要求具有线性时间复杂度,对python的list.count() 不是很了解,万一这玩意本身的时间复杂度是O(n),然后一来不就O(n^n)了?
随后想到先把这个数组排个序,然后模拟栈来实现(需要使用2个int的空间来存放结果)
12345678910111213def func(nums): nums = sorted(nums) cnt = 2 stack = nums[0] for i in nums: if(i==stack): cnt = cnt-1 el ...
相同元素下标之差
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。
这个题目花费了我不少时间,
首先暴力找他肯定要爆你的时间复杂度,所以我一开始的想法就是:
如果数组里面由两个相同的值,这两个相同的值的下标之差j-i<=k就能达到要求,那么我要是存在一个k+1的能满足要求呢,k+2的呢?如果我在k+1,k+2……之后找到了相同元素不就可以了吗,不过这样的时间复杂度也不小,一个元素至少1次
于是看看官方题解,说是建立一个长度为k的容器,然后装元素,一旦找到,就return true,如果没找到就return false
我的python代码如下
123456789101112def func(nums,k): a = [] for i in nums: if((i not in a) and (len(a)<k)): a.append(i) elif((i not in a) and len(a)==k): ...
返回阶乘结果尾数中零的数量
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:
输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。
首先想的是暴力列举
12345678910import mathdef func(n): num = math.factorial(n) res = 0 while(num>0): k = num%10 if(k==0): res = res+1 num = num //10 return res
这样一来如果输入一个999之类的,绝对爆了时间复杂度,题目要求说时间复杂度要O(log n),然后想到能产生0 的数就只有5为结尾的,5×2=10 25×4=100 125×8=1000 所以能不能数一下这个n!里面包含有多少个5和多少个2呢,一个一个数也不太现实,就想到了类似于素数筛的算法把2和5的倍数筛出来,代码如下
123456789101 ...
My Darling
国家队观后感关于科技乌托邦里面描绘到的一个世界,人类靠着地下燃料,开始了长生不老,社会的一切都像是在一个机器中有序运转,每个人都是一个螺丝钉,组织类似于1984 。存天理灭人性,因为人性是一种不确定因素,由于已经长生不老了,人类放弃了生殖这种玩意,转向永生,退役的男性变成了“缸中脑” ,只要掌握了大脑的奖励机制,给大脑定期输送多巴胺,人就可以永远生活在幸福之中,对,是永远(美丽新世界?)。然而社会的发展要是到了这个地步,就是“未来简史”里面的成神,真正意义上的把全体人类结合成一个整体,各司其职,不得有误,按需分配,共产主义实现了?只是,由于没有了生殖,人类的情感也不被允许(徒增麻烦,妨碍管理)那个时候已经不是机器更像人了,而是人类向着机器进化,每个人从小开始就在被监视中长大,看什么书,用什么药,都是被决定好了的,孩子们从小就被教育:你们存在的意义就是给爸爸们工作,保护爸爸们。
这么讲太空洞,联系实际。我们从还没出生开始就已经在国家的信息系统登记,父谁母谁,家庭住址。生下来之后,脚印就已经被输入进了数据库,后面进入了户口本之后,就有了独一无二的身份证号码(对,没错,从一生下来就被定好了的 ...
DDCTF_re1_writeup
DDCTF re1 writeup下载下来是一个叫做reverse1_final的文件,打开发现是windows x86文件,直接用IDA无法反编译,提示如下
怀疑被加壳了,拖进PEID里面查看PE信息
EP段是UPX1,说明是UPX的壳,下载解压器,拖进去解压得到新的文件,发现新的文件已经无法正常运行,拖入IDA反汇编,先找到main函数,然后一通改名字
发现是对v4进行一系列操作后同DDCTF{reverseME} 进行比较,输入进入str_in,然后v4就是解密后的内容,进入该函数
发现就是对输入的字符串进行读取,让然后去匹配data里面的数值,data大概就是密码表,双击进入data是可以发现data没有在源码里面固定。
乱打乱撞,进入data里面发现这样
没有发现密码表,然后在下面翻,居然让我发现了类似密码表的东西
这串字符八九不离十就是密码表了,然后写脚本进行输出
12345678910111213#include <stdio.h>#include <string.h>int main(){ char ...