每日一题(珠玑妙算,两数之和)

简介: 每日一题(珠玑妙算,两数之和)

面试题 16.15. 珠玑妙算 - 力扣(LeetCode)

int* masterMind(char* solution, char* guess, int* returnSize)
//定义一个函数masterMind,它接受三个参数:solution(正确答案),guess(玩家的猜测)和returnSize(用于返回结果数组的大小的指针){
    int i=0,j=0;
    int realguess=0,virtualgess=0;
    do{
        if(solution[i]==guess[i]) realguess++,solution[i]='0',guess[i]='1';
        i++;
    }while(i<4);//do-while循环,用于检查solution和guess中的每一个字符是否相同。如果相同,则realguess增加1,并将这两个字符分别设置为'0'和'1'以标记它们已经被匹配过。
    i=0;//重置i为0,为下一个循环做准备
    do{//开始另一个do-while循环,用于检查guess中的字符是否在solution中出现,但不在相同的位置
        do{//内部do-while循环开始,用于查找guess[i]在solution中的位置
            if(guess[i]==solution[j]){
                virtualgess++;
                solution[j] = '0';
                break;
            }//如果guess中的字符在solution中的某个位置找到,则virtualgess增加1,并将该位置的solution字符设置为'0'以标记它已经被匹配过,然后跳出内部循环
            j++;//如果guess[i]不在solution[j]的位置,增加j的值以检查下一个位置
        }while(j<4);
        j=0;
        i++;
    }while(i<4);
    
        j=0;
    int *ret;
    ret = malloc(sizeof(int)*2);
    ret[0] = realguess;
    ret[1] = virtualgess;
    *returnSize = 2;
    return ret;
}

两数之和_牛客题霸_牛客网 (nowcoder.com)

#include <stdio.h>  
  
// 函数用于找到两个数,使它们的和等于目标值target  
// numbers是整型数组,numbersSize是数组的大小,target是目标值  
// 函数返回包含两个数下标的数组,下标从1开始计数  
// 如果找不到满足条件的两个数,函数返回NULL  
int* two_sum_without_hash(int* numbers, int numbersSize, int target, int* returnSize) {  
    if (numbers == NULL || numbersSize < 2 || returnSize == NULL) {  
        *returnSize = 0;  
        return NULL;  
    }  
  
    for (int i = 0; i < numbersSize; i++) {  
        for (int j = i + 1; j < numbersSize; j++) 
//这两行开始了一个双重循环,用于遍历数组中的每对元素。外层循环变量i从0开始,内层循环变量j从i + 1开始,这样可以确保我们不会重复检查相同的数对{  
            if (numbers[i] + numbers[j] == target) {  
                // 找到满足条件的两个数,返回它们的下标  
                int* result = (int*)malloc(2 * sizeof(int)); //如果找到了满足条件的数对,我们分配内存来存储它们的下标 
                if (result == NULL) {  
                    *returnSize = 0;  //这段代码检查输入参数的有效性。如果numbers数组为空、数组大小小于2,或者returnSize指针为空,函数会立即返回NULL,并将*returnSize设置为0
                    return NULL;  
                }  
                result[0] = i + 1; // 下标从1开始计数  
                result[1] = j + 1;  
                *returnSize = 2;  
                return result;  //如果内存分配成功,我们将数对的下标存储在result数组中,并将*returnSize设置为2,然后返回result数组
            }  
        }  
    }  
  
    // 没有找到满足条件的两个数  
    *returnSize = 0;  
    return NULL;  
}  
  
int main() {  
    int numbers[] = {2, 7, 11, 15};  
    int target = 9;  
    int returnSize;  
  
    int* result = two_sum_without_hash(numbers, sizeof(numbers) / sizeof(numbers[0]), target, &returnSize);  
  
    if (result != NULL) {  
        printf("Indices of the two numbers that sum up to %d are: %d and %d\n", target, result[0], result[1]);  
        free(result); // 释放分配的内存  
    } else {  
        printf("No two numbers found that sum up to %d\n", target);  
    }  
  
    return 0;  
}
目录
打赏
0
0
1
0
13
分享
相关文章
深入解析数据仓库与数据湖:建构智能决策的桥梁
在当今信息时代,数据成为企业决策与创新的关键资源。本文将深入探讨数据仓库与数据湖的概念与应用,介绍其在数据管理和分析中的作用,以及如何构建智能决策的桥梁。
大模型开发:描述一种用于异常检测的技术或算法。
LOF算法是一种无监督异常检测技术,通过比较数据点局部密度识别离群点。它计算每个点的局部离群因子得分,得分高则异常可能性大。主要步骤包括:距离度量、k近邻搜索、计算局部可达密度和LOF得分,然后设定阈值识别异常点。适用于入侵检测、故障检测等场景,Python中可使用scikit-learn库实现。
170 1
Golang 语言 beego v2 之路由设置
Golang 语言 beego v2 之路由设置
366 0
一文理解Skip-Gram上下文的预测算法
自然语言处理属于人工智能领域,它将人类语言当做文本或语音来处理,以使计算机和人类更相似,是人工智能最复杂的领域之一。 由于人类的语言数据格式没有固定的规则和条理,机器往往很难理解原始文本。
4705 0
常见物联网操作系统介绍
物联网操作系统是运行在物联网设备上的提供物物相连能力的操作系统,其核心在于能够将各种物体连接到互联网,并提供数据通信能力。
3713 1
【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多
【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替&quot;Greater Seattle Area&quot;),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。
106 6
TCP连接的关键之谜:揭秘三次握手的必要性
在这篇文章中,我们将深入探讨TCP连接建立过程中的关键步骤——三次握手。三次握手是确保客户端和服务端之间建立可靠连接的重要过程。通过三次握手,双方可以确认彼此的接收和发送能力,并同步双方的初始序列号,从而确保连接的稳定性和可靠性。文章还解释了三次握手的原因,它可以避免历史重复连接的初始化,确保双方都收到可靠的初始序列号,并避免资源浪费和消息滞留的问题。通过三次握手,TCP连接可以保证数据的准确性和完整性,确保通信的可靠性。
294 1
TCP连接的关键之谜:揭秘三次握手的必要性
删除排序数组中的重复项
删除排序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。
137 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等