
2021年5月
麻利麻利吼
这个作者很懒,什么都没留下…
展开
-
2020-5-31 数组中只出现一次的两个数字
题目:数组中只出现一次的两个数字描述一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。示例1输入:[1,4,1,6]返回值:[4,6]说明:返回的结果中较小的数排在前面数组全部元素异或。因为有两个元素不等,所以相同数字相消,结果一定不为0找到右边第一个不相等的位,即异或结果右边第一个1,并设置一个变量 t ,只有该位为1数组均异或 t ,结果为0的为一组,大于0的为一组。可以将数组中两个不相等的数字分开再将两组分别异或可以获取两个数原创 2021-05-31 21:04:20 · 147 阅读 · 0 评论 -
2021-05-30 和为S的连续正数序列
题目 和为S的连续正数序列描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序示例1输入:9返回值:原创 2021-05-30 21:25:24 · 139 阅读 · 0 评论 -
2021-05-28 数字在升序数组中出现的次数
class Solution {public: int GetNumberOfK(vector<int> data ,int k) { //二分查找 int low = 0; int high = data.size()-1; int mid = 0; int count = 0; while(low <= high) { mid = (low+原创 2021-05-30 20:59:21 · 134 阅读 · 0 评论 -
2021-05-25 整数中1出现的次数(从1到n整数中1出现的次数)
class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int chu = n; int yu = n%10; int sum = 0; int e = 1; while(chu) { chu /=10; if(yu == 0) sum += c原创 2021-05-27 20:46:37 · 166 阅读 · 0 评论 -
2021-5-22最小的K个数
题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组冒泡排序class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> vec; int len = inpu原创 2021-05-23 20:49:38 · 89 阅读 · 0 评论 -
2021-5-21栈的压入弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入[1,2,3,4,5],[4,3,5,1,2]返回值false解法1:设置一个临时数组isPop,记录遍历出栈数组时已经出栈的元素。其中位置关系按照入栈数组。遍历出栈数组原创 2021-05-21 16:47:55 · 105 阅读 · 0 评论 -
20201-5-17 调整数组使奇数在偶数前面
题目 调整数组使奇数在偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。示例1输入[1,2,3,4]返回值[1,3,2,4]示例2输入[2,4,6,5,7]返回值[5,7,2,4,6]解1 设置两个数组设置一个奇数数组、和偶数数组,遍历一半array,加入对应数组,然后将偶数数组拼接到奇数数组后面。class Solution {public:原创 2021-05-17 11:00:12 · 71 阅读 · 0 评论 -
2021-5-16二进制中1的数目
题目输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入10返回值2解1 位移动由于负数符号位为1,对于数字的右移,补位为符号位,因此判断时,我们先将n的符号位转0,转成一个整数temp,然后判断temp的1位数有几位。判断方法:设置一个计数变量通过循环,循环条件为temp不为0。每次将temp&1,获取最后一位的值。如果是1,nCount+1;否则不加temp右移一位。当temp为0,即没有1了。此时再判断n的大小,小于0则nCount+原创 2021-05-16 17:03:03 · 167 阅读 · 0 评论 -
2021-05-14 矩阵
题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:解我们绘制出n为1~5的所有可能的图案:通过查找规律,在求结过程中number图案个数过程中:当第一个方块为类型为竖直的,获取number-1的可能图案数即可当前两个方块为水平,获取number-2的可能图案数即可因此初始值:number = 0 :0number = 1 :1number = 2 :2num原创 2021-05-15 11:02:13 · 96 阅读 · 0 评论 -
2021-05-11 构建乘积数组
题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+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输入[1,2,3,4,5]返回值[120,60,40,30,24]解实例:A:2,4,1,9,原创 2021-05-11 16:42:01 · 77 阅读 · 0 评论 -
2021-05-09不用加减乘除做加法
解如果无法通过加减乘除,则思路只能通过位运算。不带进位,求出结果sum求出所有的进位carrycarry左移一位(因为进位是针对于当前相加的前一位)重复1,直到carry = 0;class Solution {public: int Add(int num1, int num2) { int carry = 0; int sum = 0; while(num2 != 0){ sum = num1 ^ num2原创 2021-05-09 21:27:47 · 78 阅读 · 0 评论 -
2021-05-05 旋转数组求最小值 求字符串中第一个只出现一次的字符
旋转数组求最小值题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例1输入:[3,4,5,1,2]输出:1解:该题采用二分查找的方法。首先取中间元素,然后和数组左边元素进行比较。由于数组是部分有序:如果arr[ mid ] < arr[ low ],说明 mid 左部不是一直递增的,一定存在最小值转折点(包括arr[ mid ]原创 2021-05-05 09:23:36 · 107 阅读 · 0 评论 -
2021-05-04 栈实现队列
栈实现队列一个作为入队栈(stack1),一个作为出队栈(stack2)入队:元素入stack1;出队:若stack2有元素:直接出栈stack2;若stack2无元素:stack1元素转入stack2 ,再出栈stack2;class Solution{public: void push(int node) { while(!stack2.empty()) { int data = stack2.top();原创 2021-05-05 09:10:38 · 70 阅读 · 0 评论 -
2021-5-3 二维数组中查找
题目 二维数组中查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。解4根据矩阵的特点,我们从矩阵的第一行最后一列(arr[ 0 ][ cols-1 ])的点出发,原创 2021-05-03 14:18:21 · 86 阅读 · 0 评论