原创 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]。很顯