
刷题练习
通过题目增强对C++、Java等多种语言的熟悉与运用。
城猪猪
心之所向,素履以往。
展开
-
数据结构-最大子序和-21/09/17
这里有两种解法,一种是累计判断,一种是分治法,但是第一种我有点不太理解。。。先把代码贴上。/* * 日期:2021.09.17 * 作者:城主 * 题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 * 解题思路: * 为啥说是寻求最大和,这是因为在数组中不仅有正数,还会有负数,部分之和可能会大于整个序列之和, * 所以这里考察的应该是动态算法,贪心算法与动态算法这两者的区别: * 动态规划算法通常以自底向上的方式解各子问题,而贪心.原创 2021-09-17 21:11:43 · 86 阅读 · 0 评论 -
模拟-铺地毯
题目:题目来源反思:这里用到了一个正难则反的思想,如果顺序的思维解决不了问题,我们可以试试逆着来。附上一句歌词以此来表达我的心情:“我想要怒放的生命”。话不多说,代码如下:/* * 日期:2020.02.24 * 作者:城主 * 题目:洛古普及题-铺地毯 * 思路:写一个关于地毯的类,包括它的左下角坐标, * 及x轴和y轴的长度,可以写一个类的函数, * ...原创 2020-02-24 20:49:32 · 158 阅读 · 0 评论 -
模拟-玩具的谜题
题目:题目来源反思收获:利用Java实现这个解题的过程中,思路还算比较清晰,就是创建类的数组时,忘记给数组的元素开辟空间了(其实这个地方可以用两个数组来代替),导致出了一点小问题。Java还是比较好用的,细节加熟练,保持这份热爱吧。以下为代码:package hjc;/* * 日期:2020.02.16 * 作者:城主 * 题目:洛古普及题-玩具的谜题 * 思路:先保存小人个数和指...原创 2020-02-23 20:35:57 · 153 阅读 · 0 评论 -
模拟——机器翻译
题目来源呜呜,简直痛哭流涕,第一次发现Java带给我的无限的快乐,Java的很多已经写好的类还是比较好用的,重要的是我们怎么去理解和使用它,每天的一点点进步是漫长且充满着幸福的。AC这题目的关键是学会构造一个阻塞队列,,如下ArrayBlockingQueue<Integer> Q = new ArrayBlockingQueue<>(capa);不多说,代码如下...原创 2020-02-26 20:58:37 · 179 阅读 · 0 评论 -
数据结构-存在重复元素-21/09/17
感觉自己好菜,,,连专业名词都不知道。散列表 ( Hash table ,也叫 哈希表 ),是根据 键 (Key)而直接访问在记忆体储存位置的 数据结构 。. 也就是说,它通过计算一个关于键值的函数,将所需查询的数据 映射 到表中一个位置来访问记录,这加快了查找速度。今天不学习,明天变垃圾。继续加油吧。以下是自己编写的代码。 //编写处理函数 public static boolean isRepeat(int []num) { Map map=new HashMap(); for(in.原创 2021-09-17 20:41:29 · 145 阅读 · 0 评论 -
两数相加---2021/09/25
题目描述如下:两数相加解该题的几点心得如下:1、关于Java使用链表的思想,思路不太清晰。2、题目理解错误,就是自己在坑自己。3、不同的循环结构,性能也是不一样的,本题主要体现在while与do while的使用。4、还有关注一下边界值,开辟新节点的前提是有值存在。以下为实现的代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;原创 2021-09-25 16:54:37 · 81 阅读 · 0 评论 -
两数之和---2021/9/23
两数之和代码如下(暴力方法): public int[] twoSum(int[] nums, int target) { int loca[]=new int [2]; int i=0; int j=0; int temp=0; Map map=new HashMap(); for(i=0;i<nums.length;i++) {原创 2021-09-22 21:13:27 · 109 阅读 · 0 评论 -
模拟—生活大爆炸版石头剪刀布
题目:题目来源这道题感觉还好,整个过程中犯的错误是写代码习惯用之前写过的部分代码,导致有些微妙错误难以发现,,细心再细心。不多说,代码如下:/* * 日期:2020.02.23 * 作者:城主 * 题目:洛古普及题-生活大爆炸版石头剪刀布 * 思路:保存猜拳次数作为两个猜拳者比较的次数,这里可以用两个数组分别 * 保存猜拳者出拳周期规律,可以用一个函数来判断哪个赢,作为...原创 2020-02-23 21:58:40 · 169 阅读 · 0 评论 -
罗马数字转整数---2022/01/13
题目描述罗马数字转整数首次实现方法:辨析字符,直接做转换。(这里的字串长度并不能提取出有用的信息)思路是从低位开始辨析字符并转换,如果当前的转换字符比上一个字符小,那就减当前值,否则做加法来得到整数结果。以下为java代码实现:public static int romanToInt(String s) { char [] temp=s.toCharArray(); int res=0; //注意从低位开始取 switch(temp[s.length()-1]) {原创 2022-01-13 11:57:38 · 251 阅读 · 0 评论 -
两两交换链表中的节点---2022/02/28
文章目录题目描述解题思考代码实现性能评估题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题目来源解题思考两种方法:第一种是定位法:明确交换规律,1与2交换(1称为交换位1,2称为交换位2),3与4交换(3称为交换位1,4称为交换位2),以此类推。所以要做定位,就是定位到奇数位,此时的奇数位与其后一位进行交换。为保证交换顺利,需要两个指针同时指向根节点,根节点的下一节点是head。交换方法是:1、一原创 2022-02-28 15:47:13 · 299 阅读 · 0 评论 -
移除元素---2022/03/16
文章目录题目描述解题思考代码实现性能评估题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。题目来源解题思考考虑覆盖的方法,只要当前的值不等于val值,就往同一个容器进行添加赋值。本次采用python实现。代码实现class Solution(object): def r原创 2022-03-16 11:00:38 · 7344 阅读 · 0 评论 -
删除有序数组中的重复项---2022/03/02
文章目录题目描述解题思考代码实现性能评估题目描述给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(原创 2022-03-02 10:39:04 · 143 阅读 · 0 评论 -
最长公共前缀---2022/01/18
题目描述最长公共前缀思路:寻找字符串数组里最小长度的字符串,然后用暴力法循环找出所有子串,并在其他的字符串中进行比对,并更新最长的公共前缀。收获:1、关掉其中一个代码编辑的窗口,使用快捷键ctrl+shift+{2、在windows中的debug目录下打开观察变量窗口3、关于寻找字符串中的子字符串,我这里的方法是遍历组合的方式,不知道有何更快捷的方法?4、输入单个字符串“a”的时候出现错误,这是因为res根本没有被第一个字符赋值的机会5、输入{"a","ab"}的时候,此时无输出,这个原因原创 2022-01-18 22:53:24 · 294 阅读 · 0 评论 -
括号生成---2022/02/25
文章目录题目描述解题思路代码实现性能评估题目描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。题目来源解题思路首先补充一下关于深度优先搜索与广度优先搜索的知识。深度优先搜索相当于树的先序遍历(从根结点出发,先序遍历左子树,而后先序遍历右子树),通常使用栈的数据存储观念进行计算;广度优先搜索相当于树的层次遍历,通常使用队列的数据存储观念进行计算。代码实现class Solution { List<String> res=new原创 2022-02-25 17:27:04 · 327 阅读 · 0 评论 -
删除链表的倒数第N个节点---2022/02/22
题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。题目来源JAVA实现如下:package czz;/* * 日期:2022.02.22 * 作者:城主 * 题目:给定一个链表删除倒数第n个节点并返回头节点 * 思考:由于java和C还是有所区别,少了指针的概念,那么在 * java中使用何种结构来表示C语言中的指针概念? * * 清楚了节点之间的连接关系,由于是倒数第n个节点,所以, * 首先定位到第l原创 2022-02-22 11:50:31 · 259 阅读 · 0 评论 -
最长回文字串---2022/01/05
题目描述:最长回文子串题解思路第一次考虑的时候使用的是暴力法。因为当时动态规划的方法没有理解。现在考虑使用动态规划的方法。主要考虑两种情况。第一种情况:如果子串长度小于2,这里分为字串长度为1或者2的情况。如果字串长度为1,那么该子串肯定为回文串。如果子串长度为2,记子串初始位置为i,结束位置为j,如果str[i]=str[j]的话,那么也为回文子串,记ifhw[i,j]=true。否则false。第二种情况:如果长度超过3的话,在i+1<j-1的情况下,判断子串为回文串,需要满足两个原创 2022-01-05 15:10:23 · 347 阅读 · 0 评论 -
三数之和---2022/01/20
题目来源:三数之和题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。双指针的思路: (相对单方向指针,会存在判断麻烦以及重复计算的困扰,应在更小的范围内去得到结果)前提---先做排序处理;结构---由i遍历所有字符。left和right在i的右边;判断---如果三数之和大于0 ,right=right-1; 如果三数之原创 2022-01-20 18:27:32 · 641 阅读 · 0 评论 -
电话号码的字母组合---2022/01/23
题目来源题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射与电话按键相同。注意 1 不对应任何字母。思路:暴力法:多少个数字就多少个循环,循环长度为对应字符数组的长度如果取最大长度为4,那么循环为o(n^4)。前提---先建立对应关系数组;结构---由i遍历所有字符。字符转化成数字对应的字符串进行组合;判断---循环数字对应的字符串字符,然后进行组合。(拎一个出来做基准)组合的原则是每个数字都要从对应的字符串中提供原创 2022-01-23 11:30:52 · 475 阅读 · 0 评论 -
整数反转---2022/01/07
题目描述整数反转这里遇到了一个小问题,如何处理溢出问题。就是再处理过程中不断对比最低位的值,如果发生变化,则说明出现溢出。以下为java实现package cz;//日期:2022/01/07//作者:城主//题目:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。//题解思路:考虑使用求余的方法,但是前提需要知道数字长度,将低位数取出从高位存起// 还有一种方法,一边对10求余取低位,一边乘以十取反转// 考虑溢出的情况,当做反原创 2022-01-07 21:00:49 · 509 阅读 · 0 评论 -
四数之和---2022/02/20
题目描述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复)。题目来源JAVA实现以及相关思考如下:import java.util.ArrayList;import java.util.Arrays;import java.util.List;/* * 日期:2022.02.20 * 作者:城原创 2022-02-20 16:42:00 · 412 阅读 · 0 评论 -
字符串转换整数---2022/01/08
题目描述字符串转换整数题解一些考虑:1、如果字符数组含有未定位的位置,或者含有不是数字的字符,那么字符数组转换成字符串是没有问题的,但是字符串转换成数字就会出现问题。所以我这里直接考虑将单个数字转化成数字??还有另外一种考虑就是直接将数字字符加到字符串里面,保证字符串的纯洁性。2、函数的数值是否在合理范围之内,不是字符串一输入就开始判断的,因为此时的字符串不够规范,不能转换成具体的数值。3、对题目的理解不到位,如果检测到的第一个字符不是数字字符,也应该直接返回0了,包括只有一个非法字符的字原创 2022-01-08 20:45:10 · 741 阅读 · 0 评论 -
有效的括号---2022/02/23
有效的括号题目描述解题思路代码实现性能评估与分析题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。题目来源解题思路思路:利用栈的知识,后进先出来进行判断如果是左括号,压入栈中;如果是右括号,判断最顶上的左括号是否匹配,如果匹配直接出栈,否则返回false;字符遍历结束之后,且栈中没有不存在元素,则返回true。这里的思考是,如何来构造栈,并使用相应原创 2022-02-23 19:40:02 · 278 阅读 · 0 评论 -
判断回文数---2022/01/10
题目描述题目描述这里有两种方法去实现1、转换成字符串的方法:直接对比第i位和第len-1-i位的值2、得到反转后的数字,然后比较两个数字是否相等首先第一种方法的java实现如下:package cz;/* 日期:2022/01/10 作者:城主 题目: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 这里有两种方法去实原创 2022-01-10 20:36:22 · 735 阅读 · 0 评论 -
最接近的三数之和---2022/01/21
题目来源最接近的三数之和题目描述给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。以下为java代码实现import java.util.Arrays;/* * 作者:城主 日期 :2022.01.21 题目: 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中原创 2022-01-21 18:45:45 · 607 阅读 · 0 评论 -
合并两个有序链表---2022/02/24
文章目录题目描述解题思考知识补充代码实现性能评估题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。题目来源解题思考思路:第一种方法:边比较边放入新的链表(这里存在一个比较边界的问题) 但是这里的时间复杂度为n的平方。方法描述在进行添加之前判断链表是否有效,如果链表1(2)已经指向末尾,把链表2(1)剩下元素全部添加到新建链表中,并直接返回。如果链表1当前元素<链表2当前元素,链表1当前元素添加新链表中,链表1指向下一个元素,否则链表2原创 2022-02-24 20:08:48 · 208 阅读 · 0 评论 -
Z变换----2022/01/06
题目描述z字型变换自己一开始的思考有所偏差,一直在考虑行和数的位置的关系,导致将问题复杂化,这里涉及到字符串特定的位置的字符的问题,过于复杂化了。但是还是记录一下自己的思考。以下为java代码实现。(没跑成功,,,)package cz;//日期:2022.01.05//题目:z字型(回文子串---就是正着读和倒着读都是一样的)//题解:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。//比如输入字符串为 "PAYPALISHIRING" 行数为原创 2022-01-07 12:09:50 · 1103 阅读 · 0 评论 -
K个一组反转链表---2022/03/01
文章目录题目描述解题思考代码实现性能评估题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。题目来源解题思考个人思路:先确定长度,确定共有多少个K组,而后遍历这K个节点值(双重循环),第i位与第k-i位进行节点值交换,从而达到翻转的目的。但是如果直接使用指针交换节点的话,这种方法不可行。参考更简便的解法,也是使用双重循环。大概思路是,在第二重循环中(由k原创 2022-03-01 17:41:14 · 528 阅读 · 0 评论 -
整数转罗马数字---2022/01/12
题目描述添整数转罗马数字以下是首次实现的思考:第一种方法,对应数字的方法。考虑一位数的情况,可以用直接的数组;考虑两位数的情况:十位上的数值<4,数值对应有多少个X,剩下的按照一位数的情况来写十位上的数值=4,对应XL,剩下的按照一位数的情况来写;5<十位上的数值>9,数值对应有L加个(数值减5)个XX,剩下的按照一位数的情况来写十位上的数值=9,对应XC,剩下的按照一位数的情况来写;考虑三位数的情况:百位上的数值<4,数值对应有多少个C,剩下的按照两位数的情况原创 2022-01-12 22:16:36 · 412 阅读 · 0 评论 -
合并K个升序链表---2022/02/26
文章目录题目描述解题思路代码实现性能评估题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。题目来源解题思路这里有两种解法可以考虑:首先是队列优先。思路是,把所有链表的头节点放入优先队列中。(补充说明:优先队列与先进先出队列不一样,每次取出的是具有最高优先级的元素。默认情况下,优先队列元素按照自然顺序排序,即数字小的在队头,字符串则按字典序排序。如果需要改变优先级的设定,需要实现Comparator接口。)而后将节点值值最小(涉及到优先级重原创 2022-02-26 11:12:59 · 300 阅读 · 0 评论 -
盛最多水的容器---2022/01/11
题目描述盛最多水的容器这里有两种方法去实现1、暴力法,遍历两两边然后取边较小的一边乘以坐标差,就是围成的面积,不断更新就行(这里有两个指标,不仅要考虑边的高度,还要考虑坐标差的影响。)提交结果:不通过,因为超过时间限制(小看了中等难度的题)。2、动态规划,看了下评论,说使用双指针的思想。由于面积=坐标差*高,如果缩小坐标,意味着保留高度更大的一边,(言简意赅,果然精髓无需多说)以下为java实现 public int maxArea(int[] height) {原创 2022-01-11 21:07:13 · 387 阅读 · 0 评论 -
n个骰子的点数------2022/08/04
刷题记录原创 2022-08-04 11:43:07 · 1175 阅读 · 0 评论 -
014字符串中的变位词---2022/03/30
文章目录题目描述解题思路代码实现性能评估题目描述给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。题目描述解题思路首先比较字符长度,如果s2长度小于s1,那么返回false;然后对与s1同长度的子串进行比较,是否出现的字符集及其出现次数是否一致,如果一致,返回true,如果不一致,那么尾指针往后一位,相应头指针也要移动。而后继续判断。一些收获:1、理解小括号、中括号、花括号的区别:小括号:表原创 2022-03-30 20:57:22 · 853 阅读 · 0 评论 -
二进制加法---2022/03/08
文章目录题目描述解题思路代码实现性能评估题目描述给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。题目来源解题思路首先一开始想的是先把字符串变成数值,然后做相加处理,再除2取余。但是这里会出现一个问题,字符串过长的话,不能直接转化成数值(太大了),然后我考虑的是字符串不直接变成数值,而是先变成字符数组,再逐位相加成数值。这里也有一个问题,因为字符串长度过长,数值容器放不了那么大的数值,所以版本一的实现不能通过所有测试用原创 2022-03-08 11:05:11 · 240 阅读 · 2 评论 -
数据结构整数篇总结---2022/03/16
文章目录举例题目涵盖知识点关于整数关于字符串后续补充举例题目整数除法二进制加法前n个二进制数中1的个数只出现一次的数字单词长度的最大乘积排序数组中的两个数字之和涵盖知识点关于整数1、通过数与数之间的更新迭代来完成除法的运算。这里考虑数之间的关系来设置门槛,从而以更快的速度去进行遍历与查找。考虑数值迭代的速度。2、关于数值的运算速度提升,可以考虑位运算。但位运算会考虑溢出的问题,从而可以将模拟寄存器引入来解决内存提供位数不足的问题。3、 关于探究数值本身的特点,如中位数,最大原创 2022-03-16 11:28:06 · 796 阅读 · 0 评论 -
015字符串中的所有变位词---2022/03/31
文章目录题目描述解题思考代码实现性能评估题目描述给定两个字符串 s 和 p,找到 s 中所有 p 的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。变位词 指字母相同,但排列不同的字符串。题目来源解题思考实际上是第14题上面做的提升,此时找到变位词并不是直接返回,而是记录首个字符的下标。遍历结束之后再做返回。代码实现class Solution(object): def findAnagrams(self, s, p): """ :原创 2022-03-31 14:26:38 · 243 阅读 · 0 评论 -
2022/07/25------字符串的排列
刷题记录。原创 2022-07-25 16:55:38 · 93 阅读 · 0 评论 -
008和大于等于 target 的最短子数组---2022/03/21
文章目录题目描述解题思考代码实现性能评估题目描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。题目来源解题思考版本一:首先是考虑双层遍历,如果当前子数组长度小于记录的长度,则进行更新。由于时间复杂度是o(n的平方),所以超出了时间限制。版本二:参考了一些大牛的解法,主要是利用双指针以原创 2022-03-21 20:10:32 · 296 阅读 · 0 评论 -
(011)0和1个数相同的子数组---2022/03/24
题目描述给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。题目描述解题思考版本一:一开始我想的是使用当前长度除以和的方法进行判断,当当前长度是累计和的两倍时,说明0和1的个数相等,这里的解题思路有一个漏洞,如果当前和一直为0,那么和作为除数显然是不合法的。后面又考虑数0和1的个数,显得过于繁琐。后面参考其他大牛的思路,说首先将0转换成-1,该问题就变成了求前缀和的问题。使用0转化成-1的思路,可以使用双层循环实现,但是会超出时间限制。版原创 2022-03-24 11:12:18 · 1189 阅读 · 0 评论 -
2022/07/21---滑动窗口的最大值;
刷题记录。原创 2022-07-21 14:39:58 · 109 阅读 · 0 评论 -
只出现一次的数字---2022/03/10
文章目录题目描述解题思路代码实现性能评估题目描述给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。题目来源解题思路使用键值对的思想,首先记录,然后遍历其值。留个坑:等汇报结束补充如何提升时间性能。代码实现 Map<Integer,Integer> map = new HashMap<>(); for(int i=0;i<nums.length;i++) { if(map.c原创 2022-03-10 11:46:39 · 160 阅读 · 0 评论