我是靠谱客的博主 糟糕灰狼,最近开发中收集的这篇文章主要介绍leetcode 几道题目,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

是周六晚上的几道题,晚上11点半,睡的早,起不来!

494. Target Sum

分析:看完这题,看到数据范围,长度20,枚举就是1<<20 = 1e6, 然后单次20,总共就是2e8,感觉应该是暴力枚举,然后我就按照二进制的方式写了代码,tle了,我感觉应该可以过啊,然后就用dfs写了一下,刚好能过,卡的时间,感觉应该有优化的地方。其实正确的思路是dp,我刚开始感觉也是dp,因为要计算所有的可能,感觉dp也是暴力,算所有可能出现的情况,感觉跟暴力差不多!今天看了下别人的分析,是自己分析错了,http://bookshadow.com/weblog/2017/01/22/leetcode-target-sum/ 我每次都看这个人写的题解,非常棒,更新速度快,思路清晰!然后这道题,因为题目说了,所有数之和不超过1000,那么所有可能出现数的范围就确定了-1000到1000,总共2000, 每次每个数只需要考虑加减这两种情况,所以复杂度是2000 * 20 = 4e4,这个复杂度很小,速度很快!还有注意:这道题因为有些和为负数,所以加上一个偏移来解决。

mycode:

 1 class Solution {
 2 private:
 3     int dp[2][2020];
 4 public:
 5     int findTargetSumWays(vector<int>& nums, int s) {
 6         int pos = 1000;
 7         memset(dp, 0, sizeof dp);
 8         dp[0][0 + pos] = 1;
 9         int cur = 1;
10         for (int x : nums) {
11             for (int i = 0; i <= 2000; i++)
12                 dp[cur][i] = 0;
13             for (int i = 0; i <= 2000; i++) {
14                 if(i + x <= 2000)
15                     dp[cur][i + x] += dp[cur ^ 1][i];
16                 if(i - x >= 0)
17                     dp[cur][i - x] += dp[cur ^ 1][i];
18             }
19             cur ^= 1;
20         }
21         s += pos;
22         if(s < 0 || s > 2000) return 0;
23         return dp[cur ^ 1][s];
24     }
25 };

 492. Construct the Rectangle

这道题是水题,之前在cf上见过,链接见这里http://codeforces.com/contest/747/problem/A

491. Increasing Subsequences

分析:应该是普通的思路啊,这跟最前的求等差数列的个数的题目差不多吧!我的想法是求出每一个位置的递增子序列,这可以通过寻找前面比他小的元素的子序列加上他自己构成,同时维护结果,最后对结果去重,可以通过排序,unique,erase来做。  刚开始,我对每一个位置都做了unique,erase,结果tle了,去掉这个,只对结果进行unique,erase,然后就过了,也是卡的时间,感觉应该没什么好办法了!

看这个题解http://bookshadow.com/weblog/2017/01/22/leetcode-increasing-subsequences/跟target sum的思路差不多,算出所有的序列,每遇到一个数,就对所有的序列进行遍历,寻找满足要求的答案,这样会不会快呢? 其实跟我上面的思路差不多,这个是每一个需要都要判断,我那个是只对前面的数字,但是添加的时候也要遍历,但是,我没有做去重处理,这里重复的影响又多大,是个问题,需要考虑!首先,一个完全的递增序列的结果有:最长15,一共有32767个, 根据一个完全递增的序列算出来的数字。接下来我不知道怎么分析,是sort, unique, erase,每个元素都是vector,这个比较的单位时间也是比较大的。当然,利用set的去重处理是挺好的方法,很方便。这道题,就这样吧,想到什么再写下来。

484 Find Permutation

看不到题,没做。-0-

好像挺难,需要仔细的分析, 求字典序最小,那就使得只能从前往后考虑,刚开始尽可能的小。(从后面考虑的想法应该是错误的吧)!

如果这题改成求字典序最大的怎么做呢?这是个很好的问题!仔细分析一下,跟上面的思路差不多! 

486. Predict the Winner

这个之前刚好看过,详细的分析看这个链接 http://mp.weixin.qq.com/s/rgocsC5P_hYZ0OmH53zCnw,这个好像跟http://bookshadow.com/weblog/2017/01/22/leetcode-predict-the-winner/ 的递推公式不太一样,思考一下。不知道Alpha-Beta搜索这个知识点,学习一下。

483. Smallest Good Base

刚好,这个也做过,是google apactest的原题, 我做的时候直接贴的源代码。

链接在这里:  https://code.google.com/codejam/contest/5264487/dashboard#s=p1,题意一模一样,可能描述有些差别,可以搜一下这个的题解。
 
 

 

转载于:https://www.cnblogs.com/y119777/p/6344945.html

最后

以上就是糟糕灰狼为你收集整理的leetcode 几道题目的全部内容,希望文章能够帮你解决leetcode 几道题目所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部