【力扣:新动计划,编程入门 —— 题解 ②】

news/2025/1/24 7:42:17/

—— 25.1.23

1512. 好数对的数目

给你一个整数数组 nums 。

如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。

返回好数对的数目。

示例 1:

输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始

示例 2:

输入:nums = [1,1,1,1]
输出:6
解释:数组中的每组数字都是好数对

示例 3:

输入:nums = [1,2,3]
输出:0

方法一 暴力遍历

思路与算法

双重循环进行遍历,判断nums[i] == nums[j]时,计数变量sum+1,当双重循环进行遍历完成后,返回计数变量sum

Python实现

class Solution:def numIdenticalPairs(self, nums: List[int]) -> int:sum = 0for i in range(len(nums)):for j in range(i + 1,len(nums)):if nums[i] == nums[j]:sum += 1return sum


Java实现 

class Solution {public int numIdenticalPairs(int[] nums) {int i = 0;int j = 0;int num = 0;for(i = 0; i < nums.length; i++){for(j = i + 1; j < nums.length; j++){if(nums[i] == nums[j]){num += 1;} }}return num;}
}


方法二 字典 + 哈希表

思路与算法

如果一个元素在数组中出现 k 次,则选择两个元素组成好数对的方案数是: k × (k−1) / 2因此该元素对应的好数对的数目是: k × (k−1) / 2

因此,只要得到每个元素在数组中的出现次数,分别计算每个元素对应的好数对的数目,即可得到数组中的好数对的数目。

Python实现

values()返回一个视图对象,该对象包含了字典中所有的值。借助这个视图对象,你能够遍历字典里的所有值,并且它会动态地反映出字典的变化。

keys()返回一个视图对象,该视图对象包含了字典中所有的键

class Solution:def numIdenticalPairs(self, nums: List[int]) -> int:res = {}sum = 0for i in nums:if i not in res.keys():res[i] = 1else:res[i] += 1for j in res.values():if j != 1:sum += j * (j-1) // 2return sum

Java实现 

getOrDefault():Map 接口定义了 getOrDefault 方法,该方法的作用是从 Map 中获取指定键对应的值。若该键存在于 Map 中,就返回其对应的值;若键不存在,则返回预先指定的默认值。这一方法能避免在使用 get 方法时手动检查键是否存在并提供默认值的繁琐操作。

entrySet():用于返回一个包含 Map 中所有键值对(即 Map.Entry 对象)的 Set 集合视图。Map.Entry 是 Map 接口的一个内部接口,它代表了 Map 中的一个键值对,其中包含了键和对应的值。

getValue() :getValue() 是 Map.Entry 接口所定义的方法,其作用是获取当前键值对中的值。

class Solution {public int numIdenticalPairs(int[] nums) {HashMap<Integer, Integer> res = new HashMap<>();for(int num: nums){res.put(num, res.getOrDefault(num, 0) + 1);}Set<Map.Entry<Integer, Integer>> entries = res.entrySet();int sum = 0;for (Map.Entry<Integer, Integer> entry : entries) {int count = entry.getValue();sum += count * (count - 1) / 2;}return sum;}
}


1534. 统计好三元组

给你一个整数数组 arr ,以及 ab 、c 三个整数。请你统计其中好三元组的数量。

如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。

  • 0 <= i < j < k < arr.length
  • |arr[i] - arr[j]| <= a
  • |arr[j] - arr[k]| <= b
  • |arr[i] - arr[k]| <= c

其中 |x| 表示 x 的绝对值。

返回 好三元组的数量 。

示例 1:

输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
输出:4
解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 。

示例 2:

输入:arr = [1,1,2,2,3], a = 0, b = 0, c = 1
输出:0
解释:不存在满足所有条件的三元组。 

方法一 暴力遍历 

思路与算法

Python实现

abs(): 是一个内置函数,用于返回一个数的绝对值。绝对值指的是一个数在数轴上所对应点到原点的距离,所以绝对值一定是非负的。

class Solution:def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:res = 0for i in range(len(arr)):for j in range(i + 1, len(arr)):for k in range(j + 1, len(arr)):if abs(arr[i] - arr[j]) <= a and abs(arr[j] - arr[k]) <= b and abs(arr[i] - arr[k]) <= c:res = res + 1return res


Java实现

Math.abs(): 是 Java 中的一个静态方法,它属于 java.lang.Math 类,主要用于返回一个数的绝对值。绝对值是指一个数在数轴上所对应点到原点的距离,所以其结果总是非负的。

class Solution {public int countGoodTriplets(int[] arr, int a, int b, int c) {int res = 0;for(int i = 0; i < arr.length; i++){for(int j = i + 1; j < arr.length; j++){for(int k = j + 1; k < arr.length; k++){if(Math.abs(arr[i] - arr[j]) <= a && Math.abs(arr[j] - arr[k]) <= b && Math.abs(arr[i] - arr[k]) <= c){res += 1;}}}}return res;}
}


709. 转换成小写字母

示例 1:

输入:s = "Hello"
输出:"hello"

示例 2:

输入:s = "here"
输出:"here"

示例 3:

输入:s = "LOVELY"
输出:"lovely"

提示:

  • 1 <= s.length <= 100
  • s 由 ASCII 字符集中的可打印字符组成

方法一 遍历判断处理

思路与算法

遍历字符串,判断每个字符是否为大写字母,如果是的话就转换为小写字母(ASCI码值加32),本身是小写字母就不用转换,最后将各个字符组装成字符串输出。

Python实现

ord():函数用于返回一个字符的 Unicode 码点(整数表示)。Unicode 是一种国际编码标准,它为世界上几乎所有的字符都分配了一个唯一的数字编号,这个编号就是码点

chr():函数与 ord() 函数相反,它接受一个整数(Unicode 码点)作为参数,并返回对应的字符

append():是列表(list)对象的一个方法,用于在列表的末尾添加一个新的元素。该操作会直接修改原列表,而不会返回一个新的列表。

join():是字符串对象的一个方法,用于将一个可迭代对象(如列表、元组等)中的元素以指定的字符串为分隔符连接成一个新的字符串

class Solution:def toLowerCase(self, str: str) -> str:res = []for i in str:if 65 <= ord(i) <= 90:res.append(chr(ord(i) + 32))else:res.append(i)return "".join(res)

Java实现

charAt():是 String 类的一个实例方法,其作用是返回字符串中指定索引位置的字符。索引从 0 开始计数,即第一个字符的索引为 0,第二个字符的索引为 1,依此类推。

(char)():(char)() 属于强制类型转换操作。它可以把其他基本数据类型(像 intbyteshort 等)转换为 char 类型。

append():append() 方法可以将各种类型的数据添加到 StringBuilder 或 StringBuffer 对象的末尾

toString():该方法的作用是返回对象的字符串表示形式。许多类会重写这个方法,以提供更有意义的字符串表示。

class Solution {public String toLowerCase(String s) {StringBuilder str = new StringBuilder();for(int i = 0; i < s.length(); i++){char ch = s.charAt(i);if(ch >= 65 && ch <= 90){ch = (char)(ch+32);}str.append(ch);}return str.toString();}
}


方法二 转小写API

思路与算法

使用语言自带的大写字母转小写字母的 API

Python实现

lower():把字符串中的所有大写字母转换为小写字母,而字符串中的其他字符(如小写字母、数字、标点符号等)保持不变。该方法不会修改原字符串,而是返回一个新的字符串。

class Solution:def toLowerCase(self, s: str) -> str:return s.lower()


Java实现

toLowerCase():其功能是把字符串中的所有大写字母转换为小写字母,同样不会修改原字符串,而是返回一个新的字符串。

class Solution {public String toLowerCase(String s) {return s.toLowerCase();}
}

 


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

相关文章

Java设计模式—观察者模式

观察者模式 目录 观察者模式1、什么是观察者模式&#xff1f;2、观察者模式优缺点及注意事项&#xff1f;3、观察者模式实现&#xff1f;4、手写线程安全的观察者模式&#xff1f; 1、什么是观察者模式&#xff1f; - 实例&#xff1a;现实生活中很多事物都是依赖存在的&#x…

专业学习|最优化理论(目标函数、约束条件以及解题三板斧)

个人学习使用资料,请勿传播,若有侵权联系删除,资料来源:fairy girl。 一、最优化理论:让决策更科学,让模型更高效 (一)什么是最优化理论? 最优化理论是数学的一个分支,它研究如何在一定约束条件下找到使目标函数达到最大值或最小值的最优解。 关键概念:最优化理论的…

rclone整合alist

rclone整合alist 安装/配置rclone脚本安装rcloneetc/systemd/system/rclonehttp.serviceetc/systemd/system/rclone-alist.serviceconfig授权下载HTTP web介面文件启用服务并设置开机启动 安装/配置rclone 脚本安装rclone sudo -v ; curl https://rclone.org/install.sh | su…

【MySQL】存储引擎有哪些?区别是什么?

频率难度60%⭐⭐⭐⭐ 这个问题其实难度并不是很大&#xff0c;只是涉及到的相关知识比较繁杂&#xff0c;比如事务、锁机制等等&#xff0c;都和存储引擎有关系。有时还会根据场景选择不同的存储引擎。 下面笔者将会根据几个部分尽可能地讲清楚 MySQL 中的存储引擎&#xff0…

深度学习-92-大语言模型LLM之基于langchain的模型IO的模型调用

文章目录 1 Model的输入输出2 langchain支持的模型3 调用Ollama模型3.1 设置环境变量3.2 大语言模型LLM(OllamaLLM)3.2.1 生成文本补全3.2.2 流式生成文本补全3.3 聊天模型(ChatOllama)3.3.1 内置的消息类型3.3.2 HumanMessage和SystemMessage3.3.3 元组方式构成消息列表3.3.4 …

【Trunk接口配置】

Trunk接口配置 Trunk即干道链路&#xff0c;用来在不同设备&#xff08;交换机和交换机&#xff0c;交换机和路由器&#xff09;间承载所有vlan数据。不属于任何一个具体的vlan&#xff0c;可以传输所有vlan的数据&#xff0c;也可以传输指定vlan的数据。 设备IPvlanPC110.1.…

ceph新增节点,OSD设备,标签管理(二)

一、访问客户端集群方式 方式一: 使用cephadm shell交互式配置 [rootceph141 ~]# cephadm shell # 注意&#xff0c;此命令会启动一个新的容器&#xff0c;运行玩后会退出&#xff01; Inferring fsid c153209c-d8a0-11ef-a0ed-bdb84668ed01 Inferring config /var/lib/ce…

Qt 5.14.2 学习记录 —— 십구 事件

文章目录 1、事件的概念2、处理事件3、鼠标事件1、鼠标单击和双击2、鼠标移动3、鼠标滚轮滚动 4、键盘事件5、定时器事件6、窗口移动和大小改变事件 1、事件的概念 用户进行操作时会产生事件&#xff0c;事件可以关联处理函数。Qt封装了操作系统的事件机制&#xff0c;然后进一…