LeetCode日记3

(2015/11/3)

LeetCode-36 Valid Sudoku:(easy)

1)使用数据结构

set<char> emptyset;

vector<set<char>> mp(27, emptyset);

2)下标0-8存储行中的数字,9-17存储列中的数字,18-26存储3×3块中数字。

3)双重for循环中,i表示行,9 + j表示列,18 + i / 3 + 3 * (j / 3)表示块。



(2015/11/12)

LeetCode-38 Count and Say:(easy)

1)判断参数n,返回直接输出的部分。

2)双重for循环。

LeetCode-58 Length of Last Word:(easy)

LeetCode-66 Plus One:(easy)

LeetCode-67 Add Binary:(easy)

LeetCode-70 Climbing Stairs:(easy)

1)爬楼梯,裴波那契数列。

2)公式F(1)=1, F(2)=2,........F(n)=F(n-1)+F(n-2)。

LeetCode-83 Remove Duplicates from Sorted List:(easy)

1)删除已排序的链表中的重复节点。

2)处理输入为空链表的情况。

3)使用两个指针,一个记录上一个节点,一个寻找下一个不同的节点。找到就做指针的变换(无论变换前后是否真的改变了指针)。

LeetCode-88 Merge Sorted Array:(easy)

1)题目理解:m和n是数组中已经初始化的元素。也就是说数组的大小可能比m和n大,且数组中可能有未初始化的元素。

LeetCode-100 Same Tree:(easy)

1)错误思路:分别计算出两棵树的中序遍历和先序遍历,判断他们是否相等。

错误的例子:[1,1] 和 [1,NULL,1]

2)正确思路:同时对两棵树进行遍历。递归实现。



(2015/11/14)

LeetCode-101 Symmetric Tree:(cant)

1)错误思路:对树进行 ”左子树-根-右子树“和”右子树-根-左子树“遍历后序列相等,则树是对称的。(异想天开)

错误的例子:[1,2,3,3,NULL,2,NULL]

2)正确思路:同100题,必须同时向两边进行遍历。

3)参考:https://leetcode.com/discuss/26705/15-lines-of-c-solution-8-ms

递归对二叉树进行对称遍历:

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root == NULL) return true;
        else return func(root->left, root->right);
    }
private:
    bool func(TreeNode *p, TreeNode *q){
        if(p == NULL && q == NULL) return true;
        else if(p == NULL || q == NULL) return false;
        else{
            if(p->val != q->val) return false;
            else return func(p->left, q->right) && func(p->right, q->left);
        }
    }

};

LeetCode-102 Binary Tree Level Order Traversal:(easy)

对二叉树按层遍历。

1)思路:用队列存放每一层的节点的指针。

LeetCode-104 Maximum Depth of Binary Tree:(easy)

求二叉树叶子节点的最大深度。

1)思路:形参ans存放目前叶子节点的最大深度(引用);形参now存放当前这次遍历的当前深度。

class Solution {
public:
    int maxDepth(TreeNode* root) {
        int ans = 0;
        DFS(root, ans, 0);
        return ans;
    }
private:
    void DFS(TreeNode *T, int &ans, int now){
        if(T == NULL){
            if(now > ans) ans = now;
        }
        else{
            now++;
            DFS(T->left, ans, now);
            DFS(T->right, ans, now);
        }
        return;
    }
};

LeetCode-107 Binary Tree Level Order Traversal II:(easy)

同LeetCode-102 Binary Tree Level Order Traversal。

1)最后在返回前,对vector<vector<int>> 变量进行一次reverse函数调用即可。

时间: 2024-10-05 12:10:24

LeetCode日记3的相关文章

python leetcode 日记 --Contains Duplicate II --219

题目: Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and jis at most k. 给定一个整形数组和一个整数型数k,找出在这个数组中是否存在两个相同的数,并且这两个数的下标的距离小于k. "&q

leetcode 日记 4sum java

整体思路同之前的一样,依然采取降低维度的方式进行 public List<List<Integer>> solution(int nums[], int target) { List<List<Integer>> result = new ArrayList<>(); if((nums.length<4)||(nums==null)) { return result; } Arrays.sort(nums); if ((4*nums[0]&

python leetcode 日记--Maximal Square--221

题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area. For example, given the following matrix: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 Return 4. 本题为一个典型的动态规划问题,因此可以使用动态规划的思想进行. step1,初始化

python leetcode 日记--231. Power of Two

题目: Given an integer, write a function to determine if it is a power of two. class Solution(object): def isPowerOfTwo(self, n): # """ :type n: int :rtype: bool """ 方法:分析2的幂次方的特点,发现2的任意次方的数,化成二进制时只有首位为1其余位为0,因此我的解决方法如下: class

leetcode 日记

1 63. Unique Paths II   带障碍物的路径计算 思路:dp[i][j] = 0 if grid[i][j] = 1 (障碍物) 再按照无障碍物的逻辑进行计算 int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int rows = obstacleGrid.size(); if (rows == 0) { return 0; } int cols = obstacleGrid

leetcode 日记 162. Find Peak Element java python

根据题目可知,输入为:一个相邻元素不相等的数列,输出为:其中一个(上)峰值的序号.并且要求时间复杂度为logn 分析:由于题目要求时间复杂度为logn,因此不能进行全部遍历.又因为只需要找到其中的一个峰值,那么,每次对半分,便可以达到logn的复杂度. 根据对半分的思路继续想,不难发现只要确定了中间位置的数是处在上升阶段还是下降阶段,就可以确定在某一侧必有一个峰值. 往复多次,即可找出两个点,其中一个一定处于某一个峰值上. java代码: 1 public int findPeakElement

leetcode 日记 3sumclosest java

整体思路为将threeSum将为twoSum即可 public int solution(int[] nums, int target) { if (nums.length == 3) { return nums[0] + nums[1] + nums[2]; } else { Arrays.sort(nums); int r = 10000;//此两处10000为省事而设,如果严谨应该大致找到其中的一个较大距离 int distance = 10000; for (int i = 0; i <

2017/11/3 Leetcode 日记

654. Maximum Binary Tree Given an integer array with no duplicates. A maximum tree building on this array is defined as follow: The root is the maximum number in the array.(根节点是数组中的最大值) The left subtree is the maximum tree constructed from left part

LeetCode单排日记

初衷 之前有研究过一段时间数据结构与算法,但平时使用的不多,就连排序都很少用(自从JDK8有了Stream,就再也没有手写排序了.),所谓用进废退,时至今日,能记住的已经不多了,还记得之前有一次面试,面试官要求写一个快速排序,结果突然记不起来该怎么写了,于是交了一个插入排序... 为了在数据结构与算法方面不至于太辣鸡,特此开一个坑,每天刷一刷LeetCode上的算法题,也顺便把相关的数据结构和算法做一个复习. 如果你也刚好有兴趣一起学习的话,那在这条路上,我能与你作伴. 关于LeetCode L