九章算法刷题总结

1、实现一个memcpy函数:memcpy(void *p, void *q, unsigned len);

   思路:1、注意p、q是否为NULL

      2、内存重叠的情况

      3、每次copy字节数:32系统可以选择4字节如int,64系统可以选择8字节如long long

2、STL中vector的实现原理

    vector本质其实就是一个动态内存分配的数组,内存分配策略(元素个数):

      0->1->2->4->8->16->...

    相关方法:可以通过capacity函数获取当前可以容纳的元素个数

         通过shrink_to_fit函数可以紧缩内存,把多余的空闲内存收回(C++11支持)

3、给定N张扑克牌和一个随机函数,设计一个洗牌算法

  问题转化:相当于设计一个函数可以随机1~54中的所有数,每个数仅出现一次且概率相等

  思路:1、开一个大小为len的数组ary,数组的元素值与下标相同

     2、index = random(0, len - 1),本次随机到的值是ary[index];

       3、交换ary[index] 与 ary[len - 1]的值, 然后len--

     4、进入下次随机

4、25匹马,5个跑道,每个跑道最多能有5匹马进行比赛,最少比多少次能比出前3名?前5名?

  思路:1、首先将25匹马分为5组,每次进行一次比赛

     2、把每组的第一名拿出来进行一次比赛(决出第一名)

     3、第一名所在组:取出其第2、3名

        第二名所在组:取出其第1、2名

        第三名所在组:取出其第1名

        进行一次比赛,其中的第1、2名分别为第二名和第3名

      总共7次(5名的大家推一下就OK)

5、100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数?

  思路:内存足够的情况下:

       快速排序算法或者二分法统计都可以

     内存不足的情况下:

       1、二分法(对于32的int最多32次)就行了

       2、hash分到小文件中:hash函数(可以取32位中的前10作为hash值)划分成1024个文件

          统计之后如果内存足够了可以直接采用快速排序,否则继续划分小文件

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

九章算法刷题总结的相关文章

九章算法

九章算法 前言 第一天的算法都还没有缓过来,直接就进入了第二天的算法学习.前一天一直在整理Binary Search的笔记,也没有提前预习一下,好在Binary Tree算是自己最熟的地方了吧(LeetCode上面Binary Tree的题刷了4遍,目前95%以上能够Bug Free)所以还能跟得上,今天听了一下,觉得学习到最多的,就是把Traverse和Divide Conquer分开来讨论,觉得开启了一片新的天地!今天写这个博客我就尽量把两种方式都写一写吧. Outline: 二叉树的遍历

分治习题--九章算法培训课第三章笔记

1.Maximum Depth of Binary Tree 这是道简单的分治习题了 分: 左子树最大深度 右子树最大深度 治: 最大深度等于max(左子树,右子树)+1 public class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } int left = maxDepth(root.left); int right = maxDepth(root.right); retur

【九章算法免费公开课】从 strStr 谈面试技巧与 Coding Style

刷题到底刷到什么程度才够? 题目不会直接说不会么? 为什么题目都做出来还是老是挂? 觉得面试官总在为难你? 从来就搞不懂动态规划是什么? 如何正确的骑驴找马? 什么是正确的Coding Style? 面试中该与面试官如何沟通? 本周日,九章算法<算法班>金牌讲师-段誉 为您倾情奉献,同时提供实时在线问答环节,解答您最想知道的面试"内幕"! 讲座时间: 北京时间6月14日 09:30-11:30 (周日) 美西时间6月13日 18:30-20:30(周六) 报名链接: htt

九章算法 基础算法 强化算法 系统设计 大数据 安卓 leetcode 高清视频

leetcode 直播视频讲座录像 九章算法视频录像,PPT 算法班,算法强化班,Java入门与基础算法班,big data项目实战班,Andriod项目实战班 九章算法下载 九章算法面试 九章算法leetcode 九章算法答案 九章算法mitbbs 九章算法班 九章算法ppt 九章算法录像 九章算法培训 九章算法微博 leetcode 视频 九章算法偷录 算法培训 算法班课程大纲: 1 从strStr谈面试技巧与Coding Style(免费试听) 2 二分搜索与旋转排序数组 Binary S

CS3K.com 九章算法 课程 视频 录制 免费下载

[ 九章算法班 ] 课程 完整 视频 录制 免费下载最新一期 << 九章算法班 >> 课程完整视频录制, 课件打包下载, 百度云盘 地址 ! 本站长期提供九章算法免费课程视频 与 课件打包下载 Dribbble 视频System Design 探讨Distributed File System 研究MiniLinkedin 探讨Map Reduce 分析Array 视频Design Tiny Url 教学Android 设计Divide Conquer 研究PageRank 视频

九章算法--分配抄书员

思路: (1)最常见的思路就是dp:状态表示为dp[i][j],表示前j个人抄i本书最少时间:dp[i][j] = min(max(dp[k][j-1],sum(k+1,i))) (j<=k<i): 解释一下min,max操作,由于抄书是并行,所以就是取所有人时间里的最大值 (2)二分+贪心:我自己一开始的思路是总和除以人数,然后贪心,但是这样可能不是最优解.但是我们可以计算每个人最大和最小抄书的时间,然后二分搜索这个时间即可. 下面代码是DP:但是没有考虑边界情况只是写来熟悉算法流程. 1

九章算法 课程 视频 录制 免费下载 cs3k.com

cs3k.com [ 九章算法强化班 ] 课程 完整 视频 录制 免费下载 最新一期 << 九章算法强化班 >> 课程完整视频录制, 课件打包下载, 百度云盘 地址 ! 本站长期提供九章算法免费课程视频 与 课件打包下载 Big Table 教学TodoList 探讨System Design 分析Rate Limiter 视频Binary Tree 研究Dribbble 设计Big Data 研究PageRank 面试Google Suggestion 设计Location Ba

九章算法真的能帮助我找到好工作吗? - 程序员- 知乎

我有朋友上了,FLG拿到两个 offer,最终package数字很好.他刷了大概至少3个月题,leetcode啥的+九章,实际上他一年前就在刷题了,拿msft内部练手.当然也没啥不对,钱多即正义.刷题有刷题的意义,确实能锻炼思维,也确实比配置db/nosql/啥的更有意思一些.此外,我这朋友本身也是微软seattle的senior sde (请不要问为毛他有那么多时间刷题...,也不要介意为啥微软的senior sde还需要这么疯狂刷题还去上算法班----唉,所以别人能放下身段参加算法班后拿几个

九章算法第二天,二分搜索

二分搜索分两类,一类可以直接看出来是二分搜索 另一类很难直接看出来是二分搜索, 最重要的是理解二分搜索的思想, 根据有序集合这个特性,每次通过O(1)的时间复杂度 ,使得搜索的规模减半, 同红黑树查找类似(红黑树也是在增加了空间复杂度的情况下,减少了时间复杂度,每次比较,然后就会使得搜索规模减半) 九章讲的二分模板,我觉得比较好,这样在写代码的时候 不会犯错 造成死循环 ,而且可以处理两个整数相加溢出的问题 ------------ public class Solution { /** * @