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

—— 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 = 0
        for i in range(len(nums)):
            for j in range(i + 1,len(nums)):
                if nums[i] == nums[j]:
                    sum += 1
        return 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 = 0
        for i in nums:
            if i not in res.keys():
                res[i] = 1
            else:
                res[i] += 1
        for j in res.values():
            if j != 1:
                sum += j * (j-1) // 2
        return 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 = 0
        for 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 + 1
        return 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();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S 快速实战

K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…

Redis 集群模式入门

Redis 集群模式入门 一、简介 Redis 有三种集群模式&#xff1a;主从模式、Sentinel 哨兵模式、cluster 分片模式 主从复制&#xff08;Master-Slave Replication&#xff09;: 在这种模式下&#xff0c;数据可以从一个 Redis 实例&#xff08;主节点 Master&#xff09;复…

Vue2 项目二次封装Axios

引言 在现代前端开发中&#xff0c;HTTP请求管理是构建健壮应用的核心能力之一。Axios作为目前最流行的HTTP客户端库&#xff0c;其灵活性和可扩展性为开发者提供了强大的基础能力。 1. 为什么要二次封装Axios&#xff1f; 1.1 统一项目管理需求 API路径标准化&#xff1a;…

Ceisum无人机巡检直播视频投射

接上次的视频投影&#xff0c;Leader告诉我这个视频投影要用在两个地方&#xff0c;一个是我原先写的轨迹回放那里&#xff0c;另一个在无人机起飞后的地图回显&#xff0c;要实时播放无人机拍摄的视频&#xff0c;还要能转镜头&#xff0c;让我把这个也接一下。 我的天&#x…

AI Agent:深度解析与未来展望

一、AI Agent的前世&#xff1a;从概念到萌芽 &#xff08;一&#xff09;早期探索 AI Agent的概念可以追溯到20世纪50年代&#xff0c;早期的AI研究主要集中在简单的规则系统上&#xff0c;这些系统的行为是确定性的&#xff0c;输出由输入决定。随着时间的推移&#xff0c;…

Spring MVC:HTTP 请求的参数传递2.0

本篇博客接上文: Spring MVC&#xff1a;Spring 前置知识 & HTTP 请求的参数传递1.0-CSDN博客 目录 1. 传递 json - RequestBody 1.1 json 1.1.1 什么是 json 1.1.2 json 的语法 1.1.3 json 和 Java 中对象的转换 1.1.4 json 优点 1.2 传递 json 2. 获取路径参数 -…

电子应用设计方案103:智能家庭AI浴缸系统设计

智能家庭 AI 浴缸系统设计 一、引言 智能家庭 AI 浴缸系统旨在为用户提供更加舒适、便捷和个性化的沐浴体验&#xff0c;融合了人工智能技术和先进的水疗功能。 二、系统概述 1. 系统目标 - 实现水温、水位和水流的精确控制。 - 提供多种按摩模式和水疗功能。 - 具备智能清洁…

设计模式的艺术-外观模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解外观模式 外观类充当了软件系统中的“服务员”&#xff0c;它为多个业务类的调用提供了一个统一的入口&#xff0c;简化了类与类之间的交互。 外观模式&#xff08;Facade Pattern&#xff09;&a…

“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““

主题与背景 本文主要介绍了如何在R语言中使用predict函数对已拟合的Cox比例风险模型进行新数据的预测和推理。Cox模型是一种常用的生存分析方法&#xff0c;用于评估多个因素对事件发生时间的影响。文章通过具体的代码示例展示了如何使用predict函数的不同参数来获取生存概率和…

戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法

最近有很多网友问&#xff0c;戴尔台式机怎么设置u盘启动&#xff0c;特别是近两年的戴尔台式机比较复杂&#xff0c;有些网友不知道怎么设置&#xff0c;其实设置u盘启动有两种方法&#xff0c;下面小编教大家戴尔电脑设置u盘启动方法。 戴尔电脑设置u盘启动方法一、戴尔进入b…

【React】 react路由

这一篇文章的重点在于将React关于路由的问题都给搞清楚。 一个路由就是一个映射关系&#xff0c;key:value。key是路径&#xff0c;value 可能是function或者component。 安装react-router-dom包使用路由服务&#xff0c;我这里想要用的是6版本的包&#xff0c;因此后面加”6&q…

隐私保护+性能优化,RyTuneX 让你的电脑更快更安全

RyTuneX 是一款专为 Windows 10 和 11 用户量身打造的系统优化工具&#xff0c;采用先进的 WinUI 3 框架开发&#xff0c;以其现代化的设计风格和强大的功能集合脱颖而出。这款工具不仅界面简洁美观&#xff0c;还提供了多样化的系统优化选项&#xff0c;旨在帮助用户最大化设备…

HTML新春烟花

系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;1…

(回溯分割)leetcode93 复原IP地址

#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是&#xff1a;n个字符&#xff0c;递推n1后&#xff08;叶子节点&#xff…

关于ARM和汇编语言

一图流 ARM 计算机组成 输入设备 输出设备 存储设备 运算器 控制器 处理器读取内存程序执行的过程 取指阶段&#xff1a;控制器器通过地址总线向存储器发送想要获取的指令的地址编号&#xff0c;存储器将指定的指令发送给处理器 译码阶段&#xff1a;控制器对指令进行分…

个人学习 - 什么是Vim?

观我往旧&#xff0c;同我仰春 - 2025.1.10 声明 仅作为个人学习使用&#xff0c;仅供参考 本文所有解释参考笔者个人理解&#xff0c;最终目的是服务于自我学习&#xff0c; 如果你需要了解官方更规范的解释&#xff0c;请自行查阅 Vim 是什么 Vim 是一个强大的 文本编辑器…

python学习笔记2-简单数据类型

不同类型的变量可以进⾏的运算是不同的&#xff0c;所以必须理解变量的类型&#xff0c;python中数据类型可以分为&#xff1a; Number&#xff08;数值&#xff09; 整型&#xff08;int&#xff09; python3中只有int⼀种&#xff0c;可以表⽰整数&#xff0c;例如&#xf…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

Python的进程和线程

ref 接受几个设定: 进程是一家almost密不透风的公司,缅甸KK园区 线程里面工作的…人 进程**[园区]**内公共资源对于进程来说,可以共享. 别的园区[进程],一般不能和自己的园区共享人员资源,除非… 好的,现在再接受设定: 单个CPU在任一时刻只能执行单个线程&#xff0c;只有…

03垃圾回收篇(D4_彻底理解GC)

目录 一、浅析大促备战过程中出现的 fullGc&#xff0c;我们能做什么&#xff1f; 1. 什么是 JVM 的 GC? 2. 写代码的时候能做什么&#xff1f; 3. 测试能做啥 4. 知识小结 二、MinorGC、MajorGC、FullGC垃圾回收介绍 1. MinorGC &#xff08;新生代垃圾回收&#xff09…