【C++】速通涉及 “vector” 的经典OJ编程题

【C++】速通涉及 “vector” 的经典OJ编程题

【C++】速通涉及 “vector” 的经典OJ编程题

一. 杨辉三角

本题LeetCode链接:

在这里插入图片描述

解题思路:

利用vector的特性创建一个二维数组,通过观察得知杨辉三角的0行0列全为1,其他位置元素的值都等于其上一行同列元素与上一行前一列元素的和。

代码实现:

classSolution{public: vector<vector<int>>generate(int numRows){ vector<vector<int>>arr(numRows);for(int i =0; i < numRows; i++){//arr[i].resize(i + 1, 1);//将开辟的空间全初始化为1 arr[i].resize(i +1); arr[i][0]= arr[i][i]=1;}//第一、二行的元素都是1,从第3行,第2列开始循环for(int i =2; i < numRows; i++){for(int j =1; j < i; j++){ arr[i][j]= arr[i -1][j]+ arr[i -1][j -1];}}return arr;}};

二. 删除有序数组中的重复项

本题LeetCode链接:

在这里插入图片描述

解题思路:

比较相邻的两个元素是否相等,若不相等则依次从原数组第二个位置(即变量index,下标为1)插入到原数组中

代码实现:

classSolution{public:intremoveDuplicates(vector<int>& nums){int index =1;for(int i =0; i < nums.size()-1; i++)//注意下面的i + 1越界情况{if(nums[i]!= nums[i +1]){ nums[index]= nums[i +1]; index++;}}//由于一旦发生交换后index就会++;所以此时index的大小就为最终长度return index;}};

【C/C++】按位运算符使用规制

1. 按位与(&):两个相应的二进制位都为1时,结果为1,否则为0。
2. 按位或(|):两个相应的二进制位只要有一个为1,结果为1。
3. 按位异或(^):两个相应的二进制位相异时,结果为1,相同时,结果为0。
4. 按位取反(~):对一个二进制数按位取反,即0变为1,1变为0。
5. 左移(<<):将一个二进制数的各位全部左移若干位,高位丢弃,低位补0。
6. 右移(>>):将一个二进制数的各位全部右移若干位,低位丢弃,高位补符号位

三. 只出现一次的数字

本题LeetCode链接:

在这里插入图片描述

解题思路:

0异或任何一个数的结果为该数本身,两个相同的整数异或结果为0;

代码实现:

classSolution{public:intsingleNumber(vector<int>& nums){int num =0;for(auto ch : nums){ num ^= ch;}return num;}};

四. 只出现一次的数字 III

本题LeetCode链接:

在这里插入图片描述

解题思路:

由于给定的整数序列中恰好有两个元素只出现一次,其余所有元素均出现两次;
将全部元素异或到sum(值为0)中就是这两个元素的异或结果(1.两个相等的元素异或结果为0;2.任何一整数异或0的结果为它本身);由于这两个数不相等,那么异或的结果sum中至少有一个二进制比特位的值为1,我们这里就找到结果sum中的最低的且值为1的比特位,并且把sum中的其他比特位都改变为0得到 lowbit(通过sum ^ -sum得到lowbit,lowbit其他比特位数值均为0);这就是这两个不同的元素的区别,再利用按位与(&)的特征来找到这两个不同的元素;此时用lowbit的唯一的数值为1的比特位来作为判断条件,分别用两个0异或原数组中的所以元素,由于其他元素均出现且只出现了两次,不管异或到哪个0这两个相同整数异或结果都是0,不会影响到最终要找的这两个不同元素。

关键声明:

 s =101100~s =010011(~s)+1=010100// 根据补码的定义,这就是 -s 效果:s 的最低 1 左侧取反,右侧不变 s &-s =000100// lowbit 作者:灵茶山艾府 链接:https://leetcode.cn/problems/single-number-iii/solutions/2484352/tu-jie-yi-zhang-tu-miao-dong-zhuan-huan-np9d2/ 来源:力扣(LeetCode) 

代码实现:

classSolution{public: vector<int>singleNumber(vector<int>& nums){ size_t sum =0;for(auto ch : nums){ sum ^= ch;}//只保留一个二进制数最低位的1,其他位均为0; size_t lowbit = sum &-sum;//此处要用size_t,解决溢出情况int type1 =0,type2 =0;//此处不可以用size_t,与vector<int>不匹配for(auto ch : nums){if(lowbit & ch){ type1 ^= ch;}else{ type2 ^= ch;}}return{type1, type2};//vector<int> ans(2,0);//for(auto ch : nums)//{//ans[(ch & lowbit) == 0] ^= ch; //}//return ans;}};

Read more

【Python】6 种方法轻松将 Python 脚本打包成 EXE 应用

引言 Python 凭借其简洁的语法和强大的功能,在数据分析、Web 开发、自动化脚本等领域广受欢迎。它“开箱即用”的特性让开发者能够快速构建原型和应用程序。然而,对于最终用户而言,运行 Python 脚本往往意味着需要预先安装 Python 解释器及相关依赖库,这对非技术背景的用户来说无疑增加了门槛。 为了解决这一问题,将 Python 代码打包成独立的可执行文件(通常在 Windows 上是 .exe 文件)成为了一个非常实用的选择。这样,用户无需任何额外环境配置,就能像运行普通软件一样直接启动您的 Python 应用。本文将为您介绍六种主流且有效的 Python 打包工具,助您轻松实现跨平台分发。 1. PyInstaller: 最流行的选择 PyInstaller 是目前最广为人知、社区支持最广泛的 Python 打包工具之一。它能够很好地处理各种复杂的依赖关系,并支持将整个应用及其所需资源打包成一个或多个独立的可执行文件。 * 特点: * 支持 Windows,

By Ne0inhk

Python uv 依赖管理工具的安装及使用

核心概念:uv 是什么? uv 是一个用 Rust 编写的高速、一体化的 Python 包管理器和项目工作流工具。可以把它看作是 pip、pip-tools、virtualenv、pytest 等工具的超级替代品。 它的目标是提供极致的速度和无缝的开发者体验,由 Astral 公司开发(这家公司同时也是 Ruff 的创造者)。 1. uv 的主要功能和使用 安装 uv 在 macOS 和 Linux 上,通常使用一键安装脚本: curl -LsSf https://astral.sh/uv/install.sh |sh 安装后,重启你的终端或运行 source ~/.bashrc(或对应 shell 的配置文件)

By Ne0inhk

深入理解 Python 异步编程:async、await 与同步函数详解

目录 1. 引言 2. 同步函数 vs 异步函数 3. async 关键字详解 4. await 关键字详解 5. asyncio.create_task 详解 6. 实际应用场景 7. 常见误区 8. 最佳实践 9. 总结 引言 在现代 Python 开发中,异步编程已经成为处理 I/O 密集型任务的标准方式。理解 async、await 和同步函数的区别,对于编写高效、可扩展的应用程序至关重要。 本文将通过理论解释、代码示例和实际场景,帮助你全面理解 Python 异步编程的核心概念。 同步函数 vs 异步函数 什么是同步函数? 同步函数是传统的函数调用方式,

By Ne0inhk
Python数据统计完全指南:从入门到实战

Python数据统计完全指南:从入门到实战

文章目录 * 1. 数据统计基础与环境配置 * 1.1 Python数据科学生态系统 * 1.2 环境配置与安装 * 2. 数据获取与加载 * 2.1 从不同数据源加载数据 * 2.2 数据基本信息查看 * 3. 数据清洗与预处理 * 3.1 缺失值处理 * 3.2 数据转换与编码 * 4. 描述性统计分析 * 4.1 基本统计量计算 * 4.2 高级统计分析 1. 数据统计基础与环境配置 1.1 Python数据科学生态系统 Python在数据统计领域的强大主要得益于其丰富的库生态系统: # 核心数据分析库import pandas as pd import numpy as np # 数据可视化库import matplotlib.pyplot

By Ne0inhk