C语言(指针基础练习)

  1. 删除数组中的元素

数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。

c 复制代码
#include <stdio.h>
#include <stdbool.h>

// 函数声明
int deleteElement(int arr[], int size, int element);

int main() {
    int arr[] = {1, 2, 3, 4, 3, 5, 6};
    int size = sizeof(arr) / sizeof(arr[0]);
    int elementToDelete = 3;

    printf("Original array: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    int newSize = deleteElement(arr, size, elementToDelete);

    printf("Array after deleting %d: ", elementToDelete);
    for (int i = 0; i < newSize; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

// 删除数组中的元素,返回新数组的大小
int deleteElement(int arr[], int size, int element) {
    int newSize = 0;

    for (int i = 0; i < size; i++) {
        if (arr[i] != element) {
            arr[newSize] = arr[i];
            newSize++;
        }
    }

    return newSize;
}
  1. 给定⼀个n个元素有序的(升序)整型数组nums和⼀个⽬标值target,写⼀个函数A搜索nums中的target,如果⽬标值存在返回下标,否则返回-1。
c 复制代码
#include <stdio.h>

// 二分查找函数,返回元素在数组中的索引,如果未找到则返回-1
int binarySearch(int arr[], int size, int target) {
    int left = 0;
    int right = size - 1;

    while (left <= right) {
        int mid = left + (right - left) / 2; // 防止(left + right)可能导致的溢出

        // 检查中间元素是否是目标值
        if (arr[mid] == target) {
            return mid; // 找到目标,返回索引
        }

        // 如果目标值大于中间元素,则在右半部分查找
        if (arr[mid] < target) {
            left = mid + 1;
        } else { // 如果目标值小于中间元素,则在左半部分查找
            right = mid - 1;
        }
    }

    // 未找到目标值,返回-1
    return -1;
}

int main() {
    int arr[] = {2, 3, 4, 10, 40};
    int size = sizeof(arr) / sizeof(arr[0]);
    int target = 10;
    int result = binarySearch(arr, size, target);

    if (result != -1) {
        printf("元素在数组中的索引为: %d\n", result);
    } else {
        printf("数组中未找到该元素\n");
    }

    return 0;
}
  1. 给定⼀个含有n个正整数的数组和⼀个正整数s,找出该数组中满⾜其和≥s的⻓度最⼩的连续⼦数组,并返回其⻓度。如果不存在符合条件的⼦数组,返回0。
c 复制代码
#include <stdio.h>
#define MAX_INT 2147483647 
 
int minSubArrayLen(int nums[], int numsSize, int s) {
    int minLength = MAX_INT; 
    int currentSum = 0;
    int left = 0;
 
    for (int right = 0; right < numsSize; right++) {
        currentSum += nums[right];
 
        while (currentSum >= s) {
            minLength = (minLength < (right - left + 1)) ? minLength : (right - left + 1);
            currentSum -= nums[left];
            left++;
        }
    }
 
    // 检查是否找到了符合条件的子数组
    return (minLength == MAX_INT) ? 0 : minLength;
}
 
int main() {
    int nums[] = {2, 3, 1, 2, 4, 6};
    int s = 6;
    int numsSize = sizeof(nums) / sizeof(nums[0]);
 
    int result = minSubArrayLen(nums, numsSize, s);
    printf("满足和大于等于 %d 的最小长度连续子数组的长度是: %d\n", s, result);
 
    return 0;
}
相关推荐
SHUIPING_YANG1 分钟前
根据用户id自动切换表查询
java·服务器·数据库
爱吃烤鸡翅的酸菜鱼13 分钟前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
惊涛骇浪、19 分钟前
SpringMVC + Tomcat10
java·tomcat·springmvc
呆呆的小鳄鱼32 分钟前
leetcode:冗余连接 II[并查集检查环][节点入度]
算法·leetcode·职场和发展
墨染点香32 分钟前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
沧澜sincerely33 分钟前
排序【各种题型+对应LeetCode习题练习】
算法·leetcode·排序算法
CQ_071233 分钟前
自学力扣:最长连续序列
数据结构·算法·leetcode
弥彦_1 小时前
cf1925B&C
数据结构·算法
ldj20201 小时前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿1 小时前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud