个人学习编程(3-29) leetcode刷题

news2025/4/1 6:05:02

最后一个单词的长度:

思路:跳过末尾的空格,可以从后向前遍历

然后再利用 while(i>=0 && s[i] != '  ') 可以得到字符串的长度,

int lengthOfLastWord(char* s) {
    int length = 0;
    int i = strlen(s) - 1; //从字符串末尾开始

    //跳过末尾的空格:
    while(i>=0 && s[i] == ' '){
        i--;
    }
    while(i>=0 && s[i] != ' '){
        i--;
        length++;
    }
    return length;
}

 加一:

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize) {
    //从末尾开始处理,模拟加一操作
    int carry = 1;
    //创建一个新数组,用于存放加一后的结果
    int* result = (int*)malloc(sizeof(int) * (digitsSize + 1));
    //从后向前遍历:
    //   0 1 2 3 4
    //eg 4 2 9 9
    //eg   4 3 0 0
    for(int i = digitsSize - 1; i >= 0;i--){
        int sum = digits[i] + carry;
        result[i + 1] = sum % 10;
        carry = sum / 10; //计算新的进位
    }

    //如果处理完仍有进位
    if(carry){
        result[0] = carry; //
        *returnSize = digitsSize + 1; //返回的数组大小增加1
    }else{
        for(int i = 0;i < digitsSize;i++){
            result[i] = result[i + 1];
        }
        *returnSize = digitsSize;
    }
    return result;
}

二进制求和:

 

示例 1:

输入:a = "11", b = "1"
输出:"100"

示例 2:

输入:a = "1010", b = "1011"
输出:"10101"
char* addBinary(char* a, char* b) {
    int lenA = strlen(a);
    int lenB = strlen(b);
    int maxLen = lenA > lenB ? lenA : lenB;
    //为结果多加一位,以防最后有进位
    char* result = (char*)malloc(maxLen + 2); //一个给进位另一个给 '\0';
    int carry = 0;
    int index = 0;

    //从后向前进行二进制加法:
    while(lenA > 0 || lenB > 0 || carry){
        int bitA = lenA > 0 ? a[lenA - 1] - '0' : 0;
        int bitB = lenB > 0 ? b[lenB - 1] - '0' : 0;
        
        int sum = bitA + bitB + carry;
        result[index++] = (sum % 2) + '0';  // 存储当前位
        carry = sum / 2;  // 更新进位
        
        lenA--;
        lenB--;
    }
    
    // 结果数组反转,因为从低位开始加
    result[index] = '\0';  // 添加字符串结束符
    
    // 修正反转逻辑
    for (int i = 0, j = index - 1; i < j; i++, j--) {
        char temp = result[i];
        result[i] = result[j];
        result[j] = temp;
    }
    
    return result;
}

 x的平方:

奇怪,二分法用 

mid = (left + right) / 2;就不行

int mid = left + (right - left) / 2; 就是可以的

通过改成 mid = left + (right - left) / 2;,我们首先计算 right - left,这通常不会超出 int 的范围,因为 right - left 的差值一般比 left + right 的和要小得多。然后,除以 2 后,计算出的结果不会超出 int 的范围,最后再加上 left,得出的 mid 也不会溢出。

例如:

  • 假设 left = 2,000,000,000 和 right = 2,000,000,000,计算 right - left = 0,然后 0 / 2 = 0,最后 mid = 2,000,000,000 + 0 = 2,000,000,000,完全在范围内。

这种方法保证了加法操作总是先进行小的差值计算,避免了大数相加导致溢出的风险。

int mySqrt(int x) {
    if (x == 0) return 0;

    int left = 1,right = x;

    while (left <= right)
    {
        int mid = left + (right - left) / 2;
        long long square = (long long) mid * mid;
        if (square == x){
            return mid;
        }
        else if (square > x)
        {
            right = mid - 1;
        }
        else{
            left = mid + 1;
        }
    }
    return right;
    
}

 二叉树前序遍历:

#include <bits/stdc++.h>

struct treeNode{
    int val;
    struct treeNode *left;
    struct treeNode *right; 
};

void preOrder(struct treeNode* root,int* res,int* resSize) {
    if(root = NULL) return ;
    res[(*resSize)++] = root->val;
    preOrder(root->left,res,resSize);
    preOrder(root->right,res,resSize);
}
int ii(struct treeNode* root,int* returnSize){
    int* res = (int*)malloc(sizeof(int) * 101);
    int *returnSize = 0;
    preOrder(root,res,returnSize);
    return res;
}

删除排序链表中的重复元素:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head) {
    if(head == NULL){
        return head;
    }
    struct ListNode* current = head;
    //遍历列表
    while(current != NULL && current->next != NULL){
        //如果当前节点的值和下一次节点的值相同
        if(current->val == current->next->val){
            //跳过,下一个节点
            struct ListNode* temp = current->next;
            current->next = temp->next;
            free(temp);
        }else{
            current = current->next;
        }
    }
    return head;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux云计算SRE-第二十一周

构建单节点prometheus&#xff0c;部署node exporter和mongo exporter。构建kibana大盘。包含主机PU使用率&#xff0c;主机MEM使用率&#xff0c;主机网络包速度。mongo db大盘&#xff0c;包含节点在线状态&#xff0c;读操作延迟等 一、实验环境准备 - 节点信息&#xff1…

无人机,云台参数设置,PWM输出控制云台俯仰

目录 1、云台与飞控的连接 2、PX4飞控控制云台&#xff0c;QGC地面站的设置 3、遥控器映射通道设置 4、其他设置 4.1、COM_PREARM_MODE&#xff0c;预解锁模式 4.2、RC9_DZ &#xff0c;遥控器通道死区设置 1、云台与飞控的连接 首先确定一下&#xff0c;设置飞控第几路…

EtherCAT转ProfiNet协议转换网关构建西门子PLC与海克斯康机器人的冗余通信链路

一、案例背景 某电子制造企业的5G通信模块组装线&#xff0c;采用西门子S7-1200PLC&#xff08;ProfiNet主站&#xff09;进行产线调度&#xff0c;而精密组装工序由3台海克斯康工业机器人&#xff08;EtherCAT从站&#xff09;完成。由于协议差异&#xff0c;机器人动作与PLC…

网络中常用协议

一, TCP协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是互联网核心协议之一&#xff0c;位于传输层&#xff0c;为应用层提供可靠的、面向连接的数据传输服务。 1. TCP的核心特点 特性说明面向连接通信前需通过三次握手建立连接&a…

自动驾驶04:点云预处理03

点云组帧 感知算法人员在完成点云的运动畸变补偿后&#xff0c;会发现一个问题&#xff1a;激光雷达发送的点云数据包中的点云数量其实非常少&#xff0c;完全无法用来进行后续感知和定位层面的处理工作。 此时&#xff0c;感知算法人员就需要对这些数据包进行点云组帧的处理…

Linux内核软中断分析

一、软中断类型 在Linux内核中&#xff0c;中断处理分为上半部&#xff08;硬中断&#xff09;和下半部。上半部负责快速响应硬件事件&#xff0c;而下半部用于处理耗时任务&#xff0c;避免阻塞系统。下半部有三种机制&#xff1a;软中断&#xff08;Softirq&#xff09;、小任…

Linux修改默认shell为zsh

一、修改模型shell为zsh 1、检查当前使用的shell echo $SHELL 2、检查当前系统支持的shell cat /etc/shells# 输出结果显示如下&#xff1a; """ /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/csh /bin/tcsh /usr/bin/csh /usr/bin/tcsh /usr/bin/zsh…

[ComfyUI] 如何升级自定义节点(Custom Nodes)

ComfyUI 提供了灵活的 自定义节点(Custom Nodes) 功能,允许用户扩展其能力。随着插件的更新,保持 Custom Nodes 处于最新状态是确保兼容性和功能完整性的关键。 1. 手动升级(Git Pull 方式) 如果你的 自定义节点 是通过 Git 克隆的,可以使用 Git 命令来升级: 步骤: …

linux和windows是采用何种机制保存密码的?

传统Linux的不足&#xff1a; 1&#xff09;存在特权用户root 任何人只要得到root的权限&#xff0c;对于整个系统都可以为所欲为。这一点Windows也一样。 &#xff12;)对于文件的访问权划分不够细 在linux系统里&#xff0c;对于文件的操作&#xff0c;只有「所有者」…

matlab打开两个工程

1、问题描述 写代码时&#xff0c;需要实时参考别人的代码&#xff0c;需要同时打开2个模型&#xff0c;当模型在同一个工程内时&#xff0c;这是可以直接打开的&#xff0c;如图所示 2、解决方案 再打开一个MATLAB主窗口 这个时候就可以同时打开多个模型了 3、正确的打开方…

HarmonyOS主题管理工具封装:动态切换、持久化存储与常见问题解析

注&#xff1a;适用版本&#xff08;Harmony OS NEXT / 5.0 / API 12 &#xff09; 一、效果展示 二、技术栈 HarmonyOS ArkUI框架 使用AppStorage实现跨组件状态管理&#xff0c;PersistentStorage持久化存储用户偏好。 系统配置常量 ConfigurationConstant.Color…

60V单通道高精度线性恒流LED驱动器防60V反接SOD123封装

产品描述: PC561A 系列产品是用于产生单通道、高精度恒流源&#xff08; Constant Current Regulator&#xff0c; CCR&#xff09; 的LED 驱动芯片&#xff0c;为各类 LED 照明应用提供高性价比恒流方案。PC561A 采用晶体管自偏置技术&#xff0c;可在超宽工作电压范围内维持…

学习threejs,使用Sprite精灵、SpriteMaterial精灵材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Sprite1.1.1 ☘️代码…

Cent OS7+Docker+Dify

由于我之前安装了Dify v1.0.0&#xff0c;出现了一些问题&#xff1a;无法删除&#xff0c;包括&#xff1a;知识库中的文件、应用、智能体、工作流&#xff0c;都无法删除。现在把服务器初始化&#xff0c;一步步重新安装&#xff0c;从0到有。 目录 1、服务器重装系统和配置…

本地AI大模型部署革命:Ollama部署和API调试教程

Ollama&#xff1a;你的私人AI助手 还在为云端AI服务的高昂费用和隐私问题而烦恼吗&#xff1f;Ollama横空出世&#xff0c;它是一款专为本地环境打造的大模型部署神器&#xff0c;让你轻松在自己的设备上运行各种强大的AI模型。无论你是开发者还是普通用户&#xff0c;Ollama…

centos7 linux VMware虚拟机新添加的网卡,能看到网卡名称,但是看不到网卡的配置文件

问题现象&#xff1a;VMware虚拟机新添加的网卡&#xff0c;能看到网卡&#xff0c;但是看不到网卡的配置文件 解决方案&#xff1a; nmcli connection show nmcli connection add con-name ens36 ifname ens36 type ethernet #创建一个网卡连接配置文件&#xff0c;这里con…

K8S学习之基础五十一:k8s部署jenkins

k8s部署jenkins 创建nfs共享目录&#xff0c; mkdir -p /data/v2 echo /data/v2 *(rw,no_root_squash) > /etc/exports exportfs -arv创建pv、pvc vi pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: jenkins-k8s-pv spec:capacity:storage: 1GiaccessMod…

在 Mermaid 流程图里“驯服”quot;的魔法指南!!!

&#x1f409; 在 Mermaid 流程图里“驯服”"的魔法指南 在使用 Mermaid 画流程图时&#xff0c;是不是经常遇到想秀一波 &quot; 却被它“反杀”的情况&#xff1f;&#x1f3af; 今天就来教大家如何在这头代码野兽的嘴里&#xff0c;抢回我们的双引号实体编码&#…

GitHub美化个人主页3D图表显示配置操作

这个功能主要是用的这个开源仓库&#xff1a;https://github.com/yoshi389111/github-profile-3d-contrib 想看效果的话&#xff0c;我的个人主页&#xff1a;https://github.com/Sjj1024 开始操作 1.创建自己的github主页属性项目——跟你github用户名一致即可&#xff0c;…

HarmonyOS NEXT 鸿蒙中关系型数据库@ohos.data.relationalStore API 9+

核心API ohos.data.relationalStore API 9 数据库 数据库是存储和管理数据的系统 数据库&#xff08;Database&#xff09;是一个以特定方式组织、存储和管理数据的集合&#xff0c;通常用于支持各种应用程序和系统的运行。它不仅是存放数据的仓库&#xff0c;还通过一定的…