力扣数组题目 15题 三数之和 解题分享

该篇文章提供了一种通过冒泡排序整数数组,然后寻找数组中和为0的不重复三元组的方法。程序在VSCode环境下运行,适用于力扣题目的解决方案,注意排除重复的三元组。
摘要由CSDN通过智能技术生成

注意:本文章内容仅提供思路,根据力扣题目做出能在vscode上运行的程序,而非力扣答案!!!

15.给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

//前两个头文件是程序需要用到的

#include <stdio.h>
#include <string.h>

int main()  //主程序
{
    int nums[] = {-1,0,1,-1,2,4};
    int ret = sizeof(nums) / sizeof(nums[0]);//
    int x[100] = {0};

    //首先使用冒泡排序将数组数字从小到大排序出来(这样数组含有多个重复数字的时候可以

    //做到很简便的查重)

    //第一个for循环是需要遍历多少遍(需要遍历的次数比数组数字少1)
    for(int i = 0; i < ret - 1; i++)
    {
        //将每一遍需要比较多少遍(需要比较的次数依次递减)

        //例如前面定义的数组一共有6个数,第一个数字需要比较5遍,第二个数字需要比较4遍
        for(int j = 0; j < ret - i - 1; j++)
        {
            //对数据比较,符合后进行交换
            if(nums[j] > nums[j + 1])
            {
                int temp = nums[j];
                nums[j] = nums[j+1];
                nums[j+1] = temp;
            }
        }
    }

    //这一段是排序写完用来检查冒泡排序是否正确的,程序运行中不需要运行这段
    // for(int i = 0; i < ret; i++)
    // {
    //     printf("%d ",nums[i]);
    // }

    //开始进行加减和去重
    for (int i = 0; i < ret && i <= 0; i++)
    {

        //三元组的第一个数字,如果在前面循环中已经出现过了,那么就跳过这个数字
        if(nums[i] == nums[i-1])
        {
            continue;
        }
        for(int left = i + 1; left <= ret - 1; left++)
        {
            while (nums[left] == nums[left+1])
            {
                left++;
            }
            for(int right = left + 1; right <= ret - 1; right++)
            {
                if (nums[i] + nums[left] + nums[right] == 0)
                {
                    printf("[%d,%d,%d]\n",nums[i],nums[left],nums[right]); 
                }
            }
        }
    }
    return 0;
}

运行结果:

[-1,-1,2]
[-1,0,1]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值