OJ题目
文章平均质量分 66
鼻里鼻里大学门卫
你看这小代码它平平无奇
展开
-
OJ题目14--大数运算问题
在对数字的计算中,经常会有比较大的数字的运算,这些数字本身或者数字之间运算的结果有可能超出整型甚至长整型的处理范围,这种情况下,想要继续进行对这一类“大数”的运算,就需要改变思路,借助字符串的帮助,结合原始的,整型数字计算时的逻辑,对数字进行运算。这样做无形之间将很大数字的计算转变成某一位上极小数字的计算,每一位上计算完成之后在将其按照字符串的方式排列起来,而不是两个庞大数字之间大规模的计算。而最终返回的字符串如果将其转化成整型,其数值就等于最终应有的结果。1,415. 字符串相加 - 力扣(LeetC原创 2022-03-20 12:41:10 · 917 阅读 · 1 评论 -
OJ题目13--预测赢家问题
1,877. 石子游戏 - 力扣(LeetCode) (leetcode-cn.com)石子游戏可抽象成数组,即数组中有偶数个元素,且所有元素的和为奇数,两个玩家一次进行选择,只能选择当前数组中的第一个或最后一个元素。数组中元素的和为奇数,亦即一定能分出胜负。假设两个玩家都会做出最优解(这个假设是游戏类问题的关键),判断先手是否能获胜。事实上,先手一定能获胜,由于数组中共有偶数个元素,则首元素下标0为偶数,尾元素下标是偶数减一,为奇数,如果先手选择首元素,那后手只有两个选择,下标为1的元素或尾元素,原创 2022-03-15 20:26:49 · 3871 阅读 · 0 评论 -
OJ题目12--打家劫舍问题
打家劫舍问题本质上讲是动态规划问题。相比于普通的数组遍历,这类问题会有额外的限制条件,比如不能访问相邻的两个节点,抑或是第二题中普通的数组变成了环形数组。1,198. 打家劫舍 - 力扣(LeetCode) (leetcode-cn.com)题目要求不能偷盗相邻的两间屋子,求偷盗的最大收益。求解本题的思路是,如果想要偷盗一间屋子,那就不能偷盗前一间,也就是说偷盗完这间屋子的最大收益等于偷盗完这间屋子的前两间屋子的最大收益加上偷盗当前屋子的收益。当然还有另一种选择,那就是偷盗这间屋子的前一间,跳过当前原创 2022-03-14 22:08:06 · 286 阅读 · 0 评论 -
OJ题目11--移除数组中的特定元素
对于该类问题而言,与其说是移除数组中的特定元素,不如说是想办法留下数组中符合要求的元素。有了这一点认识之后,就会有如下的解题思路。创建另外一个数组,定义两个指针同时指向两个数组的开始位置。原始数组的指针向后遍历整个数组,并判断当前遍历到的元素是否符合要求,当原始数组的指针指向的元素符合要求时,将该值赋给新数组的指针指向的位置,然后两个指针同时向后移动一位。反之,原始数组的指针继续向后寻找,新数组的指针由于没有接收到合适的值,因此原地不动。经历完这一系列的操作之后,新的数组接收的全是符合要求的值,这样原创 2022-03-07 17:02:33 · 286 阅读 · 0 评论 -
OJ题目10--数字间的抑或,一场集体消消乐
抑或的定义是,只有当两个二进制数上的对应位相同时为0,相异时为1。这就让按位抑或具有了这样的功能,即让两个相同的数字抑或后的结果为0,如果是多个数字,只要这些数字两两相同,那么在集体抑或后,无论抑或过程中的顺序如何,都只会影响抑或的过程,但不会影响最终结果,即集体抑或的结果一定为0。1,面试题 17.04. 消失的数字 - 力扣(LeetCode) (leetcode-cn.com)本题当然可以采用将数字从1到n相加,再减去数组中的所有元素的做法,但这里介绍抑或方法。(抑或:均为1,则为0,其余情况原创 2022-03-06 17:21:26 · 454 阅读 · 0 评论 -
OJ题目9--最小路径、最小消耗的动态规划问题
一般来讲,涉及到最小路径的问题,目标都会有一个固定的行走模式,也就是说对于行走范围内的某一点而言,到达该点的各种可能性是确定了的(被确定了的行走模式所约束)。那么走到一点的最小消耗,就等于所有差一步就能到达该点的点中的最小消耗再加上该点本身的消耗。动态规划则实时的记录已经求出来的各个点的消耗的最小值,并将这些值作为后面计算的基础。1,剑指 Offer II 100. 三角形中最小路径之和 - 力扣(LeetCode) (leetcode-cn.com)一个三角形矩阵,每一位上的原创 2022-03-05 20:32:04 · 666 阅读 · 0 评论 -
OJ题目8--动态规划问题
1,509. 斐波那契数 - 力扣(LeetCode) (leetcode-cn.com)过去一直用递归法,但由于栈区空间的限制,当递归过深时容易发生栈溢出。int fib(int n){ if(n==0) { return 0; } else if(n==1) { return 1; } else { return fib(n-1)+fib(n-2); }}原创 2022-03-03 19:26:15 · 171 阅读 · 0 评论 -
OJ题目7--数组元素的局部选择和抛弃问题
对于常规的求出数组中差值最大的两个元素及二者的差值时,对数组进行一次遍历,分别动态存储数组中当前的最大及最小值即可。但很多情况下,实际中的数据也可以抽象成一个数组,但是问题却要比简单的找出最大差值要复杂一些,因为根据实际情况,对问题的求解会有诸多限制条件。比如股票的买卖,买入股票的时间一定要早于卖出股票的时间。这时就不能把范围扩大到整个数组中,而是在当前数字的后面。1,121. 买卖股票的最佳时机 - 力扣(LeetCode) (leetcode-cn.com)本题的解题思路:我想要股票获得更大的利原创 2022-02-24 16:37:33 · 343 阅读 · 0 评论 -
OJ题目6--数字游戏问题
在OJ题目中经常会出现两个玩家分先后手玩数字游戏的问题,两个玩家会遵循相同的规则,题目还会特别注明,两个玩家在每一步上都会做最优解,事实上,看到这句话时,说明这道题一定是有规律可循的,而且规律往往相当简单(如果玩家不按套路出牌或者瞎玩的话,整个游戏过程也一定不可能用简单的程序模拟),当找到规律时,这一类问题也就被解决了。1,292. Nim 游戏 - 力扣(LeetCode) (leetcode-cn.com)这个游戏的规则是有一堆石子,我和另一个人玩,我先拿,另一个人后拿,每一次可以拿1,2,原创 2022-02-22 20:24:23 · 2927 阅读 · 0 评论 -
OJ题目5--一个数组中各数字出现的次数问题
对于一个数组,想要知道这个数组中每一个数字出现的次数,并将每一个数字出现的次数以数组的形式记录下来。以数组arr为例,可以创建一个新的、和arr数组等长的数组tmp(因为数组中的每一个数字都可能只出现一次),然后分别让tmp[arr[i]]++(这里arr[i]后面一般要减一,但没有必要,在解题过程中前后能对应即可),这时tmp数组中下标为k的那一位上记录的就是数字k出现的次数了。(很简单,不要想复杂了)1,448. 找到所有数组中消失的数字 - 力扣(LeetCode) (leetcode-cn.co原创 2022-02-20 19:37:40 · 487 阅读 · 0 评论 -
OJ题目4--计算二进制数中1的个数的几种方法
在有关二进制的题目中,计算二进制数中有几个1往往是解决问题的基础。1,剑指 Offer 15. 二进制中1的个数 - 力扣(LeetCode) (leetcode-cn.com)如果一个数除二会余1,则该数的二进制形式的最后一位会是1,否则是0。如果要计算下一位,则对该数除以二即可。int hammingWeight(uint32_t n) { int count=0; while(n>0) { if(n%2==1) {原创 2022-02-19 18:26:50 · 332 阅读 · 0 评论 -
OJ题目3--数组或二叉树中的元素组成二进制数的问题
对于按照数组或二叉树中的元素(在这类题目中一般是0和1)来组合成二进制数的问题,得到想要求的二进制数很简单,按照数组或者二叉树的规则遍历即可,但问题出在如何在依次读取元素的同时动态计算每读取一个元素后新生成的值。想要求解这个问题,就要先分析在依次向二进制数的末端插入新元素时,二进制数中原先的元素都发生了哪些变化。每当新插入一个元素时,原先的每一个元素都相应的提升一位,而对于二进制数而言,每提升一位,该位上的值变成原来的二倍(就类似十进制数变成原来的十倍,八进制数则是八倍),而新增加的一位就是该位上新增的原创 2022-02-17 22:20:05 · 314 阅读 · 0 评论 -
OJ题目2--嵌套形式的递归
所谓嵌套形式的递归,按照我的理解就是递归的形式比较复杂,不是简单的一句话能说清楚的,这是就需要两层递归进行嵌套,以达到目的。比如计算一个二叉树中有几个节点的问题,求解这个问题的根本逻辑就是一个二叉树的节点个数等于根节点本身加上根节点的左子树中的节点树和根节点右子树中的节点数。依此类推,直到计算到根节点处为止(判断的标准是计算完以叶子节点作为根节点的那次递归之后,其左右孩子节点必然为空,因此节点为空也就成为了结束条件)。上述这个问题的简单逻辑当然可以通过一次递归来实现。但是许多递归问题的逻辑并非总是这么简单,原创 2022-02-01 21:01:49 · 1213 阅读 · 0 评论 -
OJ题目--1,创建数组储存字符串中出现的字符次数问题(5)
1,求字符串中第一个只出现一次的字符:第一个只出现一次的字符_牛客题霸_牛客网 (nowcoder.com)由于字符在计算机中归根结底是由阿斯克码所代表的,因此可以创建一个数组,每一个字符出现的次数就放在数组中其阿斯克码所对应的下标位置,到时候,从第一个字符对应的阿斯克码的下标开始寻找,找到的第一个元素为1的字符即为想要找的字符。注:这里第二个for循环中,在创建的table数组中,是按照字符出现的顺序在数组中寻找字符出现的顺序的。获得数组中存储的每一个字符出现次数,还可以从1到128依次遍历,但是原创 2022-01-28 20:54:55 · 522 阅读 · 0 评论