当前位置: 首页 > news >正文

数据结构之时间复杂度-空间复杂度

大家好,我是深鱼~

目录

1.数据结构前言

1.1什么是数据结构

1.2什么是算法

1.3数据结构和算法的重要性

1.4如何学好数据结构和算法

2.算法的效率

3.时间复杂度

3.1时间复杂度的概念

3.2大O的渐进表示法

【实例1】:双重循环的时间复杂度:O(N)

【实例2】:双重循环的时间复杂度:O(N+M)

【实例3】:常数循环的时间复杂度:O(1)

【实例4】:strchr的时间复杂度:O(N)

【实例5】:冒泡排序的时间复杂度:O(N^2)

【实例6】:二分查找的时间复杂度:O(log2N)

【实例7】:阶乘递归的时间复杂度:O(N)

【实例8】:斐波那契递归的时间复杂度:O(2^N)

 4.空间复杂度

【实例1】:冒泡排序的空间复杂度:O(1)

【实例2】:斐波那契递归的空间复杂度:O(N)

【实例3】:函数阶乘递归的空间复杂度:O(N)

 【拓展】递归版斐波那契数列的空间复杂度:O(N)


1.数据结构前言

1.1什么是数据结构

实现一些项目,需要在内存中将数据存储起来,数据结构就是计算机存储、组织数据的方式。指相互之间存在一种或多种特定关系的数据元素的集合。eg:数组,链表,树...

1.2什么是算法

算法简单来说就是一系列的计算步骤,用来将输入数据转化为输出结果的。常见的算法有:排序,查找,查重,推荐算法...

1.3数据结构和算法的重要性

在校招的笔试中会有很多有关数据结构和算法的题

可以看看链接,在未来工作中:

数据结构和算法对一个程序员来说的重要性

1.4如何学好数据结构和算法

<1>多敲代码

<2>注重画图思考

2.算法的效率

算法的效率看两点,第一点看时间效率,也就是时间复杂度,第二点看空间效率,也就是空间复杂度,但是随着计算机行业的发展,计算机的存储容量已经达到了很高的程度,所以如今我们不用太关注一个算法的空间复杂度

3.时间复杂度

3.1时间复杂度的概念

算法的时间复杂度是数学里面一个带有未知数的函数表达式,算法的复杂度不是看这个算法的运行时间,因为环境不同,具体的运行时间就不一样,eg:10年前2核cpu、2g内存的机器和今天8核cpu、8g内存的机器,运行的时间就不一样。算法中的基本操作的执行次数,为算法的时间复杂度

3.2大O的渐进表示法

请计算一下Func1基本操作执行了多少次?

void Func1(int N)
{
int count = 0;
for (int i = 0; i < N ; ++ i)
{for (int j = 0; j < N ; ++ j){++count;}
}
for (int k = 0; k < 2 * N ; ++ k)
{++count;
}
int M = 10;
while (M--)
{++count;
}
printf("%d\n", count);
}

Func1 执行的基本操作次数 :F(N)=N*N+2*N+10

当N = 10        F(N) = 130

当N = 100      F(N) = 10210

当N = 1000   F(N) = 1002010

N越大,后两项对结果的影响越小,所以实际计算时间复杂度时,我们只需要大概执行次数,那么这里我们使用大O的渐进表示法(估算),即时间复杂度:O(N^2)

大O渐进表示法:

(1)用常数1取代运行时间中的所有加法常数

(2)在修改后的运行次数函数中,只保留最高阶项

(3)如果最高阶存在且不是1,则取除与这个项目相乘的常数

【实例1】:双重循环的时间复杂度:O(N)

本来应该是2*N,根据大O渐进表示法(3)简化为O(N)

// 计算Func2的时间复杂度?
void Func2(int N)
{
int count = 0;
for (int k = 0; k < 2 * N ; ++ k)
{
++count;
}
int M = 10;
while (M--)
{
++count;
}
printf("%d\n", count);
}

【实例2】:双重循环的时间复杂度:O(N+M)

(如果前提:M>>N,那么时间复杂度就是O(M);

                      N>>M,那么时间复杂度就是O(N);

                      M和N差不多,那么时间复杂度O(M)或O(N)都可以)

一般情况下时间复杂度计算时未知数都是用的N,但是也可以使用M,K等等其他的

// 计算Func3的时间复杂度?
void Func3(int N, int M)
{
int count = 0;
for (int k = 0; k < M; ++ k)
{
++count;
}
for (int k = 0; k < N ; ++ k)
{
++count;
}
printf("%d\n", count);
}

【实例3】:常数循环的时间复杂度:O(1)

本来是100,根据大O渐进表示法(1)简化为O(1)

O(1)不是代表算法运行一次,而是常数次

// 计算Func4的时间复杂度?
void Func4(int N)
{
int count = 0;
for (int k = 0; k < 100; ++ k)
{
++count;
}
printf("%d\n", count);
}

【实例4】:strchr的时间复杂度:O(N)

// 计算strchr的时间复杂度?
const char * strchr ( const char * str, int character );

strchr函数的逻辑实际就是下面这个

while(*str)

{

     if(*str==character)

            return str;

     else

           ++str;

}

 以hello world这个字符串为例:

假设查找的是h:      1 最好情况:任意输入规模的最小运行次数(下界)

假设查找的是w:     N/2 平均情况:任意输入规模的期望运行次数(大概就是最好最坏相加/2)

假设查找的是d:       N 最坏情况:任意输入规模的最大运行次数(上界)

当一个算法随着输入的不同,时间复杂度不同,时间复杂度做悲观预期,看最坏的情况(即这个例子的时间复杂度是O(N))

【实例5】:冒泡排序的时间复杂度:O(N^2)

// 计算BubbleSort的时间复杂度?
void BubbleSort(int* a, int n)
{
assert(a);
for (size_t end = n; end > 0; --end)
{
int exchange = 0;
for (size_t i = 1; i < end; ++i)
{
if (a[i-1] > a[i])
{
Swap(&a[i-1], &a[i]);
exchange = 1;
}
}
if (exchange == 0)
break;
} 
}

时间复杂度:N-1,N-2,N-3...1   精确值也就是N*(N-1)/2,那么大O的渐变表示法就是O(N^2)

算时间复杂度不能只看几层循环,而要去看他的思想

【实例6】:二分查找的时间复杂度:O(log2N)

// 计算BinarySearch的时间复杂度?
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end = n-1;
while (begin < end)
{
int mid = begin + ((end-begin)>>1);
if (a[mid] < x)
begin = mid+1;
else if (a[mid] > x)
end = mid;
else
return mid;
}
return -1;
}

最好的情况:O(1)

最坏的情况:O(log2N)

为什么是O(log2N)呢?

【画图理解】:假设我们要查找X次,一个数组的大小是N,每一次二分查找如果没有找到,N就除以2,考虑最坏的结果,那么直到N一直除到只剩1为止就结束了

N/2/2/2/2...=1

2^X=N

X=log2N

 可见二分查找算法是一个非常牛逼的算法

N个数中查找                大概查找次数

1000                              10

100W                             20

10亿                              30

但是这个算法的前提是数组有序

【实例7】:阶乘递归的时间复杂度:O(N)

递归算法时间复杂度:递归次数*每次递归调用的次数

// 计算阶乘递归Factorial的时间复杂度?
long long Factorial(size_t N)
{
return N < 2 ? N : Factorial(N-1)*N;
}

Fac(N)   Fac(N-1)  ... Fac(1)

【实例8】:斐波那契递归的时间复杂度:O(2^N)

// 计算斐波那契递归Fibonacci的时间复杂度?
long long Fibonacci(size_t N)
{
return N < 2 ? N : Fibonacci(N-1)+Fibonacci(N-2);
}

【画图理解】:理解递归的逻辑思想,每一次递归都会调用小的两个递归,最后右边的递归调用会先结束,那么递归的次数就是等比数列的和减去右下角因提前结束而缺少的次数

Fib(N)=2^0+2^1+2^2+...+2^n-X

此处的每次递归调用的次数是个常数,就相当于没*

那么大O渐进表示法也就是O(2^N)

可见斐波那契数列的递归写法完全是一个没有实际用途的算法,因为太慢了

 4.空间复杂度

空间复杂度也是一个数学表达式,是一个算法在运行过程中的临时额外占用存储空大小的量度

空间复杂度不是程序占用了多少bytes的空间,因为这个也没有太大的意义,所以空间复杂度算的是变量的个数

空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法

【注意】:函数运行时所需要的栈空间(存储参数,局部变量,一些存储器信息等等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时申请额外空间来确定

【实例1】:冒泡排序的空间复杂度:O(1)

冒泡排序中有三个变量:exchang,end,i,那么根据大O渐进表示法为O(1)

// 计算BubbleSort的空间复杂度?
void BubbleSort(int* a, int n)
{
assert(a);
for (size_t end = n; end > 0; --end)
{
int exchange = 0;
for (size_t i = 1; i < end; ++i)
{
if (a[i-1] > a[i])
{
Swap(&a[i-1], &a[i]);
exchange = 1;
}
}
if (exchange == 0)
break;
}
}

【实例2】:斐波那契递归的空间复杂度:O(N)

N个数的数组,动态开辟了N+1个空间,简化过后空间复杂度为O(N)

这个函数返回的是斐波那契数列的前n项的数组,而不是一个数

那个函数的时间复杂度为O(N),比递归的O(2^N)简化了很多

// 计算Fibonacci的空间复杂度?
//返回斐波那契数列的前n项
long long* Fibonacci(size_t n)
{
if(n==0)
return NULL;
long long * fibArray =
(long long *)malloc((n+1) * sizeof(long long));
fibArray[0] = 0;
fibArray[1] = 1;
for (int i = 2; i <= n ; ++i)
{
fibArray[i ] = fibArray[ i - 1] + fibArray [i - 2];
}
return fibArray ;
}

【实例3】:函数阶乘递归的空间复杂度:O(N)

// 计算阶乘递归Factorial的空间复杂度?
long long Factorial(size_t N)
{
return N < 2 ? N : Factorial(N-1)*N;
}

【画图理解】:递归函数调用了N次,开辟了N个栈帧,每个栈帧使用了常数的个空间,所以空间复杂度为O(N) (只要看递归的深度

 【拓展】递归版斐波那契数列的空间复杂度:O(N)

// 计算斐波那契递归Fibonacci的空间复杂度?
long long Fibonacci(size_t N)
{
return N < 2 ? N : Fibonacci(N-1)+Fibonacci(N-2);
}

【画图理解】: 本函数调用空间的顺序是Fbi(N),Fbi(N-1)...Fbi(1),也就是最左边的一个枝干,然后这些函数的空间销毁,继续下一个枝干,这样函数递归的深度一直都是N,而不会是2^N

空间是可以重复利用,不累计的

时间是一去不复返,累积的

这次数据结构之时间和空间复杂度的内容就到此啦,有什么问题欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 ! 

相关文章:

数据结构之时间复杂度-空间复杂度

大家好&#xff0c;我是深鱼~ 目录 1.数据结构前言 1.1什么是数据结构 1.2什么是算法 1.3数据结构和算法的重要性 1.4如何学好数据结构和算法 2.算法的效率 3.时间复杂度 3.1时间复杂度的概念 3.2大O的渐进表示法 【实例1】&#xff1a;双重循环的时间复杂度&#xf…...

新一代构建工具 maven-mvnd

新一代构建工具 maven-mvnd mvnd的前世今生下载安装 mvndIDEA集成 mvnd的前世今生 maven 作为一代经典的构建工具&#xff0c;流行了很多年&#xff0c;知道现在依然是大部分Java项目的构建工具的首选&#xff1b;但随着项目复杂度提高&#xff0c;代码量及依赖库的增多使得ma…...

构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息&#xff0c;并以图表的形式向用户展示。 接着上一篇来继续 部署Cadvisor 被监控主机上部署Cadvisor容器…...

Leetcode.995 K 连续位的最小翻转次数

题目链接 Leetcode.995 K 连续位的最小翻转次数 rating : 1835 题目描述 给定一个二进制数组 n u m s nums nums 和一个整数 k k k 。 k k k位翻转 就是从 n u m s nums nums 中选择一个长度为 k k k 的 子数组 &#xff0c;同时把子数组中的每一个 0 0 0 都改成 1 1 1 …...

PHP8的跳转语句-PHP8知识详解

如果循环条件满足的时候&#xff0c;则程序会一直执行下去。如果需要强制跳出循环&#xff0c;则需要使用跳转语句来完成。PHP8的跳转语句包括break语句、continue语句和goto语句。 1、break语句 break语句的作用是完全终止循环&#xff0c;包括while、do…while、for、switch…...

Idea中maven无法下载源码

今天在解决问题的时候想要下载源码&#xff0c;突然发现idea无法下载&#xff0c;这是真的蛋疼&#xff0c;没办法查看原因&#xff0c;最后发现问题的原因居然是因为Maven&#xff0c;由于我使用的idea的内置的Bundle3的Maven&#xff0c;之前没有研究过本地安装和内置的区别&…...

【linux-keepalive】keepalive避免单点故障,高可用配置

keepalive: [rootproxy ~]# yum install -y keepalived [rootproxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id proxy1 //设置路由ID号vrrp_iptables //不添加任何防火墙规则 } vrrp_instance V…...

测试网络模型的FLOPs和params

概念 FLOPS&#xff1a;注意全大写&#xff0c;是floating point operations per second的缩写&#xff0c;意指每秒浮点运算次数&#xff0c;理解为计算速度。是一个衡量硬件性能的指标。 FLOPs&#xff1a;注意s小写&#xff0c;是floating point operations的缩写&#xf…...

《树莓派项目实战》第十五节 使用L298N驱动板模块驱动双极42步进电机

目录 15.1 双极步进电机引脚介绍 15.2 连接到树莓派 15.3 编写代码驱动步进电机 在本节,我们将学习如何使用L298N驱动板驱动一个双极42步进电机。该项目涉及到的材料有: 树莓派...

基于短信宝API零代码实现短信自动化业务

场景描述&#xff1a; 基于短信宝开放的API能力&#xff0c;实现在特定事件&#xff08;如天气预警&#xff09;或定时自动发送短信&#xff08;本文以定时群发短信为例&#xff09;。通过Aboter平台如何实现呢&#xff1f; 使用方法&#xff1a; 首先创建一个IPaaS流程&…...

Qt应用开发(基础篇)——信号槽 Signals and Slots

一、前言 Qt成为我们今天拥有的灵活而舒适的工具&#xff0c;除了友好和能够快速开发设计师界面&#xff0c;信号槽机制是最大的核心特征&#xff0c;也是区别于其他开发框架最大的优势。 Qt的信号槽作用于两个对象之间的通信。当一个对象发生了改变&#xff0c;它希望其他关心…...

正则表达式--Notepad++常用的替换

原文网址&#xff1a;正则表达式--Notepad常用的替换_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad使用正则表达式进行替换时的常用的一些示例。 服务器JSON的格式化 例1&#xff1a;将回车去掉&#xff0c;改为正确的JSON格式 搜索&#xff1a; ([^,])(\r)(\n)(\s) 替…...

ES6 对象合并

对象合并 在 JavaScript 中&#xff0c;可以使用不同的方法来合并对象的属性。这样可以将两个或多个对象的属性合并到一个新的对象中。这是在编程中常见的一种操作&#xff0c;尤其在处理配置、选项或数据更新时非常有用。 以下是几种常见的对象合并方法&#xff1a; 1. 使用…...

使用线性回归预测票房收入 -- 机器学习项目基础篇(10)

当一部电影被制作时&#xff0c;导演当然希望最大化他/她的电影的收入。但是我们能通过它的类型或预算信息来预测一部电影的收入会是多少吗&#xff1f;这正是我们将在本文中学习的内容&#xff0c;我们将学习如何实现一种机器学习算法&#xff0c;该算法可以通过使用电影的类型…...

一文读懂|RDMA原理

什么是DMA DMA全称为Direct Memory Access&#xff0c;即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行。我们先来看一下没有DMA的时候&#xff1a; 无DMA控制器时I/O设备和内存间的数据路径 假设I/O设备为一个普通网卡&#xff0c;为了从内存拿到需要…...

深入理解负载均衡原理及算法

1. 前言 在互联网早期,网络还不是很发达,上网用户少,流量相对较小,系统架构以单体架构为主。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服…...

44.实现爱尔兰B公式计算并输出表格(matlab程序)

1.简述 1.话务量定义 话务量指在一特定时间内呼叫次数与每次呼叫平均占用时间的乘积。 话务量反映了电话负荷的大小&#xff0c;与呼叫强度和呼叫保持时间有关。呼叫强度是单位时间内发生的呼叫次数&#xff0c;呼叫保持时间也就是占用时间。 话务量计算方法 话务量公式为…...

【Linux】-- 进程间通信

目录 一、进程间通信介绍 二、管道 1.什么是管道&#xff08;pipe&#xff09; 2.重定向和管道 &#xff08;1&#xff09;为什么要有管道的存在 &#xff08;2&#xff09;重定向和管道的区别 3.匿名管道 &#xff08;1&#xff09;匿名管道原理 &#xff08;2&…...

[PyTorch][chapter 48][LSTM -3]

简介&#xff1a; 主要介绍一下 sin(x)&#xff1a; 为 数据 cos(x): 为对应的label 项目包括两个文件 main.py: 模型的训练&#xff0c;验证&#xff0c;参数保存 lstm.py 模型的构建 目录&#xff1a; lstm.py main.py 一 lstm.py # -*- coding: utf-8 -*- "&q…...

xss csrf 攻击

介绍 xss csrf 攻击 XSS&#xff1a; XSS 是指跨站脚本攻击。攻击者利用站点的漏洞&#xff0c;在表单提交时&#xff0c;在表单内容中加入一些恶意脚本&#xff0c;当其他正常用户浏览页面&#xff0c;而页面中刚好出现攻击者的恶意脚本时&#xff0c;脚本被执行&#xff0c;从…...

如何使用win10专业版系统自带远程桌面公司内网电脑,从而实现居家办公?

使用win10专业版自带远程桌面公司内网电脑 文章目录 使用win10专业版自带远程桌面公司内网电脑 在现代社会中&#xff0c;各类电子硬件已经遍布我们身边&#xff0c;除了应用在个人娱乐场景的消费类电子产品外&#xff0c;各项工作也离不开电脑的帮助&#xff0c;特别是涉及到数…...

leetcode做题笔记62

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 思路一…...

图论 <最短路问题>模板

图论 <最短路问题> 有向图 1.邻接矩阵&#xff0c;稠密图 2.邻接表 &#xff08;常用&#xff09;单链表&#xff0c;每一个点都有一个单链表 &#xff0c;插入一般在头的地方插&#xff0c; 图的邻接表的存储方式 树的深度优先遍历 特殊的深度优先搜索&#xff0c…...

计算机网络性能指标

比特&#xff1a;数据量的单位 KB 2^10B 2^13 bit 比特率&#xff1a;连接在计算机网络上的主机在数字通道上传送比特的速率 kb/s 10^3b/s 带宽&#xff1a;信号所包含的各种频率不同的成分所占据的频率范围 Hz 表示在网络中的通信线路所能传送数据的能力&#xff08…...

vue + elementUI 实现下拉树形结构选择部门,支持多选,支持检索

vue elementUI 实现下拉树形结构选择部门&#xff0c;支持多选&#xff0c;支持检索 <template><div><el-select v-model"multiple?choosedValue:choosedValue[0]" element-loading-background"rgba(0,0,0,0.8)":disabled"disableFl…...

招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本 tbms

​功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…...

半监督学习(主要伪标签方法)

半监督学习 1. 引言 应用场景&#xff1a;存在少量的有标签样本和大量的无标签样本的场景。在此应用场景下&#xff0c;通常标注数据是匮乏的&#xff0c;成本高的&#xff0c;难以获取的&#xff0c;与之相对应的是却存在大量的无标注数据。半监督学习的假设&#xff1a;决策…...

datePicker一个或多个日期组件,如何快捷选择多个日期(时间段)

elementUI的组件文档中没有详细说明type"dates"如何快捷选择一个时间段的日期&#xff0c;我们可以通过picker-options参数来设置快捷选择&#xff1a; <div class"block"><span class"demonstration">多个日期</span><el…...

【语音合成】微软 edge-tts

目录 1. edge-tts 介绍 2. 代码示例 1. edge-tts 介绍 https://github.com/rany2/edge-tts 在Python代码中使用Microsoft Edge的在线文本到语音服务 2. 代码示例 import asyncio # pip install edge_tts import edge_tts TEXT """给我放首我喜欢听的歌曲…...

elevation mapping学习笔记3之使用D435i相机离线或在线订阅点云和tf关系生成高程图

文章目录 0 引言1 数据1.1 D435i相机配置1.2 协方差位姿1.3 tf 关系2 离线demo2.1 yaml配置文件2.2 launch启动文件2.3 数据录制2.4 离线加载点云生成高程图3 在线demo3.1 launch启动文件3.2 CMakeLists.txt3.3 在线加载点云生成高程图0 引言 elevation mapping学习笔记1已经成…...

做网站开始要注意什么/一个新公众号怎么吸粉

android 4.0源码已经出来很久了。。网上也有下载的。但是我一直想自己下载一次不想用网上的现成的东东。 今天终于忍不住了&#xff0c;创了一个linux虚拟机。开始下载android 4.0源码了。 下载需要linux环境。可以选择装个ubuntu系统&#xff0c;也可以用VMware建个虚拟的ubun…...

东营做网站优化公司/长沙seo推广外包

F1官方日前宣布F1电竞全球锦标赛将连续第四年盛大举行&#xff0c;今年资格赛参赛人群破纪录超23.7万人&#xff0c;赛事总奖金也飙升至75万英镑。与此同时&#xff0c;F1电竞中国冠军赛个人挑战赛也全面开启报名&#xff0c;中国的模拟赛车爱好者们同样可以在虚拟赛道上&#…...

潍坊高级网站建设推广/网站关键词排名查询

2019独角兽企业重金招聘Python工程师标准>>> zhzhuyi zhu 先把主库和从库都安装好mongodb 并启动一次再关闭。注意&#xff1a;安装好mongodb软件后至少要启动关闭一次&#xff0c;否则里面的local库没有初始化最后是无法建立主从关系的。 主库指定路径&#xff0…...

重庆营销型网站随做的好/百度品牌广告多少钱

Label 欧拉函数 Description 给定整数n(1≤n≤105)n(1\leq n\leq 10^5)n(1≤n≤105)&#xff0c;求&#xff1a; ∑i1n∑j1ngcd(i,j)\sum_{i1}^{n}\sum_{j1}^{n}gcd(i,j)i1∑n​j1∑n​gcd(i,j) Solution 看上去此题所求又是一个反演的形式&#xff08;其实此题可用反演解…...

西安做网站收费价格/营销的四种方式

前后端分离与跨域的解决方案&#xff08;CORS的原理&#xff09; vue中axios发送OPTIONS预检请求的原因及如何通过 ps&#xff1a; Access-Control-Allow-Origin&#xff1a;该字段是必须的&#xff0c;* 表示接受任意域名的请求&#xff0c;还可以指定域名。 Access-Control…...

站外推广网站/广告接单有什么平台

这篇文章主要为大家详细介绍了php与java通过socket通信的简单示例&#xff0c;具有一定的参考价值&#xff0c;可以用来参考一下。感兴趣的小伙伴&#xff0c;下面一起跟随512笔记的小玲来看看吧&#xff01;demo实现的简单功能是&#xff0c;接受PHP端写入的字符串&#xff0c…...