
刷题
文章平均质量分 58
坚持每周更五次!!
jjjstephen
就读于天津大学,在做视觉检测相关研究。
技能:软件开发
正在开发技能:ML&DL Paper撰写
待开发技能:硬件开发、硬件设计
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【刷题---数组、递归和循环】基础【不断更新...】2021.03.11已更
一、基本概念 1.数组的基本概念 (1)由于数组中的内存是连续的,于是可以根据下标在O(1)的时间内读写任何元素(时间效率很高) (2)STL的vector每次扩容是新的容量是前一次的两倍。 STL扩容过程: 把之前的数据复制到新的数组中,再把之前的内存释放。(每一次扩充数组时都有大量的额外操作,这对时间性能有负面影响,因此使用动态数组时要尽量减少改变数组容量的大小的次数) 注:如果使用vector扩容得到的容量远远大于预期的容量可以使用成员函数 shrink_to_fit()该成员函数可以使得vecto原创 2020-12-15 20:18:53 · 351 阅读 · 2 评论 -
LeetCode 31:下一个排列
题目: 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须** 原地 **修改,只允许使用额外常数空间。 示例1: 输入 :nums = [1,2,3] 输出:[1,3,2] 示例2: 输入 :nums = [3,2,1] 输出:[1,2,3] 示例3: 输入 :nums = [1,1,5] 输出:[1,5,1] 示例4: 输入 :nums = [1] 输出:[1.原创 2021-03-11 19:47:09 · 146 阅读 · 0 评论 -
LeetCode 442:数组中的重复数据
索引请参考:系列目录 题目: 给定一个整数数组a,其中1≤a[i]≤n(n为数组长度),其中有些元素出现两次而其他元素出现一次,找到所有出现两次的元素 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入[4,3,2,7,8,2,3,1] 输出[2,3] 解答 class Solution { public: vector<int> findDuplicates(vector<int>& nums) { vecto原创 2021-03-10 21:40:49 · 290 阅读 · 0 评论 -
LeetCode 1:两数之和
索引请参考:系列目录 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例:输入nums = [2,7,11,15],target = 9 输出:[0,1],原因: nums[0] + nums[1] = 2 + 7 = 9 分析: 思路1: 暴力法:两个循环进行不断的判断,若满足条件返回索引值。否则返回空数组 思路2: 利用uno原创 2021-01-01 19:54:19 · 118 阅读 · 0 评论 -
剑指offer面试题13:机器人的运动范围
索引请参考:系列目录 题目: 地上有一个m行n列的方格。一个机器人从坐标(0,0)的各自开始移动,它每次可以向左右上下移动一个各自,但不能进入行坐标和列坐标数位之和大于k的格子。 示例: k = 18,机器人能够进入(35,37)原因是:3+5+3+7 = 18,但是它不能进入方格(35,38),因为3+5+3+8 = 19. 分析: 思路: 本题的主要思路时深度优先搜索,当然广度优先搜索也可以 给出一个6*20的矩阵,k = 9 (1)将矩阵中的所有元素初始化为0,如果机器人已经进入该方格,则原创 2020-12-30 20:40:26 · 116 阅读 · 0 评论 -
爱奇艺2019面试题真题
索引请参考:系列目录 题目: 牛牛的老师给出一个区间的定义:对于X<=y,[x , y]表示x到y之间(包括x和y)的所有连续整数集合 如:[3 , 3] = {3}, [4,7] = {4, 5, 6, 7} 牛牛现在有一个长度为n的递增序列,牛牛想知道需要多少个区间合并起来等于这个序列。 示例:输入{1,2,3,4,5,6,7,8,9,10} 输出:1 示例:输入{1,3,5,6},输出3 分析: (1)数组特征:递增序列 (2)条件:只要最后一个元素减去前一个元素大于1,则这两个元素需要原创 2020-12-29 18:52:57 · 350 阅读 · 0 评论 -
剑指offer面试题66:构建乘积数组
索引请参考:系列目录 题目: 给定一个数组A[0,1,…,n-1],构建一个数组B[0,1,…,n-1],其中B中的元素B[ i ] = A[0] * A[1] * … * A[n - 1]。不能使用除法。(注:规定B[0] = A[1] * A[2]* …* A[n - 1],B[n - 1] = A[0] * A[1]* …* A[n - 2]) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。 分析: 思路1:暴力法(具体请参考代码) 思路2: left[i] = A[0]原创 2020-12-28 21:09:48 · 160 阅读 · 0 评论 -
剑指offer面试题57:和为S的两个数字
索引请参考:系列目录 题目: 输入一个递增排序的数字和一个数字S,使得他们的和正好是S。如果有多对数字的和等于S,输出2个乘积最小的。 示例: 输入: {1,2,3,3,4,5,6} 和 6 输出: {2,4} 分析: 思路1: 利用容器set或者map(multi)的成员函数 (1)将数组放入set或者map(multi)中 (2)遍历 + 判断 m_elem = s - array[i] if(multimap::count(m_elem)) //放入数组中 如果结果数组中的个数大于1,原创 2020-12-26 15:43:08 · 160 阅读 · 0 评论 -
剑指offer面试题53:在排序数组中数字出现的次数
索引请参考:系列目录 首先声明:本题是受次尝试完全在Ubuntu平台上发布。包括写博客、调试代码。牛客测试结果等。每天进步一点点! 题目 统计一个数字在排序数组中出现的次数 示例: 输入: {1,2,3,3,3,3,4,5} 和 3 输出 4 分析: 思路1: (1)讲数组放入multiset中 (2)利用成员函数count寻找元素个数 思路2:二分法 看到排序数组最直接的方法就是想到二分法了吧~。具体算法原理和用处敬请期待。各位小伙伴也可以先上网搜一搜~ 本题中通过二分法去查找数字的原创 2020-12-25 11:43:05 · 129 阅读 · 0 评论 -
剑指offer面试题51:数组中的逆序对
索引请参考:系列目录 题目: 在数组中的2个数字,如多前面的一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数字,求出这个数组中给逆序对的个数总数。 示例: 输入{7,5,6,4} 输出:5 分别时 (7,6)、(7,5)、(7,4)、(6,5)、(6,4)、(5,4) 分析: 就目前数组知识来说,只能采取暴力法。 将数组从大到小进行排序 将排序后的数组两两组合 int inversePair(std::vector<int> & data) { //1原创 2020-12-24 20:26:19 · 194 阅读 · 1 评论 -
剑指offer:把数组排列成最小的数
索引请参考:系列目录 题目: 输入一个整数数组,把数组例多有数字拼接起来排成一个数,打印出来能拼接出来的所有数字中最小的一个。 示例: 输入:{3,32,321} 输出:321323 分析: 思路1: 该题目主要是对排列组合的考察。如果熟悉对STL熟悉的小伙伴,应该是一道很简单的题目 思路2: 对输入数组转化成string类型,然后对其进行升序排序。得到的便是最小是最小的拼接数 方法1: std::string ret(number.size(), '9'); std::sort(numb原创 2020-12-23 17:27:34 · 126 阅读 · 0 评论 -
剑指offer面试题40:最小k个数
索引请参考:系列目录 题目: 输入n个整数,找出其中最小的k个数。 示例: 输入{4,5,1,6,2,7,3,8} 输出最小的4个数是1,2,3,4 分析: 该题目实质是对排序算法的一种考察。其中在节体过程中采用了STL sort()采用的是优化版本的快速排序,在最后阶段采用直接插入排序。因此时间复杂度为O(N·log(N))。 题目简单,具体参考代码 std::vector<int> getLeastNumber(std::vector<int> & array原创 2020-12-22 10:40:16 · 136 阅读 · 0 评论 -
网易2020笔试题:顺时针逆时针交叉填充数组
索引请参考:系列目录 题目: 定义N维蛇形方阵的生成方式如下:把1~N^2依次填入矩阵中,并且填入的时候,会从矩阵最外圈填,当最外圈填完后,会继续填写此外圈,一开始填写外圈的时候,会按照顺时针填入数字,到此外圈的时候,会用逆时针填入,在一圈则又会采用顺时针填写的方式,以这种顺时针、逆时针交错的填写的方式,直到所有数字填写完毕。 示例: 假设N= 7,7维方阵为: 给定N,给出带哦个需要查询的坐标(x,y),请输出N维蛇形方阵中(x,y)的值是多少。 假设左上角为(0,0),x代表行号,从上到下依次为0~原创 2020-12-21 16:26:11 · 407 阅读 · 0 评论 -
剑指offer面试题29:顺时针打印矩阵
索引请参考:系列目录 题目: 输入一个矩阵,按照从外向里顺时针依次大一每一个数字 示例: 输入 输出:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 思路: (1)分析循环打印条件 假设 行数为 height 列数 width (1)打印第一圈左上角的坐标(0,0),第二圈的左上角坐标(1,1),以此类推注:做左上角坐标中行坐标和列坐标总是相同的 即在矩阵中选取左上角为(start,start)的一圈作为分析目标 (2) 对于5*5矩阵矩阵而言原创 2020-12-21 11:59:30 · 129 阅读 · 0 评论 -
剑指offer面试题21:调整数组顺序奇数位于偶数前面
索引请参考:系列目录 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 示例: 输入:2,1,4,9,7,6,3,5,8 输出:1,9,7,3,5,2,4,6,8 分析: 将本题分为两种思维模式:人对数组进行排列的模式和机器对数组进行排列的模式 人对数组进行排列的模式:看到一组数,从前往后进行依次对比然后进行排序 机器对数组进行排列的模式:双指针进行快速比较排序 思路1: 遍历数组,若数组为偶数,则元素的位置不变 若数原创 2020-12-20 09:46:14 · 163 阅读 · 1 评论 -
剑指offer:青蛙跳台阶问题
索引请参考:系列目录 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级台阶共有多少总跳法? 例:输入 1 输出 1 输入3 输出 3 输入5 输出 8 分析: 分析题目规律: 1级 输出 1 2级 输出2 3级 输出3 4级 输出4 5级 输出 8 6级 输出13 综上考虑,该规律符合斐波那契数列的规律 具体算法: int jumpFloor(int number) { int result[2] = {1,2}; if(number < 3)原创 2020-12-18 15:47:14 · 139 阅读 · 1 评论 -
剑指offer面试题10:求斐波那契数列的第n项
索引请参考:系列目录 题目: 写一个函数,输入n,求斐波那契额数列的第n项。 斐波那契额数列的定义如下: 分析: 利用上述公式计算第n项斐波那契项可以实现,但是由于递归造成的时间可空间消耗很大。思路(2)对该算法进行了修改,使得不断地递归变成了有限项的迭代,大大减少了时间的消耗和空间消耗。 思路: (1)按照上述公式实现该算法: (2)其实斐波那契数列从第二项开始的规律是第n项等于前两项的和。 方法:把已经得到的数列中间项保存起来。具体实现见代码。 方法(1): int fibonacc原创 2020-12-17 16:13:13 · 550 阅读 · 0 评论 -
剑指offer面试题4:二维数组中的查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。 例: 输入: 查找:7 返回true 5 返回false 思路: 从此有序数组中选取一个数字,分三种情况: (1)当数组选取的数字刚好和要查找的数字相等时,结束查找过程 (2)选取的数字小于要查找的数字,根据数组排序的规则,要查找的数字应该在当前 选取位置的右边或下边 (3)选取的数字大于要查找的数字原创 2020-12-16 20:14:46 · 174 阅读 · 0 评论 -
剑指offer面试题3:数组中的重复数组
题目: 在一个长度为n的数组里所有数字都在0~n-1的范围内。数组中的某些数字是重复的,但不知道有几个重复数字,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 例:输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3 思路: (1) 将所有元素放入hash table中 注:放入hash table的格式 value_key (2)遍历: 利用multimap成员函数count获取每一位有在hash table中的个数。 如果其值大于1,则说明h原创 2020-12-15 21:02:42 · 155 阅读 · 0 评论