手撕代码记录贴

才发现牛客网发帖子是可以编辑的T……T
春招接近尾声,自己尚有很多很多的不足,尤其是现场代码能力方面需要加强。
接下来一段时间会整理各路大佬的手撕代码题目和题解,希望大家多多发自己面试遇到的题目啦~
因为是自己写的,不一定是最优解,欢迎小伙伴们来讨论哇~~
(自己只熟悉Python,所以。。。,还是好好学习C++吧)
自己遇到的:
1. 剑指offer 判断节点环 (快慢指针求解)
2. 翻转数组 
b[j*col+i]=a[i*row+j]
3. 有序数组二分查找目标值
4. Leetcode 69. Sqrt(x) 求平方根
class Solution(object):
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """        
        start=0
        end=(x+1)/2
        while(start<end):
            mid=start+(end-start)/2
            tmp=mid*mid
            if(tmp==x):
                return mid
            elif tmp<x:
                start=mid+1
            else:
                end=mid-1
        tmp=end*end
        if(tmp>x):
            return end-1
        else:
            return end
5. Leetcode 4. Median of Two Sorted Arrays 有序数组的中位数
思路:分治
class Solution(object):
    def findDigit(self,nums1,nums2,idx):
        if len(nums1)>len(nums2):
            return self.findDigit(nums2,nums1,idx)
        if len(nums1) == 0:
            return nums2[idx-1]
        if idx == 1:
            return min(nums1[0],nums2[0])
        l1_mid = min(idx/2,len(nums1))
        l2_mid = idx-l1_mid
        if nums1[l1_mid-1] <= nums2[l2_mid-1]:
            return self.findDigit(nums1[l1_mid:],nums2,l2_mid)
        else:
            return self.findDigit(nums1,nums2[l2_mid:],l1_mid)
    def findMedianSortedArrays(self,nums1,nums2):
        '''
        :param nums1: List[int]
        :param nums2: List[int]
        :return: float
        '''
        total_length = len(nums1) + len(nums2)
        if total_length%2 == 1:
            return self.findDigit(nums1,nums2,total_length/2+1)
        else:
            return (self.findDigit(nums1,nums2,total_length/2)+self.findDigit(nums1,nums2,total_length/2+1))*0.5
========别人面试遇到的题目=======
1. Leetcode 85. Maximal Rectangle (头条、腾讯)
思路:转化Leetcode 84 求直方图中的最大面积问题,单调栈求解
class Solution(object):
    def maximalRectangle(self,matrix1):
        m = len(matrix1)
        if m == 0: return 0
        n,maxValue = len(matrix1[0]),0
        dp = [[0 for i in range(n)] for j in range(m)]
        for i in range(m):
            for j in range(n):
                if i==0 and matrix1[i][j] == '1':
                    dp[i][j] = 1
                if i>0 and matrix1[i][j]=='1':
                    dp[i][j] = dp[i-1][j]+1
        for col in range(m):
             maxValue=max(maxValue,self.largestRectangleArea(dp[col]))
        return maxValue
    
    def largestRectangleArea(self, heights):
        heights.append(0)
        stack = []
        area = 0
        for i,h in enumerate(heights):
            if stack == [] or heights[stack[-1]]<=h:
                stack.append(i)
            else:
                while(stack and heights[stack[-1]]>h):
                    idx = stack.pop()
                    left = stack[-1] if stack else -1
                    area = max((i-left-1)*heights[idx],area)
                stack.append(i)
        return area
全部评论
好多…我只撕过三个代码,一个快排就不说了,还有哈夫曼树创建和最长公共连续子序列
点赞 回复 分享
发布于 2018-04-25 11:15
1
点赞 回复 分享
发布于 2020-02-10 08:53
https://www.nowcoder.com/discuss/71505?type=2&order=0&pos=22&page=1 题目来源 头条 一面编程题 翻转二叉树  Leetcode 226. Invert Binary Tree class Solution(object):     def invertTree(self, root):         """         :type root: TreeNode         :rtype: TreeNode         """         if root:               root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)           return root   最大连续子串和  Leetcode 53. Maximum Subarray class Solution(object):     def maxSubArray(self, nums):         """         :type nums: List[int]         :rtype: int         """         if nums == []: return 0         dp = ret= nums[0]         for i in range(1,len(nums)):             dp = max(dp+nums[i],nums[i])             ret = max(ret,dp)         return ret 二面编程题 给一棵边权树树找到最大路径 可以先考虑不带权值的 Leetcode 543. Diameter of Binary Tree 最大路径实际上可以转化为求叶子节点之间的最长距离 class Solution(object):     def diameterOfBinaryTree(self, root):         self.diameter = 0         self.depth(root)         return self.diameter      def depth(self,root):         if not root: return 0         left = self.depth(root.left)         right = self.depth(root.right)         self.diameter = max(self.diameter,left+right)         return max(left,right)+1 其实带权值和不带权值的区别在于不带权值的树其实权值为1 需要修改的点在  self.diameter = max(self.diameter,left+right+root.lweight+root.rweight) return max(left+root.lweight,right+root.rweight) 三面编程题 给一个字符串和单词列表,判断字符串能不能由这些单词组成 Leetcode 139 Word Break 思路是用数组dp,dp[i] 表示 字符串 s[:i+1] 能否由单词列表中的单词组成 那么可以得到 dp[i] = dp[j] and (s[j:i+1]  in wordlist) for j in j in range(i) class Solution(object):     def wordBreak(self, s, wordDict):         """         :type s: str         :type wordDict: List[str]         :rtype: bool         """         worddict = {}         for word in wordDict:             worddict[word] = True         dp = [True]+[False for i in s]         for i in range(len(s)):             for j in range(i+1):                 if s[j:i+1] in worddict and dp[j]==True:                     dp[i+1] = True                     break         return dp[-1] 股票买卖问题可以参见 https://blog.csdn.net/tinkle181129/article/details/79506010 Leetcode 121. Best Time to Buy and Sell Stock 贪心思想 class Solution(object):   def maxProfit(self, prices):   if prices == []: return 0 minNum,ret = prices[0],0 for p in prices: minNum = min(minNum,p) ret = max(ret,p-minNum) return ret
点赞 回复 分享
发布于 2018-04-26 10:53

相关推荐

11-27 22:23
已编辑
贵州大学 Java
鼠鼠是本科软件工程专业,昨天接了长三角数链的后端开发面试面试自我介绍完面试官就来了句:“啧,你是本科生?”这里我还没在意,后续问我rabbitmq怎么实现异步的,我回答问题时候有点跑偏了立马就打断我让我按照他问的回答,然后问我在项目中的收获时,我就说redis的缓存穿透、击穿、雪崩以及如何解决的,说的时候都能听到面试官在那里“啧”,最后问我还有什么问题要问他,我就问了贵公司的晋升机制是什么样的,面试官也不回答然后反问我的职业规划是什么,我就说继续在本行业深耕几年,如果学得好的话希望能到管理岗,面试官来了句:“你几年就学的好吗?”,我????????????,然后又问我觉得什么是管理岗,我就说我实习时项目经理干的活,面试官来了句:“你这也不是管理岗啊,你这不就是一个小组长吗?”,这都要怼我,去年成立的一个国企就这么叼,我就问:“贵公司是不是不要本科,刚刚一直说我是本科生”,面试官说“是的,我们一般不要本科生,除非特别优秀的本科生”,那你校招学历要求写本科干嘛?????面试一上来摄像头也不开,也不说自己是谁,直接让我自我介绍,结束时啥也没说就退了。上海长三角数链还是太屌了,问几个问题对学历的瞧不起毫不掩饰,我学历不符合干嘛还叫我面试
点赞 评论 收藏
分享
双非本,985硕材料天坑怒转嵌入式先叠个甲,我不是大佬。本人是双非本,985硕士。二战上岸985,在我其它小红书上面有我二战的记录。前言:在研一上学期的时候我就知道大事不妙,要做材料。合成量子点,我就知道完了。我就想着如何转行了,一开始的时候我选择了三个方向:嵌入式、FPGA、光学设计。之前我准备做FPGA,但是我在小红书上面看了之前的师兄师姐找工作,就知道完了。看本科学历,还要看教研室的项目,再谈光学设计,基本工资低,加班强度大,项目开源的不多,所以就选择了嵌入式。因为我在小红书看了一个师兄也是双非本,电子科大硕,上岸了高通。所以我觉得我的背景差不多,并且嵌入式的应用范围比较广,工作岗位应该比较多。所以已经确定转这个方向了。学习:牛魔的,学这个嵌入式我真是草了。东西又多又长,一开始研一上学期看了C语言的课程100小时,鹏哥的。大概就到研一的上学期,因为上学期还要上课,还要带考研的,时间花的不是太多,但是有时间就会学。C语言结束后,研一下学期又开始学51单片机同时进行数据结构的学习。(51单片机可以不用学),之后又开始学32单片机了+操作系统。研二上学期简历没有一个项目,就想着办法开始买项目了,后续大家也就知道了,被骗了!!然后继续学操作系统和Linux,包括驱动和应用。看的是韦东山的视频,还有一本黑书,关于操作系统的。好好好,学了这么多!感觉狗屁都不会,并且到现在一个项目都没有,钱也花了巨多!被骗麻了。现在到了研二下学期了大概3月份左右,期间一直用的机构垃圾项目,在Boss上面疯狂的投递,我记得第一家面的是一家重庆的公司,我草,被拷打的不知道姓什么了。不过没关系每面一次,都总结一次。但是自己的基础还是太差了,没有人要,学历也没用了。事情的反转来了,在4月份左右有一个公司要我。离学校也不远,那个老板就直接说你过来,我以为是什么皮包公司。把我嘎了呢,但是还是鼓起勇气去了,运气还行。是做示波器的,进去就是一顿猛学,但是干了两个月一分钱工资没有,好在东西到手了!!后面就是靠这个东西起家了。后面就是开始找暑期实习了,拿到了不少offer,例如momenta(我的白月光)、景嘉微、南芯、经纬恒润、北京超新星科技有限公司等等。这个大概就是我的学习路线以及心得,大家有什么不懂再问我了。下一期更新如何和我的导师斗智斗勇去实习!!&nbsp;嵌入式开发&nbsp;&nbsp;材料自救指南
点赞 评论 收藏
分享
11-07 10:54
枣庄学院 Java
点赞 评论 收藏
分享
评论
6
77
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务