您的位置:首页 > 其它

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]);
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: