![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
Cohen_ina
代码像诗一样优雅
展开
-
面试题43: 1~N整数中1出现的次数
方法一:/**@algorithm description:统计1~N中所有数中1出现的次数的算法:step1: 遍历1~N中的所有数字step2: 对每一个数字的每一位是否位1进行检查@Time complexity of the algorithm: O(nlogn)@Spatial complexity of the algorithm: NA**/#include <stdio.h>#include <stdlib.h>/**@function:原创 2021-09-12 15:38:18 · 105 阅读 · 0 评论 -
【剑指Offer】 面试题4 | 二维数组中的查找 | 详细图解
【题目描述】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个整数,判断数组中是否含有该函数。解法一:【思路】首先选取数组中右上角的数字。如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除该数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的原创 2020-11-19 15:52:22 · 219 阅读 · 0 评论 -
【剑指Offer】面试题3 | 数组中重复的元素 | 图示详解
【题目描述】 在一个长度为n的数组里的所有数组都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了多少次。请找出数组中任意一个重复的数字。例如,输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出的重复的数字是2或者3解法一:【思路】解决这个问题的一个简单的方法是把输入的数组进行排序。从排序的数组中找出重复的数字是一件很容易的事情,只需要重头到尾扫描排序后的数组就可以了。排序一个长度为n的数组需要O(nlogn)的时间【代码实现】#def原创 2020-10-24 22:50:42 · 156 阅读 · 0 评论 -
【剑指Offer】面试题3_1 | 不修改数组找出重复的元素 | 详细算法图解
【题目描述】在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出的重复数组是2或者3解法一:【思路】这一题看起来和上一题类似。但是由于题目要求不能修改输入的数组,我们可以创建一个长度为n+1的辅助数组,然后逐一将原数组的每个数字复制到辅助数组。如果原数组中被复制的数字是m,则把它复制到辅助数组中下标为m的位置,这样就很容易发现那些元原创 2020-10-31 22:28:50 · 177 阅读 · 0 评论