首页 > 其他分享 >LeetCode1.两数求和 C题解(简单)

LeetCode1.两数求和 C题解(简单)

时间:2024-12-29 22:28:58浏览次数:3  
标签:题目 target nums int 题解 LeetCode1 ret 数组 两数

两数求和

1.原题目

题目

LeetCode题库的第1题题目为:

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {

   return 0;
}

示例

输入:nums = [2,7,11,15]
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9,所以返回 [0,1]

2.思路解析

分析题目后我们可以考虑使用枚举的方法暴力求解。在nums数组中设变量i为第一个数,变量j为第二个数,如果两个变量值相加值等于目标值则进行输出;如果不相等则j等于下一个数再次进行比较,直到等于目标值后进行输出。

3.具体操作

如果我们想要遍历整个数组我们就需要一个嵌套的for循环,然后用if语句进行判断,如果成立则返回结果。

具体每一步的解释见注释:(为简便不再写出题目已给部分)

int i = 0;
for(i = 0; i < numsSize-1; i++) //numsSize为 nums数组最后一个数,即i可以是从第一个到倒数第二个数
{
	int j = 0
	for(j = i + 1; j < numsSize; j++)//让 j=i+1可以避免使用两次相同的元素并减少对比次数,提高效率
	{
	    if(nums[i] + nums[j] == target)//进行判断,如果数组中下标为i、j的数相加和为 target,则进行下一步
	    								//如果不相等则继续循环
           {
               int* ret = malloc(sizeof(int) * 2);//分配两个整数的空间
                ret[0] = i, ret[1] = j;//将得到的 i、j放入数组 ret中
                *returnSize = 2;//声明返回数组大小为2
				return ret;//返回值 ret
				break;//因为只有一个对应答案,所以可以直接退出循环,提高效率
           }

	}
}

如此便是整个解题过程,代码可以通过,可以看出结果还是很不错的
请添加图片描述
如果还有哪里不懂的地方也欢迎留言,也可以去LeetCode上寻找其他大佬的解释。

以上是本人对这道题的一些见解,如有错误或改进之处也欢迎留言给作者,感谢观看。

标签:题目,target,nums,int,题解,LeetCode1,ret,数组,两数
From: https://blog.csdn.net/2401_88266383/article/details/144800253

相关文章

  • LeetCode110平衡二叉树
    原理本题判断一个二叉树是否为平衡二叉树,核心思路是基于平衡二叉树的定义,即任意节点的左右子树的高度差的绝对值不超过1。通过递归地计算每个节点为根的子树的高度,在计算过程中判断是否满足高度差条件,如果发现某个节点的左右子树高度差超过1,则整棵树不是平衡二叉树,标记为特......
  • [CF2053C] Bewitching Stargazer 题解
    我们不妨直接递归模拟算答案。定义\(f(l,r)\)表示左右端点为\(l,r\)的答案。记\(mid\gets\lfloor\frac{l+r}{2}\rfloor\),于是:\[f(l,r)=\begin{cases}f(l,mid)+f(mid+1,r)&(r-l+1)\equiv0\pmod2\\f(l,mid-1)+f(mid+1,r)+mid&{\text{otherwi......
  • [CF2043C] Sums on Segments 题解
    我们先想全是\(\pm1\)的。令区间内最小子段和为\(mn\),最大子段和为\(mx\),注意到\([mn,mx]\)内的数全都能被凑出来。证明:我们在区间\([l,r]\)内任意取一个子区间\([l',r']\)。定义【扩展】为将一个区间左边或右边添加一个数。定义【收缩】为将一个区间左边或右边去......
  • leetcode1803 统计异或值在范围内的数对有多少
    给定数组nums[n]和两个整数low与high,问有多少对(i,j)满足0<=i<j<n,并且low<=(nums[i]^nums[j])<=high。1<=n<=2E4;1<=nums[i]<=2E4;1<=low<=high<=2E4分析:1、把区分问题拆分为两部分,记f(x)表示不超过x的个数,那么f(high)-f(low-1)就是答案,只需要实现f(x)即可。2、从......
  • leetcode1938 查询最大基因差
    给定一棵n个节点的有根树,节点i的父节点为parents[i],根节点的父节点为-1,节点的基因值等于自身编号。有m个询问,queries[i]=[node[i],val[i]],返回从根节点到node[i]的路径上所有节点基因值与val[i]的异或最大值。2<=n<=1E5;1<=m<=3E4;0<=val[i]<=2E5分析:01-trie+离线+dfs。(1)用01......
  • leetcode1707 与数组中元素的最大异或值
    给定数组nums[n]和查询数组queries[m],其中queries[i]=[xi,mi],第i个查询表示nums[n]中不超过mi的所有元素与xi异或的最大值。1<=n,m<=1E5;0<=nums[i],xi,mi<=1E9分析:01trie+离线。将询问按mi从小到大排序,将nums[n]从小到大排序,每次处理询问前,把不超过mi的数都加入trie,回答询问。......
  • [题解](更新中)AtCoder Beginner Contest 386(ABC386) A~E
    A-FullHouse2容易发现,答案为Yes\(\iff\)输入中恰好出现了\(2\)种不同的数,可以用set等数据结构来计算不同元素的个数。点击查看代码#include<bits/stdc++.h>usingnamespacestd;set<int>se;signedmain(){ for(inti=1,a;i<=4;i++){ cin>>a; se.insert(a); } c......
  • Win11小图标显示空白问题解决方法
    Win11小图标显示空白问题解决方法近期,不少升级到Windows11系统的用户遇到了一个桌面图标显示的问题:当将文件夹的查看方式设置为“小图标”时,软件图标无法正常显示,而是一片空白;但将查看方式切换到“中图标”或更大时,图标则能正常显示。这个问题困扰了不少用户,影响了桌面整......
  • [ARC189D] Takahashi is Slime 题解
    传送门不难想到一个暴力,对于每一个\(K\),都一个个向左右扩展,直到不能扩展为止。这个做法是\(O(n^2)\)的,我们考虑优化。我们将一个个扩展改成一次性扩展许多个格子。即循环进行下面操作:向左扩展到不能扩展。向右扩展到不能扩展。我们使用二分,看看每次扩展最远到哪。时间......
  • 牛客小白月赛108 题解(出题人题解)
    比赛链接A$y=0$的情况,答案是$0$。$y>0$的情况,我们把每两次按钮先捆绑在一起,算出$k=\lceil\frac{y}{x+1}\rceil$。然后判断是否可以在前$2k-1$次就完成任务,即判断$(k-1)(x+1)+1\gey$。如果上式成立,答案是$2k-1$,否则是$2k$。B提供一个比较暴力的做法。对于......