leetcode day1

news/2024/10/21 5:49:43/

最小差值

给你一个整数数组 nums,和一个整数 k 。

在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的任意整数。对于每个索引 i ,最多 只能 应用 一次 此操作。

nums 的 分数 是 nums 中最大和最小元素的差值。 

在对  nums 中的每个索引最多应用一次上述操作后,返回 nums 的最低 分数 。

 

示例 1:

输入:nums = [1], k = 0
输出:0
解释:分数是 max(nums) - min(nums) = 1 - 1 = 0。
示例 2:

输入:nums = [0,10], k = 2
输出:6
解释:将 nums 改为 [2,8]。分数是 max(nums) - min(nums) = 8 - 2 = 6。
示例 3:

输入:nums = [1,3,6], k = 3
输出:0
解释:将 nums 改为 [4,4,4]。分数是 max(nums) - min(nums) = 4 - 4 = 0。
 

提示:

1 <= nums.length <= 104
0 <= nums[i] <= 104
0 <= k <= 104

解题思路:先对数组排序

1、考虑数组可变为相等数的情况,x为数组任意元素,x-min<=k,max-x<=k,这种情况满足

即max-min<=2*k,此时最低 分数=0

2、max-min>2*k时,最低分数=max-k-(min+k)=max-min-2*k

当x<min+k时,x可以加一个比k小的数达到min+k

当x>max-k时,x可以减一个比k小的数达到max-k

int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;
}
int smallestRangeI(int* nums, int numsSize, int k) {qsort(nums,numsSize,sizeof(int),cmp);if(nums[numsSize-1]-nums[0]<=2*k)return 0;else return nums[numsSize-1]-nums[0]-2*k;
}

 

 

最接近的三数之和

给你一个长度为 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
解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。
 

提示:

3 <= nums.length <= 1000
-1000 <= nums[i] <= 1000
-104 <= target <= 104

解题思路:利用三层循环会超时

先枚举第一个元素,从[i+1,numsSize)的范围枚举j,k对应数

如果 a+b+c≥target,那么就将 c指针左移一位;注意考虑指针的范围j<k

如果 a+b+c<target,那么就将 b指针右移一位。

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

http://www.ppmy.cn/news/1540712.html

相关文章

Python爬虫:获取数据的入门详解

在互联网时代&#xff0c;数据已成为最宝贵的资源之一。Python&#xff0c;作为一种功能强大且易于学习的编程语言&#xff0c;成为了数据获取和处理的理想工具。Python爬虫&#xff0c;特别是&#xff0c;允许我们从网页中自动提取大量数据&#xff0c;为数据分析、机器学习、…

基于Springboot+Vue的资源分享系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

Java入门知识点

1.各种程序使用的开发语言&#xff1a; 数据分析类&#xff1a; 大数据&#xff0c;云计算--pythonsql 科学计算--python 机器学习&#xff0c;深度学习--python 应用开发类&#xff1a; C/S架构&#xff1a; 桌面应用开发--根据环境选择开发语言 移动端app--根据环境选择开发语…

深入理解WebSocket协议原理、实现与应用

1. 引言 1.1 什么是WebSocket&#xff1f; WebSocket是一种基于TCP的通信协议&#xff0c;它为客户端和服务器之间提供了全双工通信能力。与传统的HTTP协议不同&#xff0c;WebSocket允许在一个单一的TCP连接上进行双向通信&#xff0c;避免了每次通信都需要重新建立连接的开…

pgAdmin不显示template1数据库,该如何设置才可以显示?

pgAdmin和其他数据库管理工具一样&#xff0c;可能是考虑到使用者&#xff08;比如普通开发人员&#xff09;可能并不是特别的了解PostgreSQL的(相对)底层的逻辑&#xff1b;因此&#xff0c;为了方便使用&#xff08;提高使用体验&#xff09;&#xff0c;默认情况下&#xff…

单链表的经典算法OJ

目录 1.反转链表 2.链表的中间节点 3.移除链表元素 ——————————————————————————————————————————— 正文开始 1.反转链表 typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) {//判空if(…

PyTorch 中 functional.py 文件介绍

PyTorch PyTorch 是一个开源的机器学习库&#xff0c;广泛用于计算机视觉和自然语言处理等应用。它由 Facebook 的人工智能研究团队开发&#xff0c;并得到了许多研究机构和企业的支持。PyTorch 以其易用性、灵活性和强大的社区支持而受到欢迎。一些特点如下&#xff1a; 动态…

【openwrt-21.02】Openwrt NAT配置举例

Openwrt NAT配置举例 DNAT Port forwarding for IPv4 (DNAT) 此规则的目标是将端口 2222 上的所有 WAN 端 SSH 访问重定向到 单个 LAN 端工作站的 SSH &#xff08;22&#xff09; 端口。 config redirectoption target DNAToption src wanoption dest…