每日一题(4.17)

embedded/2024/11/15 6:15:54/

目录

  • Leecode-16-最接近的三数之和
    • 题目
    • 示例
    • 解题思路
    • 代码实现
  • Leecode-面试题01.07-旋转矩阵
    • 题目
    • 示例
    • 解题思路
    • 代码实现

Leecode-16-最接近的三数之和

题目

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例

示例1

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例2

输入:nums = [0,0,0], target = 1
输出:0

解题思路

  1. 使用qsort()函数对nums数组进行排序,排序规则为cmp函数定义的升序
  2. sum:用于存储当前三个数的和。
    flag:用于存储最接近目标值的和,初始化为一个较大的数(1e7)
  3. 使用一个外层循环遍历数组nums,跳过重复的元素,避免重复计算
  4. 在当前外层循环确定的元素nums[i]的基础上,使用两个指针j和k分别指向nums[i]的下一个元素和数组末尾。
    通过移动j和k,尝试找到与nums[i]相加最接近target的两个数。
    · 如果sum等于target,直接返回target。
    · 如果abs(sum - target)小于abs(flag - target),更新flag。
    根据sum和target的大小关系,移动指针j或k,并跳过重复的元素
  5. 返回最接近目标值的和flag

代码实现

int cmp(const void* a,const void* b){return *(int*)a-*(int*)b;
}int threeSumClosest(int* nums, int numsSize, int target) {int sum = 0;qsort(nums,numsSize,sizeof(int),cmp);int flag = 1e7;int i,j,k;for(i = 0;i < numsSize ; i++){if(i > 0 && nums[i] == nums[i - 1]){continue;}j = i + 1;k = numsSize - 1;while(j < k){sum = nums[i] + nums[j] + nums[k];if (sum == target) {return target;}if (abs(sum - target) < abs(flag - target)) {flag = sum;}if(sum > target){int num2 = nums[k];k = k - 1;while(j < k && nums[k] == num2){k--;}}else{int num1 = nums[j];j = j + 1;while(j < k && nums[j] == num1){j++;}}}}return flag;
}

Leecode-面试题01.07-旋转矩阵

题目

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

不占用额外内存空间能否做到?

示例

示例1

给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],

原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]

示例2

给定 matrix =
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
],

原地旋转输入矩阵,使其变为:
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]

解题思路

  1. 创建临时矩阵:首先,函数创建了一个与原始矩阵matrix同样大小的临时矩阵new,并将原始矩阵中的元素复制到临时矩阵new中
  2. 旋转矩阵:接下来,函数再次通过两个嵌套的for循环遍历临时矩阵new的每一个元素。对于new矩阵中的每个元素new[i][j],它将被赋值给matrix[j][matrixSize - i - 1]。这个操作实现了矩阵的顺时针旋转90度。具体来说,如果原始矩阵中的某个元素位于第i行第j列,那么在旋转后的矩阵中,它应该位于第j行第(matrixSize - i - 1)列

代码实现

void rotate(int** matrix, int matrixSize, int* matrixColSize) {int new[matrixSize][matrixSize];for (int i = 0; i < matrixSize; i++) {for (int j = 0; j < matrixSize; j++) {new[i][j] = matrix[i][j];}}for (int i = 0; i < matrixSize; ++i) {for (int j = 0; j < matrixSize; ++j) {matrix[j][matrixSize - i - 1] = new[i][j];}}
}

http://www.ppmy.cn/embedded/7899.html

相关文章

时序分解 | Matlab实现TVF-EMD时变滤波器的经验模态分解信号分量可视化

时序分解 | Matlab实现TVF-EMD时变滤波器的经验模态分解信号分量可视化 目录 时序分解 | Matlab实现TVF-EMD时变滤波器的经验模态分解信号分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现TVF-EMD(时变滤波器的经验模态分解)可直接替换 Matlab语言 1.…

物联网网关硬件和云端分别实现了哪些功能?-天拓四方

在物联网&#xff08;IoT&#xff09;的广阔领域中&#xff0c;物联网网关硬件和云端各自扮演着不可或缺的角色。它们通过一系列功能&#xff0c;共同确保物联网系统的顺畅运行&#xff0c;为各类设备提供稳定、高效的数据传输与处理服务。本文将详细解析物联网网关硬件和云端分…

Elasticsearch进阶篇(三):ik分词器的使用与项目应用

ik分词器的使用 一、下载并安装1.1 已有作者编译后的包文件1.2 只有源代码的版本1.3 安装ik分词插件 二、ik分词器的模式2.1 ik_smart演示2.2 ik_max_word演示2.3 standard演示 三、ik分词器在项目中的使用四、ik配置文件4.1 配置文件的说明4.2 自定义词库 五、参考链接 一、下…

常用的 Spring Boot 注解及其作用

1、常用注解介绍&#xff1a; Spring Boot 提供了许多注解来简化开发&#xff0c;并帮助开发者在 Spring 应用中实现各种功能。以下是一些常用的 Spring Boot 注解及其作用&#xff1a; SpringBootApplication&#xff1a; 作用&#xff1a;用于标识主启动类&#xff0c;通常位…

ExpertPrompting:指导大语言模型成为杰出专家

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文地址&#xff1a;https://arxiv.org/abs/2305.14688 作者 & 机构&#xff1a;Benfen…

边缘计算网关有哪些优势?-天拓四方

随着信息化、智能化浪潮的持续推进&#xff0c;计算技术正以前所未有的速度发展&#xff0c;而边缘计算网关作为其中的重要一环&#xff0c;以其独特的优势正在逐步改变我们的生活方式和工作模式。本文将详细解析边缘计算网关的优势。 首先&#xff0c;边缘计算网关具有显著的…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…

DDoS攻击愈演愈烈,谈如何做好DDoS防御

DDoS攻击是目前最常见的网络攻击方式之一&#xff0c;各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲&#xff0c;每次DDoS攻击的平均成本为20万美元。可见&#xff0c;我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外&#xff0c;更重要…