【C语言】算法好题初阶(每日小细节011)

每日小细节新增算法好题合集,现在是初阶,每天会更新至少两道题目,感兴趣的小伙伴赶紧关注收藏不迷路哦

花费几分钟就能积累一种新的解题思路多是一件美事啊~

 

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--];
}

}

今天的题目比较简单,希望有帮助的小伙伴支持一下哦

博主现在是按照力扣的数据结构初阶的题单开始刷,每日都有几道题,我都会准时更新在博客里,欢迎大家一起讨论优化

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值