一道为了撸串的笔试题

浏览: 1908

作者:数据取经团-祥大

这段时间,在北京游荡了好几圈,黑了3层皮,做了好几家的笔试题,我将整理分享出来,以供大家求职找工作参考。

写这篇文章前,发生了这样的一段对话,只是为了撸串的交易

周末撸串吃什么味的好呢?要好好砍他一顿(阴笑脸)。好了,开始正文下面的内容。


第一题 两数的和

Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they addup to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.You may assume that each input would have exactly one solution.Input: numbers={2, 7, 11, 15}, target=9 Output: index1=1, index2=2


题目解读:

  • 给定一个数组,找出两个数的和等于给定的目标值,返回两个数的下标

  • 第一个数的下标比第二个数的小

  • 方案唯一:只存在一个解满足和等于target

  • 下标计数不是从0开始

思路一:暴力法
对所有的元素遍历,将满足条件的打印出来。这种方法的复杂度高,适合小数组。图解如下:

试着来用python实现下:

# -*- coding: utf-8 -*-
def twoSum(value,target):
   if ((value == None) or (len(value) < 2)):
       return ("zeros or length is too small")
   else:
       lena = len(value)
       for i in range(lena):
           for j in range(i+1,lena):
               if value[i] + value[j] == target:
                   print ("the two number are %d and  %d ,the index are %d and %d " % (value[i],value[j],i,j))

if __name__ == "__main__":
   a = [2,7,6,1]
   target = 9
   print (twoSum(a,target))

还能不能调整下代码呢?优化代码,减少复杂度呢?我想了想,要是原数组是排好序的该多好啊,那就不容易多了。

思路二 :排序法

嘿嘿,说干就干,来把它实现下。代码如下:

# -*- coding: utf-8 -*-
res = []
def sum_two_1(a,target):
   if (len(a) < 2):
       return (0)
   a1 =sorted(a)
   i=0;j=len(a1)-1;k=0;
   while(i<j):
       if (a1[i]+a1[j] == target):
           k=k+1
           res.append([a1[i],a1[j],a.index(a1[i])+1,a.index(a1[j])+1])
           i = i + 1
           j = j -1
       elif(a1[i]+a1[j] > target):
           j = j -1
       else:
           i = i +1
   return(res)

if __name__ == "__main__":
   a = [1,8,3,5]
   print(sum_two_1(a,int(4)))

好了,就先这两种方案。你看到没?其实这两种方案可以解决多个解的问题哟。不信啊,你撸下代码试试看。


第二题 时间数据处理

题目:以上为百度新闻的⼏几个新闻检索结果,对应的新闻发布时间形式各不不相同,请编程对以上时间数据格式进⾏行行转换处理理,使其输出格式为标准的”yyyy-MM-dd HH:mm:ss”格式

题目解读:
1、需要处理的数据

  • xx秒前、xx分钟前、xx小时前

  • 统一格式:转换为yyyy-MM-dd HH:mm:ss

2、不一致的数据处理

  • 将xx秒前等数据与xx年xx月xx日 xx:xx数据处理成格式一致的

分析:
1、先判断是否有字存在,再来判断是分钟中哪一种情况,之后将获取的数字(字符格式)转为数值格式,最后使用datetime包,利用当前的时间来反向推出时间。代码如下:

if i[-1] == '前':
   a = i.split("前")[0]
   if a[-1] == '秒':
       b = now - timedelta(seconds=int(a[:-1]))
       data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
   if a[-2:] == '分钟':
       b = now - timedelta(minutes=int(a[:-2]))
       data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
   if a[-2:] == '小时':
       b = now - timedelta(minutes=int(a[:-2]))
       data.append(b.strftime("%Y-%m-%d %H:%M:%S"))

2、做格式转换,将当前的时间格式转为我们预定的格式即可,这里仍是用到datetime包。发现了没有,原数据是没有秒级时间的,所以需要加上去。代码如下:

time_str1 = i + ":00"
time = datetime.strptime(time_str1, '%Y年%m月%d日 %H:%M:%S')
data.append(time.strftime("%Y-%m-%d %H:%M:%S"))

你对两类情况都做了分析,还写了代码,是否可靠呢?要不拉出来跑一跑结果,怎么样?哼,谁怕谁呢?来上代码:

# -*- coding: utf-8 -*-
from datetime import datetime
from datetime import timedelta
def date_deal1(time_str):
   now = datetime.now()
   data = []
   for i in time_str:
       if i[-1] == '前':
           a = i.split("前")[0]
           if a[-1] == '秒':
               b = now - timedelta(seconds = int(a[:-1]))
               data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
           if a[-2:] == '分钟':
               b = now - timedelta(minutes = int(a[:-2]))
               data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
           if a[-2:] == '小时':
               b = now - timedelta(minutes = int(a[:-2]))
               data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
       else:
           time_str1 = i + ":00"
           time = datetime.strptime(time_str1, '%Y年%m月%d日 %H:%M:%S')
           data.append(time.strftime("%Y-%m-%d %H:%M:%S"))
   return data

if __name__ == "__main__":
   time_str = ['2017年07月16日 21:00','6分钟前','20小时前','6秒前']
   print (date_deal1(time_str))

测试结果

['2017-07-16 21:00:00', '2017-07-24 17:08:05', '2017-07-24 16:54:05', '2017-07-24 17:13:59']

你看,是不是很符合要求啊。欢迎指正不足点,谢谢!

【后期预告】

  • python的库datetime学习


本文代码及APP获取方式:下图扫码关注公众号,在公众号中回复 笔试01 可~

联系作者:当你对文章有任何疑问和建议可以在公众号直接发消息,我们看到都会回复哒,一起交流数据~


推荐 0
本文由 数据取经团 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册