每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)

简介: 每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)

今天要写的题目有哪些呢?

747. 至少是其他数字两倍的最大数 - 力扣(LeetCode)

int dominantIndex(int* nums, int numsSize) {
    int max=0;
         max=nums[0];
         int index=0;
    for(int i=1;i<numsSize;i++)
    {
        if(nums[i]>max){
            max=nums[i];
            index=i;
            i++;//找出最大的元素
        }
    }
    for(int i=0;i<numsSize;i++)//检查是否是其他元素的两倍
    {
        if(i!=index&&max<2*nums[i]){
            return -1;
        }
    }
    return index;
}

349. 两个数组的交集 - 力扣(LeetCode)

我们可以使用排序双指针的方法来解决这个问题。首先,对两个数组进行排序,然后使用双指针分别遍历两个数组,比较指针所指向的元素。如果两个元素相等,则将其添加到结果数组中,并将两个指针都向前移动一位。如果两个元素不相等,则将指向较小元素的指针向前移动一位。

#include <stdio.h>  
#include <stdlib.h>  
  
// 比较函数,用于qsort  
int compare(const void *a, const void *b) {  
    return (*(int *)a - *(int *)b);  
}  
  
// 获取两个数组的交集  
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {  
    // 对两个数组进行排序  
    qsort(nums1, nums1Size, sizeof(int), compare);  
    qsort(nums2, nums2Size, sizeof(int), compare);  
  
    int *result = (int *)malloc(sizeof(int) * (nums1Size < nums2Size ? nums1Size : nums2Size));  //这行代码的目的是为存储两个数组的交集分配足够的内存。由于交集的大小不会超过两个数组中的较小者,因此分配的内存大小是 sizeof(int) 乘以较小数组的大小。这个内存块将用于存储找到的交集元素。之后,这个 result 指针将被用于填充交集元素,并最终返回给调用者
    int resultIndex = 0;  
    int i = 0, j = 0;  //定义两个指针,分别用于遍历两个数组
  
    // 使用双指针遍历两个数组  
    while (i < nums1Size && j < nums2Size) {  
        if (nums1[i] == nums2[j]) {//如果两个数组在当前位置的元素相等,那么它们是交集的一部分
            // 如果找到交集元素,将其添加到结果数组中  
            result[resultIndex++] = nums1[i];  //将交集元素添加到结果数组中,并更新resultIndex
            // 跳过重复元素  
            while (i < nums1Size - 1 && nums1[i] == nums1[i + 1]) i++;  
            while (j < nums2Size - 1 && nums2[j] == nums2[j + 1]) j++;  
            i++;  移动两个数组的指针到下一个元素
            j++;  
        } else if (nums1[i] < nums2[j]) {  
            i++;  //如果nums1的当前元素小于nums2的当前元素,则移动nums1的指针;否则,移动nums2的指针
        } else {  
            j++;  
        }  
    }  
  
    *returnSize = resultIndex; // 设置返回结果的大小  
    return result;  
}  
  
int main() {  
    int nums1[] = {1, 2, 2, 1};  
    int nums2[] = {2, 2};  
    int returnSize;  
    int *result = intersect(nums1, 4, nums2, 2, &returnSize);  
  
    printf("Intersection: ");  
    for (int i = 0; i < returnSize; i++) {  
        printf("%d ", result[i]);  
    }  
    printf("\n");  
  
    free(result); // 释放动态分配的内存  
    return 0;  
}
相关文章
|
算法 存储 机器学习/深度学习
【数据结构】——期末复习题库(6)
【数据结构】——期末复习题库(6)
【数据结构】——期末复习题库(6)
|
存储 分布式计算 资源调度
41 Hadoop的HA机制
41 Hadoop的HA机制
138 0
41 Hadoop的HA机制
|
11月前
|
存储 人工智能 算法
【AI系统】计算图的优化策略
本文深入探讨了计算图的优化策略,包括算子替换、数据类型转换、存储优化等,旨在提升模型性能和资源利用效率。特别介绍了Flash Attention算法,通过分块计算和重算策略优化Transformer模型的注意力机制,显著减少了内存访问次数,提升了计算效率。此外,文章还讨论了内存优化技术,如Inplace operation和Memory sharing,进一步减少内存消耗,提高计算性能。
532 34
【AI系统】计算图的优化策略
|
传感器 人工智能 自然语言处理
人工智能数据
人工智能数据
616 1
|
安全 物联网
物联网卡不能更换设备使用吗
物联网卡(IoT SIM卡)是否允许更换设备使用,这主要取决于物联网服务提供商的具体政策和服务条款。通常,物联网卡是为特定设备或应用场景设计的,因此一些服务提供商会限制卡的更换使用,主要是出于安全、管理、网络优化和避免滥用等考虑
|
8月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
661 0
|
设计模式 前端开发 数据安全/隐私保护
前端实现设计模式之状态模式
状态模式是一种行为型设计模式,用于在对象内部状态发生变化时改变其行为。状态模式将对象的行为封装在不同的状态类中,使得对象在不同的状态下可以有不同的行为。在前端开发中,状态模式常用于管理组件的状态和行为,以实现复杂的交互逻辑。本文将介绍状态模式的概念和应用,并提供具体的代码示例和解读。
298 0
|
存储 JavaScript 对象存储
ROS CDK魔法书:点亮博客上云新技能(Python篇)
ROS(Resource Orchestration Service)是阿里云的资源编排服务,通过模板定义资源和依赖关系。CDK中的Asset模块扮演关键角色,将本地文件转化为云资产,方便上传至OSS(Object Storage Service)存储。OSS是一个云存储服务,能安全存储大量数据,并支持高效访问。通过ROS CDK,开发者可以将本地的Next.js博客项目打包并部署到OSS,实现静态网站的云托管。部署过程包括初始化项目、安装依赖、定义资源、打包博客代码和使用CDK部署到OSS。通过这种方式,开发者可以利用ROS CDK的自动化能力,高效地管理和更新云上资源。
|
存储 缓存 vr&ar
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(上)
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!
150 0
|
缓存 算法 Java
Java并发编程Bug的源头
Java并发编程Bug的源头
149 0
Java并发编程Bug的源头