力扣
Let'sCode
搬砖,搬砖,再搬砖
展开
-
回溯算法个人总结
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]class Solution {public: vector<vector<int>> res; void dfs(int pos,vector<int>& nums,vector<int&原创 2021-07-13 11:41:36 · 165 阅读 · 0 评论 -
二分法查找,返回有序数组中第一个大于给定值的元素的索引
//查找有序数组中第一个大于V的索引int first_upper_bound(int v, vector<int>&nums){ if(nums.empty()) return -1; int n = nums.size()-1; if(nums[n-1] <= v) return n; int left = 0,right = nums.size()-1; while(left < right) { in原创 2021-06-09 17:44:24 · 564 阅读 · 0 评论 -
前 K 个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。class Solution {public: static bool cmp(pair<int,int> &p1,pair<int,int> &p2) { return p1.second > p2.second; } vector<int> topKFrequent(vector&l原创 2021-06-07 21:52:49 · 73 阅读 · 0 评论 -
03 LeetCode:最小路径和(动态规划)
题目描述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。解答经分析,状态转移方程如下:当 i>0 且 j=0时,dp[i][0]=dp[i−1][0]+grid[i][0]。当 i=0且 j>0 时,dp[0][j]=dp[0][j-1]+grid[0][j]。当 i>0且 j>0 时,dp[i][j] = min(dp[i - 1][j], dp[i][j - 1原创 2021-02-16 23:30:34 · 91 阅读 · 0 评论 -
02 LeetCode:不同路径(动态规划)
题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解答对于第一行 dp[0][j],或者第一列 dp[i][0],由于都是在边界,所以只能为 1dp[i][j] 表示到达( i, j )处最多有dp[i][j]路径由于机器人每次只能向下或者向右移动一步,那么:每个位置的路径 = 该位置左边的路径 + 该位置上边的路径原创 2021-02-16 22:53:41 · 65 阅读 · 0 评论 -
01 LeetCode:最长递增子序列(动态规划)
题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解答当 nums[i]>nums[j] 时: nums[i]可以接在nums[j] 之后(此题要求严格递增),此情况下最长上升子序列长度为 dp[j] + 1dp[j]+1 ;class Solution {public: int lengthOfLIS(原创 2021-02-16 22:17:51 · 183 阅读 · 0 评论