C语言leetcode刷题笔记1

C语言leetcode刷题笔记1

  • 第1题:136.只出现一次的数字
    • 两次遍历(O(numsSize^2))
    • 位运算
  • 第2题:202.快乐数
    • 快慢指针
    • 记录历史数据
  • 第3题:53.最大子数组和
    • 暴力求解(超时)
    • 动态规划
    • 分治

第1题:136.只出现一次的数字

一个非空整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 :
输入:nums = [2,2,1]
输出:1

两次遍历(O(numsSize^2))

记录次数,输出只有一次的元素


int singleNumber(int* nums, int numsSize) {
    for(int i=0;i<numsSize;i++)
    {
        int count=0;
        for(int j=0;j<numsSize;j++)
        {
            if(nums[i]==nums[j])count++;

        }
        if(count==1)return nums[i];//只有一次的输出
    }
    return -1;
    
}

位运算

异或运算,二进制数相同为0,不同为1

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


第2题:202.快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

快慢指针

如果有出现的历史值, 就会有环形结构。当慢指针追上快指针就代表有环形

int Pinfang(int x)
{
    int tem=x,ge,sum=0;
    while(tem!=0)
    {
        ge=tem%10;
        sum+=(ge*ge);
        tem/=10;

    }
    return sum;
}
bool isHappy(int n) {
    int t=n;
    int a=Pinfang(n),b=Pinfang(a);
    while(b!=1)
    {
        if(a==b)return false;
        a=Pinfang(a);
        b=Pinfang(b);b=Pinfang(b);
        
    }
    return true;
    
}

记录历史数据

int Pinfang(int x)
{
    int tem=x,ge,sum=0;
    while(tem!=0)
    {
        ge=tem%10;
        sum+=(ge*ge);
        tem/=10;
    }
    return sum;
}
int history[10001];
bool contain(int * his,int len,int val)
{
    for(int i=0;i<len;i++)
    {
        if(val==his[i])return true;
    }
    return false;
}
bool isHappy(int n) {
    if(n==1)return true;
    int t=n;
    int count=0;
    history[count++]=n;
    while(!contain(history,count,Pinfang(t)))
    {
        if(Pinfang(t)==1)return true;
        t=Pinfang(t);
        history[count++]=t;
        count++;
    }      
    return false;
    
}

第3题:53.最大子数组和

一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

暴力求解(超时)

计算所有的和,返回历史最大值

int maxSubArray(int* nums, int numsSize) {
    //起点 终点,三层for优化为2层
    int sum=0;
    int max=nums[0];
    for(int i=0;i<numsSize;i++)
    {
        sum=0;
        for(int j=i;j<numsSize;j++)
        {
            sum+=nums[j];
            if(max<sum)max=sum;

        }
    }
    return max;
    
}

在这里插入图片描述

动态规划

规律:对于任意长度为n的数组,最大连续子数组取 前n-1的最大连续子数组、nums[n-1]和前n项之和的最大值
思路:每次记录最大值,留下历史最大值

int maxSubArray(int* nums, int numsSize) {
    int pre = 0, maxAns = nums[0];
    for (int i = 0; i < numsSize; i++) {
        pre = fmax(pre + nums[i], nums[i]);
        maxAns = fmax(maxAns, pre);
    }
    return maxAns;
}

分治

int fc(int* nums, int l,int r,int mid)//最大和正好经过mid
{
    
    int m1=nums[mid],m2=nums[mid+1],sum=0;
    for(int i= mid;i>=l;i--)//l~mid 
    {
        sum+=nums[i];
        m1=sum>m1?sum:m1;
    }
    sum=0;
    for(int i= mid+1;i<=r;i++)// mid+1~r
    {
        sum+=nums[i];
        m2=sum>m2?sum:m2;
    }
    return m1+m2;

}
//在l和r之间(包括l,r)的最大连续子数组
int f(int* nums, int l,int r)
{
    if(l==r)return nums[l];
    else
    {
        int mid=(l+r)/2;
        int le=f(nums,l,mid);//最大连续子数组在左边
        int ri=f(nums,mid+1,r);//最大连续子数组在右边
        int max=le>ri?le:ri;
        return max>fc(nums,l,r,mid)?max:fc(nums,l,r,mid);
    }

}
int maxSubArray(int* nums, int numsSize) {
    return f(nums, 0,numsSize-1);
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习初学者 6 个核心算法!建议收藏,反复观看!

今天再来介绍机器学习算法的基本概念和适用场景&#xff01; 首先&#xff0c;引用一句英国统计学家George E. P. Box的名言&#xff1a;All models are wrong, but some are useful. 没有哪一种算法能够适用所有情况&#xff0c;只有针对某一种问题更有用的算法。 也就是说&…

【新版系统架构】知识点背诵默写本

前言 系统架构考试在即&#xff0c;想要考试的人肯定感受到了沉甸甸的压力和紧迫感&#xff0c;脑海中不断闪过知识点的画面&#xff0c;却让人有些头昏脑胀&#xff0c;发现很难完全记住&#xff0c;这个考试很难&#xff0c;知识点很多。这次我在准备考试的同时&#xff0c;…

Android GPU渲染屏幕绘制显示基础概念(1)

Android GPU渲染屏幕绘制显示基础概念&#xff08;1&#xff09; Android中的图像生产者OpenGL&#xff0c;Skia&#xff0c;Vulkan将绘制的数据存放在图像缓冲区中&#xff0c;Android中的图像消费SurfaceFlinger从图像缓冲区将数据取出&#xff0c;进行加工及合成。 Surface…

华为云CodeArts API专场直播来袭!——探索API全生命周期管理新趋势

API的全生命周期管理是否让你摸不清头脑&#xff1f;你是否对API的前沿技术和应用充满了好奇&#xff0c;渴望一探究竟&#xff1f; 华为云PaaS服务即将在5月10日16:00&#xff0c;为你带来一场别开生面的CodeArts API专场直播活动&#xff01; 你可以在轻松愉快的氛围中&…

小巧简单实用的Linux端口转发工具Rinetd

Linux下实现端口转发有很多种方法&#xff0c;尤其是在可以联网的情况下&#xff0c;更是容易。最近在资源受限的定制系统中&#xff0c;找到一个方便离线安装和使用的端口转发工具Rinetd&#xff0c;安装包仅几十K&#xff0c;而且有很多版本的Linux发行系统的支持。 1、安装…

水质监测设备预警系统

随着工业化进程的加快和城市化水平的提高&#xff0c;水质安全问题愈发受到社会各界的广泛关注。为了确保水资源的清洁与安全&#xff0c;水质监测设备预警系统成为了不可或缺的利器。在这个背景下&#xff0c;HiWoo Cloud平台凭借其先进的技术和卓越的性能&#xff0c;为水质监…

【已解决】直接在远程新增文件本地再提交报Merge branch ‘master‘ of

【已解决】直接在远程新增文件本地再提交报Merge branch ‘master’ of … 1、问题产生背景 直接在远程仓库新建了md文件&#xff0c;本地库修改了文件已添加到暂存区之后再提交报错 2、分析 远程新建文件产生变更&#xff0c;版本号与本地拿到的不一致&#xff0c;本地再次提…

Docker 安装的MySQL迁移数据库

1. 导出数据库 docker ps :查看数据库对应的 CONTAINER ID docker exec -it id /bin/bash : 进入到mysql的docker实例中 cd /usr/bin : 进入到bin目录 mysqldump -u root -p123456 study > /root/study_backup0509.sql :使用mysqldump备份库&#xff0c;注意密码与-p之间…

PopChar for Mac v10.1激活版:特殊字符输入工具

PopChar for Mac是一款专为Mac用户设计的字符输入工具&#xff0c;其简单直观的功能使得查找和插入特殊字符变得轻而易举。 PopChar for Mac v10.1激活版下载 首先&#xff0c;PopChar为Mac提供了访问所有字体字符的能力&#xff0c;包括那些难以通过键盘直接输入的字符。用户只…

【3dmax笔记】032: 编辑顶点

一、编辑顶点概述 (1)启动安装好的3dmax软件。 (2)选择顶视图,用图形画出一个矩形。 (3)选择矩形,右击鼠标,将矩形转换成可编辑样条线。 (4)进入顶点层级。 展开可编辑样条线,选择顶点层级(快捷键为1,在不展开样条线的情况下也可以选择顶点层级)。选择后,可以…

postman介绍、安装、使用、功能特点、注意事项

Postman是一款流行的API开发工具&#xff0c;它提供了丰富的功能&#xff0c;包括创建、测试、调试和文档化API。本文将介绍Postman的安装、使用方法&#xff0c;以及其功能特点和注意事项。 1. 介绍 Postman是一款用于构建、测试和调试API的工具&#xff0c;它提供了用户友好的…

串口通信---了解

1 串口接线方式 RXD&#xff1a;数据输入引脚&#xff0c;数据接受&#xff1b;STC89系列对应P3.0口 TXD&#xff1a;数据发送引脚&#xff0c;数据发送&#xff1b;STC89系列对应P3.1口 接线方式 串口编程要素 输入/输出数据缓冲器叫做SBUF&#xff0c;都用99H地址码&#x…

链式二叉树的基本操作1

1.概念回顾 讲二叉树的基本操作之前&#xff0c;我们回顾一下二叉树的概念 在讲树之前&#xff0c;我们的每讲一种数据结构&#xff0c;无外乎就是在讲它们的增删查改&#xff0c;但是在树这里&#xff0c;就有了不小变化。 2.结点的定义 既然是链式二叉树&#xff0c;那必须…

必学-设计模式

设计模式的分类 创建型模式&#xff08;Creational&#xff09;&#xff1a;关注对象的实例化过程&#xff0c;包括了如何实例化对象、隐藏对象的创建细节等。常见的创建型模式有单例模式、工厂模式、抽象工厂模式等。 结构型模式&#xff08;Structural&#xff09;&#xff…

Tensorflow2.0笔记 - 循环神经网络RNN做IMDB评价分析

本笔记记录使用SimpleRNNCell做一个IMDB评价系统情感二分类问题的例子。 import os import time import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics, Inputos.envir…

VisualGLM-6B微调(V100)

Visualglm-6b-CSDN博客文章浏览阅读1.3k次。【官方教程】XrayGLM微调实践&#xff0c;&#xff08;加强后的GPT-3.5&#xff09;能力媲美4.0&#xff0c;无次数限制。_visualglm-6bhttps://blog.csdn.net/u012193416/article/details/131074962?ops_request_misc%257B%2522req…

2. Linux 基本指令(上)|ls|pwd|cd|tree|touch|mkdir|rmdir|rm

前言 计算机软硬件体系结构 层状结构应用软件Word&#xff0c;Matlab操作系统Windows&#xff0c;Linux设备驱动声卡驱动硬件CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;显示器&#xff0c;键盘 操作系统概念 操作系统 是一款进行软硬件资源管理的软件 例子 比如在学…

Join优化规则及应用层BI系统实践

目录 一、背景 二、查询优化器概述​编辑 2.1 System R Optimizer 2.2 Volcano Optimizer 2.3 Cascade Optimizer 三、Join相关优化规则 3.1 JoinReorder 3.1.1 少量表的Reorder 3.1.2 大量表的Reorder 3.1.3 星型模型的Reorder 3.2 外连接消除 3.3 Join消除 3.4 谓…

使用ROW_NUMBER()分组遇到的坑

1、再一次清洗数据时&#xff0c;需要过滤重复数据&#xff0c;使用了ROW_NUMBER() 来分组给每组数据排序号 在获取每组的第一行数据 with records as(select cc.F_Id as Id,REPLACE(cc.F_CNKITitle,char(10),1) as F_CNKITitle,REPLACE(REPLACE(cc.F_Special,专题&#xff1…

适合大学生的鸿蒙开发板-Purple Pi OH之安装Docker

一、介绍 本文基于purple-pi-oh系列主板演示Linux 系统安装Docker&#xff0c;方法适用于RK3566全系列产品。本教程将指导你在基于RK3566的LInux系统上安装Docker。Docker是一个开放源代码的应用容器引擎&#xff0c;允许开发者打包他们的应用及依赖包到一个可移植的容器中&am…
最新文章