怒刷leetcode的题目(1)237、104、136、100

https://leetcode.com/problemset/algorithms/上面的题目,每天做几道题目,大体从准确率高至低做下去

编程语言为c语言,因为跑的最快…

237 Delete Node in a Linked List 47.8% Easy

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node
with value 3, the linked list should become 1
-> 2 -> 4
 after calling your function.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void deleteNode(struct ListNode* node) {
    if(node->next != NULL){
        node->val = node->next->val;
        node->next=node->next->next;
    }
}

删除给定的节点,只需要将当前节点的val改成下个节点的值,这时候相当于有两个相同值的节点,再将当前节点的next指针指向下下个节点,也就是跳过第二个相同的节点就好了。

104 Maximum Depth of Binary Tree 45.1% Easy

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

int maxDepth(struct TreeNode* root) {
    if(root == NULL) // 递归出口
        return 0;
    int depthLeft = maxDepth(root->left);
    int depthRight = maxDepth(root->right);
    return depthLeft > depthRight ? (depthLeft + 1) : (depthRight + 1);
}

求二叉树的深度,使用递归的思想,将root想做普通节点,任何节点的深度都是左右节点较深的那个值+1,除了树叶(深度为0,也是递归的结束条件)

136 Single Number 45.0% Medium

Given an array of integers, every element appears twice except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

int singleNumber(int* nums, int numsSize) {
        if (nums == 0 || numsSize < 1)
            return 0;
        int key = nums[0];
        for (int i = 1; i < numsSize; ++i) {
            key ^= nums[i];
        }
        return key;
}

难点在于数组规模增大,运行时间只能线性增长。

将数组的所有元素进行异或运算,相同的元素异或等于0,唯一的元素与0异或等于自己。

100 Same Tree 41.5% Easy

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(!p && !q) return true;  //NULL together, the same,skip the remaining code
    if(!p || !q) return false; //one is NULL but the other is not
    return (p->val == q->val) && isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}

跟104题类似,使用递归的思想,二叉树相同,意味着从根节点开始,必须符合对应节点的值相同+左节点为根节点的树相同+右节点为根节点的树相同

先判断!p&&!q同时为树叶节点,两个为相同的树

如果不同时为树叶节点,则判断两者是否有一方是树叶节点,如果是,则他们不是一样的树

对根节点运行算法就可以得出结果

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 06:39:26

怒刷leetcode的题目(1)237、104、136、100的相关文章

怒刷leetcode题目(3)226,83,142,86

226 Invert Binary Tree 36.2% Easy Invert a binary tree. 4 / 2 7 / \ / 1 3 6 9 to 4 / 7 2 / \ / 9 6 3 1 对的,这就是前阵子homebrew大神面试没做出来的那道题 其实这道题并不难-也许只是大神不屑于做这样的题目罢了- 照样的,我们发现以下规律 所有的左子树和右子树交换,除非到了结点(树叶) 主需要交换两棵子树然后对子树递归就好了 /** * Definition for a binary tr

初刷LeetCode的感受

自从上个月进入实验室的云安全项目组后,因为要接触到实际的代码,在实验室博士的建议下我们项目组的硕士开始刷LeetCode练习编程能力,保持每周抽空刷几道算法题.虽然刷的不多,到现在一共只刷了不到30题,但在刷题的过程中还是有很多感触的. 实验室的博士建议我们按照题目的难易顺序循序渐进由易到难来刷,我也就照做了.因为前段时间在系统地学Python语言,所以我主要用的是Python语言来做,有的题目也采用了C/C++.Java甚至C#多种语言来尝试.在刷题的过程中,总结了自己的一些问题: 1. 对于

刷LeetCode的正确姿势——第1、125题

最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的所有源代码都是用java语言写的. 接下来的一段时间里,我会将里面的大部分内容翻译成中文,再加上一些小y自己的解法和扩展内容,以博客的形式发在博客园.我想,这会是一件非常有趣的事情. 以下是翻译的前言部分,第1.4题以及其解析部分. 前言: 嗨,各位刷LeetCode的小伙伴们. 就像你们看到这本书

准备刷leetcode!

前段时间才知道了这个刷题的地方,但是现在我连动规还没看完,决定把现在这本<计算机算法设计与分析>大概看完就去刷leetcode. 当然看书的时候也是要刷题的,就先刷着学校的sicily吧,毕竟用着挺习惯的. 恩,看完这本书看数据结构C语言那本. 一定要好好学英语,要不然连题目都看不懂...

我也来刷LeetCode——0、Maximum Depth of Binary Tree(开篇)

作为一个非科班出身的程序员,还是很有必要刷刷题的.之前有个大牛说,菜鸟刷题可以从AC率高的刷起,这样可以快速培养信心.将LeetCode的题目按照AC率从高到低排序,第一道题目为 [Maximum Depth of Binary Tree]. 从题目就可以看出,是求二叉树的最大深度.深度的概念,是指从根节点到叶子节点的这条路径上的总节点数. 要求二叉树的最大深度,只需要求出左子树的深度和右子树的深度,取两者最大值再加 1 ,即为二叉树的最大深度. 若该二叉树为空,返回 0 . 然后就是将算法翻译

用golang刷LeetCode

用golang刷LeetCode 用Go语言刷LeetCode记录,只是为了练习Go语言,能力有限不保证都是最优解,只能在此抛转引玉了. 数据结构和算法 数据结构和算法是程序员的命根子,没了命根子也就没有了尊严. 1. 两数之和 题目描述 力扣(LeetCode)链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums

【一起刷LeetCode】整数反转

前言&絮叨 别人都忙着参加年会晒奖品,我却忙着写代码.每逢年底都要安排几个紧急项目,我什么时候能摆脱这种宿命. 在忙也不能忘记刷LeetCode,毛毛向前冲!!! 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[-2 ^ 31, 2 ^ 31 ? 1].请根

从心出发-刷leetcode写给5年后的自己

而立之年终未立,不惑而年犹存惑!这或许就是所谓的中年危机吧! 自认为是一个"勤奋"的人,又"未有寸功",天天碌碌,不知何为. "常立志"而未达,以至于"泯然众人矣". 2020年起的五年,专注于2-3个点,深度耕耘,希望能有一点点小"成就". 1. 提升个人能力 坚持输入 简而言之,就是不断学习. 读书: 每读一本书就写读书心得. 提升技术能力:提升java开发能力,精进C++能力. 思考 行动上的勤快人,

怒刷30道线段树、树状数组

HDU 1754 单点更新,区间查询最大值,水题-- #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<queue> #include<set> #include<cmath> #include<bitset> #define mem(a,b) memset