代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和

本文主要是介绍代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

242.有效的字母异位词

在这里插入图片描述

题目链接: 203.移除链表元素
文档讲解:代码随想录
状态:so easy

思路:使用计数器数组统计字符串中字符出现频率。

题解

public boolean isAnagram(String s, String t) {// 将输入的字符串s转换为字符数组char[] sChars = s.toCharArray();// 将输入的字符串t转换为字符数组char[] tChars = t.toCharArray();// 初始化一个大小为26的数组,用于计数字符出现的次数// 由于只有小写字母,所以数组大小为26,索引0对应字符'a',索引25对应字符'z'int[] counter = new int[26];// 遍历字符串s的字符数组for (char c : sChars) {// 将字符转换为0到25的索引,并在对应位置的计数器增加1counter[c - 'a']++;}// 遍历字符串t的字符数组for (char c : tChars) {// 将字符转换为0到25的索引,并在对应位置的计数器减少1counter[c - 'a']--;}// 遍历计数器数组,检查是否有任何计数不为0for (int i : counter) {// 如果任何计数器的值不为0,则说明s和t不是变位词,返回falseif (i != 0) {return false;}}// 如果所有计数器的值都为0,则说明s和t是变位词,返回truereturn true;
}

349. 两个数组的交集

在这里插入图片描述

题目链接:349. 两个数组的交集
文档讲解:代码随想录
状态:so easy

思路:首先使用一个计数器数组来记录 nums1 中每个元素的出现次数。然后,它检查 nums2 中的每个元素,如果该元素在 nums1 中出现过(即计数器数组中对应的值大于0),则将该元素在计数器数组中的值设置为 -1。之后,它遍历计数器数组,将所有值为 -1 的元素(即两个数组共有的元素)收集到一个 ArrayList 中。最后,将 ArrayList 中的元素复制到一个新的整型数组中,并返回这个数组。

题解:

public int[] intersection(int[] nums1, int[] nums2) {// 初始化一个大小为1001的计数器数组,用于存储每个数字的出现次数// 数组的大小可以根据实际需要调整,这里假设输入数组中的元素不会超过1000int[] counter = new int[1001];// 遍历数组nums1,对每个元素在计数器数组中对应的位置增加1for (int i : nums1) {counter[i]++;}// 遍历数组nums2,检查计数器数组中对应位置的值// 如果该位置的值大于0,说明此元素在nums1中出现过,将其设置为-1// 这里使用-1来标记nums1和nums2共有的元素for (int i : nums2) {if (counter[i] > 0) {counter[i] = -1;}}// 创建一个ArrayList,用于存储共有元素ArrayList<Integer> list = new ArrayList<>();// 遍历计数器数组,找出所有值为-1的元素,即nums1和nums2共有的元素for (int i = 0; i < counter.length; i++) {if (counter[i] == -1) {list.add(i);}}// 创建一个数组,大小为共有元素的个数int[] ans = new int[list.size()];// 初始化一个索引i,用于在ans数组中添加元素int i = 0;// 遍历ArrayList,将共有元素添加到ans数组中for (Integer integer : list) {ans[i++] = integer;}// 返回包含共有元素的数组return ans;
}

202. 快乐数

在这里插入图片描述

题目链接:202. 快乐数
文档讲解:代码随想录
状态:so easy

思路:通过使用一个 HashSet 来记录已经遍历过的数字,避免无限循环。如果数字 n 等于1,那么它是一个快乐数。

题解:

public boolean isHappy(int n) {// 创建一个HashSet,用于存储已经遍历过的数字HashSet<Integer> set = new HashSet<>();// 使用while循环进行操作,条件是当前数字n不在set中while (!set.contains(n)) {// 如果n等于1,根据快乐数的定义,返回trueif (n == 1)return true;// 将当前数字n添加到set中,避免重复遍历set.add(n);// 调用getNum方法,计算n的下一个状态n = getNum(n);}// 如果循环结束,说明已经检测到循环,根据快乐数的定义,返回falsereturn false;
}public int getNum(int n) {int sum = 0;// 使用while循环,直到n变为0while (n != 0) {// 计算n的最后一位数字的平方,然后加到sum上sum += Math.pow(n % 10, 2);// 将n除以10并取整,去掉最后一位数字n /= 10;}// 返回计算得到的sumreturn sum;
}

1. 两数之和

在这里插入图片描述

题目链接: 1. 两数之和
文档讲解:代码随想录
状态:卡了一会儿,刚开始把所有的元素加入到HashMap中,然后再次遍历数组的时候去HashMap中找是否存在补数,这种方法没有考虑到重复元素的问题

题解:

    public int[] twoSum(int[] nums, int target) {// 创建一个HashMap,用于存储遍历过的数字及其索引HashMap<Integer, Integer> map = new HashMap<>();// 初始化一个长度为2的数组,用于存储两个数的索引int[] res = new int[2];// 遍历数组nums中的每个元素for (int i = 0; i < nums.length; i++) {// 检查map中是否存在当前元素的补数Integer val = map.get(target - nums[i]);// 如果map中存在当前元素的补数(即target - nums[i])if (val != null) {// 将补数的索引赋值给res[0]res[0] = val;// 将当前元素的索引i赋值给res[1]res[1] = i;// 返回包含两个数索引的数组return res;}// 将当前元素及其索引存入map中map.put(nums[i], i);}return res;}

这篇关于代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008581

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO