题目描述 给定一个数组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[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]=C[i-1]*D[i-1],也就是我们要求出 C[i] 和 D[i] 就行,相当于牺牲空间复杂度来换时间复杂度. 第二种解…
一.题目 给定一个数组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]=1*A[1]*...*A[n-3]*A[n-2]*A[n-1], B[1]=A[0]*1*...*A[n-3]*A[i-2]*...*A[n-1]. 二.思路 B[i]的值可以看作下图的矩阵中每行的乘积.下三角用连乘可以很容求得,上三角,从下向上也是连乘.此我们的思路就很…
  题目描述:   给定一个数组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[i]是A数组所有元素的乘积,但是没有A[i]项,如果没有不能使用除法这一限制,我们可以直接将A数组的所有元素相乘,得到一个乘积,记为res,则使用公式B[i] = res/A[i]即可得到B这个乘积数组.   现在…
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 需要与面试官确认的是,这个二维数组的元素是否存在重复情况,如何处理重复情况. 解题思路: 1.判断待查找整数与矩阵的左上角的最小元素以及右下角的最大元素,如果没在他们之间则直接返回没有找到. 2.选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束; 3.如果该数字大于要查找的数字,则剔除这个数字所在的列;…
问题描述 给定一个数组 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].不能使用除法. 示例: 输入: [1,2,3,4,5] 输出: [120,60,40,30,24]   提示: 所有元素乘积之和不会溢出 32 位整数 a.length <= 100000 代码 class Solution { public: vector<int> constructArr(ve…
#include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-,mid; ) { mid=(left+right)/; if(data[mid]>=data[left]) left=mid; else if(data[mid]<data[right]) right=mid; } return data[right]; } void Test1() { cout…
一.题目:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 这道题最直观的解法并不难,从头到尾遍历数组一次,我们就能找出最小的元素.这种思路的时间复杂度显然是O(n).但是这个思路没有利用输入的旋转数组的特性,肯定达不到面试官的要求. 我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组的…
一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345,经过调整后可以为:15342.13542.13524等等. 二.解题思路 2.1 基本解法 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位.挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位.由于每碰到一个…
思路: 头尾指针,向中间遍历,依据条件交换元素. #include <iostream> using namespace std; void reOrder(int *pData, unsigned int len, bool (*func)(int)) { ) return ; int *pStart = pData; ; while(pStart < pEnd) { while(pStart < pEnd && !func(*pStart)) pStart++;…