LeetCode 45~46
2018-03-26 17:49
330 查看
LeetCode
题目:
https://leetcode.com/problems/jump-game-ii/description/题意:
给定一个非负整数数组,你最初位于数组的首位。数组中的每个元素表示你在该位置的最大跳跃长度。
你的目标是用最小跳跃次数到达最后一个索引。
例如:
给定一个数组 A = [2,3,1,1,4]
跳到最后一个索引的最小跳跃数是 2。(从索引 0 跳到 1 跳1步,然后跳3步到最后一个索引。)
注意:
假设你总是可以到达最后一个索引位置。
思路:
我自己写了一个用单调队列优化的写法,复杂度是O(nlogn)O(nlogn),之后看了别人的写法,O(n)O(n),非常漂亮,这里只记录了这个写法。语言表达太好,干脆不写具体思路了。。。
代码:
class Solution { public: int jump(vector<int>& nums) { int length = nums.size(); int ans = 0, last = 0, reach = 0; for(int i = 0; i <= reach && i < length; ++i) { if(i > last) { ++ans; last = reach; } if(i + nums[i] > reach) reach = i + nums[i]; } return reach >= length-1 ? ans : -1; } };
LeetCode 46. Permutations
题目:
https://leetcode.com/problems/permutations/description/题意:
给定一个含有不同数字的集合,返回所有可能的全排列。比如,
[1,2,3] 具有如下排列:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:
dfsdfs实现全排列代码:
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> ans; permu(nums, 0, ans); return ans; } private: void permu(vector<int> nums, int pos, vector<vector<int>> &ans) { if(pos == nums.size()) { ans.emplace_back(nums); return; } sort(nums.begin()+pos, nums.end()); for(int i = pos; i < nums.size(); ++i) { swap(nums[pos], nums[i]); permu(nums, pos+1, ans); swap(nums[pos], nums[i]); } } };
相关文章推荐
- leetcode 45.Jump Game II
- leetcode(46).189. Rotate Array
- leetcode 45: Permutations
- [leetcode 46] Permutations------数组中元素的所有排列组合集合
- 45_leetcode_SubsetsII
- [leetcode 46] Permutations
- 使用Beaglebone Black 的P8_45,P8_46作为PWM输出
- 面试笔试杂项积累-leetcode 46-50
- 45 leetcode - Rotate Function
- leetcode45 Jump Game II
- Leetcode-46: Permutations
- Leetcode 46 Permutations
- LeetCode 39,40,46,47,78,90 回溯法专题
- LeetCode 45 Jump Game II
- LeetCode Weekly Contest 46解题思路
- Leetcode45 hard
- leetcode(45).172. Factorial Trailing Zeroes
- leetcode 45: Permutations
- LeetCode(45) Simplify Path
- LeetCode 46 Permutations(全排列问题)