DAY22

news/2025/2/21 10:23:25/

题目1

给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得到1-range范围上所有的数,返回arr最少还缺几个数。
[举例]
arr. = {1.2,3,7},range = 15想累加得到1-15范围上所有的数,arr 还缺14这个数,所以返回1 arr=
{1,5,7},range= 15想累加得到1~15范围上所有的数,arr 还缺2和4,所以返回2

public static int minPatches2(int[] arr, int K) {int patches = 0; // 缺多少个数字int range = 0; // 已经完成了1 ~ range的目标for (int i = 0; i != arr.length; i++) {// 1~range// 1 ~ arr[i]-1while (arr[i] > range + 1) { // arr[i] 1 ~ arr[i]-1if (range > Integer.MAX_VALUE - range - 1) {return patches + 1;}//防止越界 已知给的范围一定是整形 如果满足这个条件 就说明再加 就要越界了 会报错 因为它下一步就会让range+range+1range += range + 1; // range + 1 是缺的数字patches++;//啊 懂了 例如 1 2 6 此时range为3 要补到6 我们完全不需要把 4 5补上 补个3 range就到6了if (range >= K) {return patches;}}if (range > Integer.MAX_VALUE - arr[i]) {return patches;//这一步也是 如果range再运算一次 他就溢出了}range += arr[i];if (range >= K) {return patches;}}while (K >= range + 1) {if (K == range && K == Integer.MAX_VALUE) {return patches;}if (range > Integer.MAX_VALUE - range - 1) {return patches + 1;}range += range + 1;patches++;}return patches;}

题目2

在一个字符串中找到没有重复字符子串中最长的长度。
例如: .
abcabcbb没有重复字符的最长子串是abc,长度为3
bbbbb,答案是b, 长度为1
pwwkew.答案是wke,长度是3
要求:答案必须是子串,"pwke" 是-个子字符序列但不是一-个子字符串。

dp[i] 表示以i结尾的最长子串长度
两个瓶颈 第一个str[i]位置上字符出现过的次数

第二个 dp[i-1]位置的左边界

这两个瓶颈 取一个最差的

 public int lengthOfLongestSubstring(String s) {if(s==null||s.length()==0) {return 0 ;}char [] str = s.toCharArray();int [] dp = new int [str.length];dp[0] = 1;HashMap<Character, Integer> map = new HashMap<Character, Integer>();map.put(str[0], 0);int max = 1;for (int i = 1; i < dp.length; i++) {int left;if(!map.containsKey(str[i])) {left = -1;}else {left = map.get(str[i])+1;}left = Math.max(left, i-dp[i-1]);dp[i] = i-left+1;map.put(str[i], i);max = Math.max(dp[i], max);}return  max;}


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

相关文章

英语词法——介词

介词是一种虚词,不能独立 充当句子成分,通常用于名词、名词词组或相当于名词词组的结构之前,表不词语之间的意义关系。介词能和不同的词语搭配,表示不同的意义。 第一节 介词的分类 按照介词的构成形式,可以将介词大致分为四类: 一、简单介词 由一个词构成的介词被称…

读高性能MySQL(第4版)笔记02_MySQL架构(下)

1. 事务日志 1.1. 事务日志有助于提高事务的效率 1.1.1. 存储引擎只需要更改内存中的数据副本&#xff0c;而不用每次修改磁盘中的表&#xff0c;这会非常快 1.1.2. 更改的记录写入事务日志中&#xff0c;事务日志会被持久化保存在硬盘上 1.2. 事务日志采用的是追加写操作&…

代码随想录算法训练营第三十六天|背包理论基础,LeetCode 416

目录 背包理论基础 动态规划五步曲&#xff1a; 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 5.举例dp数组 背包理论基础II 动态规划五步曲&#xff1a; 1.确定dp[j]含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 5.举例dp数组 L…

代码随想录算法训练营第58天|动态规划part15|392.判断子序列、115.不同的子序列

代码随想录算法训练营第58天&#xff5c;动态规划part15&#xff5c;392.判断子序列、115.不同的子序列 392.判断子序列 392.判断子序列 思路&#xff1a; &#xff08;这道题也可以用双指针的思路来实现&#xff0c;时间复杂度也是O(n)&#xff09; 这道题应该算是编辑距…

驾考笔记 _ 科目3 - 坂田线路图

深圳坂田线路图 1#线 >2#线 >3#线 > 1#线 > 2#线 > 3#线 > 简图&#xff1a;

【每日一题】88. 合并两个有序数组

【每日一题】88. 合并两个有序数组 88. 合并两个有序数组题目描述解题思路 88. 合并两个有序数组 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 …

openGauss学习笔记-41 openGauss 高级数据管理-匿名块

文章目录 openGauss学习笔记-41 openGauss 高级数据管理-匿名块41.1 语法41.2 参数说明41.3 示例 openGauss学习笔记-41 openGauss 高级数据管理-匿名块 匿名块&#xff08;Anonymous Block&#xff09;是存储过程的字块之一&#xff0c;没有名称。一般用于不频繁执行的脚本或…

JavaScript 中替换所有匹配项的自定义函数非正则表达式

引言 在 JavaScript 中&#xff0c;字符串替换是常见的操作之一。虽然 JavaScript 提供了一些内置的字符串方法来实现替换&#xff0c;比如 replace() 方法&#xff0c;但它只会替换第一个匹配到的项。如果我们想要替换所有匹配到的项&#xff0c;就需要自己编写一个函数。本文…