力扣练习题之数组中找两个数之和等于目标数值详细讲解

力扣练习题

1.0 题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

2.0 实例

实例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

3.0题目分析

对于这个题目拿到手之后可以先想到用for循环,而需要两个数相加,可以利用循环嵌套来实现筛选数组的两个数。

而对于题目中所要求的同一个元素只能使用一次。我们可以设两个变量,i,j在第二个for循环中令j!=i。

对于题目中说可以按任意顺序返回,我们可以按照大小顺序输出。例如[0,1],[5,8],[1,4]这样。这时我们只需要利用三目运算符即可

4.0 程序

#include<stdio.h>
int main()
{
	int n=8;
	int nums[n]={2,3,4,5,4,3,6};
	int target=7;
	int i=0,j=0;
	int k=1;
	for(i=0;i<n&&k!=0;i++){
			for(j=0;j!=i&&j<n;j++){
				if(nums[i]+nums[j]==target){
					printf("输出的为nms[%d]+nums[%d]\n",(i>j)?i ,j:j, i);
						k=0;
						break;	
			}	
	
		}
		
	}
	if(k){
		printf("数组中没有两个元素使它成立"); 
	}
	
	return 0;
 } 

在这里插入图片描述

5.0 程序详细解释

  1. 对于定义变量,n我们可以设置一个大一点的数,或者自己定义多大的数组设置多大的,但是注意n设置的不能比数组里你给的元素数量小,小编在测试的时候因为没注意,多设置了几个变量,但是没有改n的值,导致运行的时候显示下面这行字符。

    terminate called after throwing an instance of 'std::bad_array_length'
      what():  std::bad_array_length
    
  2. 我们的第一个for循环for(i=0;i<n&&k!=0;i++)其中k!=0是为了只输出一次,并且用于当不存在两个数时完成下面的if,如果我们想把每个能完成的都输出了,可以删去这个&&k!=0。

  3. 第二个for循环就显得简单的很多了,其中为了解决题目中的两个元素不能相等,则令j!=i。而其中的k=0是为了说明有至少两个元素符合条件。

  4. if(nums[i]+nums[j]==target),这个式子是当满足两个元素相加等于我们需要的数时,执行if的内容,而if内直接输出着两个元素下标,而(i>j)?i ,j:j, i式子是为了满足我们从小到大按顺序输出数组元素下标。

  5. 循环外的if(k)是当我们循环完之后发现找不到两个数组元素满足这个条件,则k=1为真,执行if内的 “数组中没有两个元素使它成立”,当循环中存在两个元素时,则k变为0,从而if为假不执行。至此,这个程序就结束了,很简单吧。

6.0全列情况程序

#include<stdio.h>
int main()
{
	int n=8;
	int nums[n]={2,3,4,5,4,3,6};
	int target=7;
	int i=0,j=0;
	int k=1;
	for(i=0;i<n;i++){
			for(j=0;j!=i&&j<n;j++){
				if(nums[i]+nums[j]==target){
					printf("输出的为nms[%d]+nums[%d]\n",(i>j)?i ,j:j, i);
						k=0;
						break;	
			}	
	
		}
		
	}
	if(k){
		printf("数组中没有两个元素使它成立"); 
	}
	
	return 0;
 } 

7.0三目运算符拓展

三目运算符的形式为? :

用到时可以写为A?B:C

其含义为当A为真时输出B,否则输出C。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶丶丶丶。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值