
算法训练
练手
GGGYL111
这个作者很懒,什么都没留下…
展开
-
【用二进制方法枚举数组所有的子集】
上周,在力扣周赛上第一题就卡了一会儿,要求列出所有子集(包括空集),对每个子集进行异或操作,再把异或和加起来得结果。用笨办法搞了半天也算是过了,回头看人家大佬两分钟搞定,觉得事情并不简单,果然是有模板可用的。模板–二进制枚举子集先贴上代码:class Solution {public: int subsetXORSum(vector<int>& nums) { //子集一共有2^n个组合==1<<n int n = nums.原创 2021-05-18 09:53:18 · 305 阅读 · 0 评论 -
写算法时(C++)的useful skills(不定期更)
1. 求数组的和:S_sum = accumulate(x.begin(), x.end(), 0);//三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。2. 求数组中最大(小)的元素值以及最大(小)值所在位置:max_value = *max_element(x.begin(), x.end());min_value = *min_element(x.begin(), x.end());//可以自己指定范围int x[5] = {4,8,3,2,1};max_valu原创 2021-04-26 09:47:08 · 216 阅读 · 0 评论 -
n&(1<<i)【转载】
1<<i 是将1左移了 i 位,即第 i 位为1,其余位为0;例如1<<2 则0001->0100n&(1<<i)是将左移i位的1与n进行按位与,即为保留n的第i位,其余位置零意思大概就是:如果n第 i 位为0,则n&(1<<i)的值为0否则n&(1<<i)不为0常用if(n&(1<<i)==0)来判断n的第i位是否为0————————————————版权声明:本文为优快云博主「f转载 2021-03-22 09:45:23 · 493 阅读 · 0 评论 -
【LeetCode每日一题】1047. 删除字符串中的所有相邻重复项
题目描述:给一个字符串S,把重复的删掉,直到没办法删举个栗子:输入:“abbaca”输出:“ca”解释:把bb删掉以后,就有了aa,把aa又删掉,还剩ca然后我考虑了另外一种情况,不知道bbb会不会删掉结果是这样的:输入:“abbbaca”输出:“abaca”解法:本菜鸡不知道string里还自带那么多功能,可以从这里查到string参考页;本题用到的有back; pop_back; push_back;意思在这:stk.back(访问最后的字符)stk.pop_back(移除原创 2021-03-09 10:05:11 · 210 阅读 · 0 评论 -
【LeetCode每日一题】832.翻转图像
832.翻转图像:对矩阵A的每行进行逆序翻转之后,把A的0和1进行翻转示例:输入: [[1,1,0],[1,0,1],[0,0,0]]输出: [[1,0,0],[0,1,0],[1,1,1]]解释: 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]];然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]思路:为了省时间,对A的每一行,做一个类似指针的东西,最左边的left和最右边的right,从两头开始往中间走,交换两头的元素就可以实现逆转了,交换完了之后进行原创 2021-02-24 09:47:39 · 165 阅读 · 0 评论 -
【LeetCode】633.平方数之和
633.平方数之和:找出是否存在a,b,使得a2+b2=c,c是给定的这个题是1.两数之和的升级版,找出nums数组中是否有两个数之和等于给定的目标值—target脑子一热,觉得可以拿两数之和的代码魔改一下,提交了3次才过,要么超时,要么解答错了,贴代码:class Solution: def judgeSquareSum(self, c: int) -> bool: nums = range(0, ceil(sqrt(c))+1) #一个小优化,小于根号C的作为要寻原创 2021-02-20 10:30:54 · 226 阅读 · 0 评论 -
【LeetCode双指针】142.环形链表Ⅱ
142.环形链表Ⅱ还有一个141.环形链表Ⅰ,判断链表中是否有环从这道题中学到了快慢指针,用龟兔来比喻的话,就是????走一步,????跳两步,当????和????相遇了,就说明有环,第一次相遇以后,兔子回到起点,改成一步一步跳,????继续往前走,他们第二次相遇的地点就是环的起点,(记住结论就可以了),证明大概意思就是????在环上剩下的距离和????从起点到环起点的距离成倍数关系,所以肯定会在环的起点第二次相遇的。# Definition for singly-linked list.# cla原创 2021-02-19 09:26:54 · 139 阅读 · 0 评论 -
【LeetCode贪心算法】605.种花问题
605.种花问题今天totally是自己想出来的偏方,所以记一下题目在这里第一步处理特殊情况,先把n=0的情况排除在外,判断n=0直接返回TRUE第二步,预处理数组,我的想法是扩充数组,把头和尾各加上一个0,这样就方便后续直接扫描整个数组去进行判断,而不用再考虑头尾的情况。第三步,对扩充的数组进行扫描,扫描的位置是[1,length-1],也就是说不用扫到头和尾,判断i位置的左右是否为0以及i位置是0就ok了class Solution: def canPlaceFlowers(sel原创 2021-02-02 09:32:48 · 328 阅读 · 2 评论 -
C++精度控制
例题1-1 圆柱体的表面积 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。 样例输入: 3.5 9 样例输出: Area = 274.889分析:很简单的一道题,利用数学公式就可以求出来。但是我是用C++写的,所以要考虑一下怎么控制C++的精度输出,这个我还真不知道,特意去百度了一下,懂了一些皮毛。精度控制 1. 如果使用了控制符,在程序单位的开头除了要加iost原创 2017-07-02 10:07:34 · 1622 阅读 · 0 评论 -
cos和sin的使用
习题1-4 正弦和余弦(sin和cos)输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。 分析:这道题很水但是有坑啊!我就直接调用两个函数,然后输入30,发现结果有负数而且sin30°不是0.5。这我还纳闷了好久,测试45°,两者也不相等。。。于是百度了sin、cos的用法。发现函数调用的时候计算的是弧度,而不是角度。。。所以要把角度转化为弧度再计算。公式:弧度=角度*原创 2017-07-06 18:37:14 · 3855 阅读 · 0 评论