原创 leetcode 162 尋找峯值
這道題主要是題意的理解,題中“你可以假設 nums[-1] = nums[n] = -∞。”這句話暗示如果num[i] <num[i+1],那麼峯值一定在i+1到數組末尾存在。 int findPeakElement(vector<in
原创 leetcode 206 反轉鏈表
原地算法 遞歸 ListNode* head1; ListNode* reverseList(ListNode* head) { dfs(head, NULL); return head1;
原创 LeetCode OJ 18 四數之和
注意重複數字跳過就行了 vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); vector<ve
原创 leetcode 35. 搜索插入位置
int searchInsert(vector<int>& nums, int target) { int l = 0,r = nums.size() - 1; while(l < r)
原创 leetcode 4:尋找兩個有序數組的中位數(二分法)
題目大意 給定兩個大小爲 m 和 n 的有序數組 nums1和 nums2。 請你找出這兩個有序數組的中位數,並且要求算法的時間複雜度爲 O(log(m + n))。 你可以假設 nums1 和 nums2 不會同時爲空。 示例 1: n
原创 Leet Code OJ 129 求根到葉子結點數字和
DFS,總感覺自己的代碼寫的很奇怪(ಥ﹏ಥ) vector<int> r; int cnt = 0; int dfs(TreeNode* root) { if (root==NULL) return 1; if (root
原创 leetcode 80 刪除排序數組中的重複項 II
int removeDuplicates(vector<int>& nums) { if(nums.size()==0) return 0; int length = 1,
原创 leetcode 55 跳躍遊戲
別人的代碼,很簡潔~ bool canJump(vector<int>& nums) { int len = nums.size(); if (len <= 1) return true; int maxDis = nums[0
原创 Leet Code OJ 16 最接近三數之和
int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int i = 0, j = nums.size() - 1,
原创 leetcode 73 矩陣置零
void setZeroes(vector<vector<int>>& matrix) { bool isCol = false; int R = matrix.size(); i
原创 leetcode 66 加1
vector<int> plusOne(vector<int>& digits) { vector<int> r; int ok = 1; for (int i = 0; i <
原创 leetcode 81 搜索旋轉排序數組 2(對比33 搜索排序旋轉數組)
與33 搜索排序旋轉數組的區別就是加上了重複元素的跳過 bool search(vector<int>& nums, int target) { if (nums.size() == 0) return fa
原创 leetcode 23 不同路徑2
dfs + 打表過不了,只能動態規劃 int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { if (!obstacleGrid.size()
原创 leetcode 62 不同路徑
class Solution { public: int vis[101][101]; int uniquePaths(int m, int n) { if (m == 1 && n == 1)
原创 leetcode 41 缺失的第一個正數
思路很簡單,找出最大正數和最小正數,然後建立一個數組visit,記錄從最小正數到最大正數之間哪些數有,哪些數沒有。最後遍歷一下visit就行了。不過visit的長度需要注意一下。舉個簡單的例子,nums = [1,4,5,1000]。很顯