题目:

解答:
cpp
int** generate(int numRows, int* returnSize, int** returnColumnSizes) {
int** ret=malloc(sizeof(int*)*numRows);//申请二维数组的行指针
*returnSize=numRows;//用于告知调用函数此二维数组的行数
*returnColumnSizes=malloc(sizeof(int)*numRows);//告诉每行的长度step1
for(int i=0;i<numRows;i++){
ret[i]=malloc(sizeof(int)*(i+1));//申请每行的空间大小
(*returnColumnSizes)[i]=i+1;//为每行的长度填写值
ret[i][0]=ret[i][i]=1;
for(int j=1;j<i;j++){
ret[i][j]=ret[i-1][j-1]+ret[i-1][j];
}
}return ret;
}
心得:这道题不会,设计到二维数组的构造,注意给出注释的地方。
int*:给你一个地址,你可以直接在那里写东西(调用者已准备好空间)。
int**:给你一个地址的地址**,你需要:
先在那个地址放一个新的地址(malloc)
然后用那个新地址访问数组元素
题目:

解答:
cpp
int singleNumber(int* nums, int numsSize) {
int resul=0;
for(int i=0;i<numsSize;i++){
resul^=nums[i];
}
return resul;
}
心得:题目要求O(n)时间复杂度,所以使用排序再消除行不通。这里使用了异或的手段,"^"消除偶数个,只留下奇数个的数字。
题目:

解答:
cpp
int majorityElement(int* nums, int numsSize) {
int x = nums[0];
int count = 0;
for (int i = 0; i < numsSize; i++) {
if (nums[i] == x)
count++;
else
count--;
if (count <= 0) {
x = nums[i];
count = -count;
}
}
return x;
}
心得:拿到这种题总想到排序,感觉不是好习惯.....这道题应该是王道书上有的,采用的方法就是巧用寻找的数总是多于其他的数,然后遇到目标数就++,否则--,最终哪个更多就是哪个。
明天要开始中等题,fighting!