每日小细节新增算法好题合集,现在是初阶,每天会更新至少两道题目,感兴趣的小伙伴赶紧关注收藏不迷路哦
花费几分钟就能积累一种新的解题思路多是一件美事啊~
1.两数之和
其实暴力遍历数组就可以实现,但是要注意如果测试用例是{3,2,4},target=6,返回只能是1 2不能是 0 0,要求不能有下标相同的
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
*returnSize=2;
int* tmp=(int*)malloc(sizeof(int)*2);
for(int i=0;i<numsSize;i++)
{
for(int j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
tmp[0]=i;
tmp[1]=j;
return tmp;
}
}
}
return NULL;
}
2.合并两个有序数组力扣传送
这个题的思路就是在原来的数组nums1上返回
所以用一个target表示现在的目标位置也就是排序之后较大元素应该位于的位置
end1表示nums1的最后一个元素下标,end2同理表示nums2的
在end1和end2都合理(都>=0),比较两个下标所在元素谁更大就把谁放在下标为target的位置上
当出现end1或者end2不合理时,直接把另一个的剩余元素全部拷贝给target即可
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int end1=m-1,end2=n-1,target=n+m-1;
while(end1>=0 && end2>=0)
{
if(nums1[end1]>nums2[end2])
{
nums1[target--]=nums1[end1--];
}
else
{
nums1[target--]=nums2[end2--];
}
}
while(end1>=0)
{
nums1[target--]=nums1[end1--];
}
while(end2>=0)
{
nums1[target--]=nums2[end2--];
}
}
今天的题目比较简单,希望有帮助的小伙伴支持一下哦
博主现在是按照力扣的数据结构初阶的题单开始刷,每日都有几道题,我都会准时更新在博客里,欢迎大家一起讨论优化