【每日刷题】Day86
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 118. 杨辉三角 - 力扣(LeetCode)
2. 数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)
3. 26. 删除有序数组中的重复项 - 力扣(LeetCode)
1. 118. 杨辉三角 - 力扣(LeetCode)
//思路:vector类的运用。
int** generate(int numRows, int* returnSize, int** returnColumnSizes)
{
int** arr = (int**)malloc(sizeof(int*)*numRows);
*returnSize = numRows;
*returnColumnSizes = (int*)malloc(sizeof(int)*numRows);
for(int i = 0;i<numRows;i++)
{
arr[i] = (int*)malloc(sizeof(int)*(i+1));
(*returnColumnSizes)[i] = i+1;
arr[i][0] = 1;
arr[i][i] = 1;
for(int j = 1;j<i;j++)
{
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
}
}
return arr;
}
2. 数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)
//哈希记数+迭代器遍历。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int>& numbers)
{
int flag = 0;
int hash[10001] = {0};
vector<int>::iterator it = numbers.begin();
//迭代器遍历
while(it!=numbers.end())
{
//记录每个数字出现的次数
hash[*it]+=1;
//有出现超过一半的数字直接跳出不用继续遍历
if(hash[*it]>((numbers.end()-numbers.begin())/2))
{
flag = *it;
break;
}
it++;
}
return flag;
}
};
3. 26. 删除有序数组中的重复项 - 力扣(LeetCode)
//思路:快慢双指针遍历。两指针指向内容相容时继续遍历,当不相同时,记录慢指针的内容。当快指针遍历到末尾时如果两个指针指向内容相同,则需要把慢指针指向内容存储起来。
int removeDuplicates(int* nums, int numsSize)
{
int* newnums = (int*)malloc(numsSize*sizeof(int));
int k = 0;
int i = 0;
int pf1 = 0;
int pf2 = 1;
if(numsSize==1)
{
newnums[k++] = nums[0];
}
if(numsSize==2)
{
if(nums[pf1]==nums[pf2])
{
newnums[k++] = nums[pf1];
pf1++;
pf2++;
}
else
{
newnums[k++] = nums[pf1];
newnums[k++] = nums[pf2];
pf1++;
pf2++;
}
}
while(pf2<numsSize)
{
//指针内容相同时,判断快指针是否遍历到了末尾,如果快指针遍历到了末尾则要将慢指针指向内容存储
if(nums[pf1]==nums[pf2])
{
if(pf2==numsSize-1)
{
newnums[k++] = nums[pf1];
}
pf1++;
pf2++;
continue;
}
else
{
//两指针指向内容不相同时,先将慢指针内容存储
newnums[k++] = nums[pf1];
//判断快指针是否到了末尾,如果到了,则需要将快指针指向内容也存储起来
if(pf2==numsSize-1)
{
newnums[k++] = nums[pf2];
}
}
pf1++;
pf2++;
}
//最后输出新数组
for(i = 0;i<k;i++)
{
nums[i] = newnums[i];
}
return k;
}