png,jpg,jpeg,gif,webp这些图片格式解释一下,分别什么时候用?

简介: png,jpg,jpeg,gif,webp这些图片格式解释一下,分别什么时候用?

png,jpg/jpeg,gif,webp这些图片格式解释一下,分别什么时候用?

简介

简介:这是一个常见的HTML的面试题,本文讲解png,jpg,gif,webp这些图片格式的含义,一般什么时候使用。

讲解

png:无损压缩,尺寸体积要比jpg/jpeg的大,比较适合用于制作小图标。

jpg:采取压缩算法,有一些失真,比png的体积要小,适合制作中大图片。

gif:一般用于制作动态图片,

webp:这个我们在网页上直接下载的很多都是这种图片,它是同时支持有损或者无损压缩,同质量的图片,webp具有更小的体积,兼容性不是特别的好。

当 WebP 将 JPG 压缩到相当于原图 90% 质量 时,图片体积减少了 50% 左右。当 WebP 将 JPG 压缩到相当于原图 80% 质量时,图片体积则减少了 60%~80%。

jpg与jpeg的区别:

JPG和JPEG其实是一个东西。JPEG是JPG的全名、正式扩展名。但因DOS、Windows 95等早期系统采用的8.3命名规则只支持最长3字符的扩展名,为了兼容采用了.jpg。而由于Mac并不限制扩展名的长度,当时苹果机上都使用了.jpeg的后缀名。虽然现在windows也可以支持任意长度的扩展名了,但大家已经习惯了.jpg的叫法,也就没有强制修正。也因历史习惯和兼容性考虑,.jpg目前更流行。其他扩展名还包括.jpeg、.jpe、.jfif以及.jif。

凑字数

最长连续不重复子序列

给定一个长度为 n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。

输入格式

第一行包含整数 n。

第二行包含 n 个整数(均在 0∼105范围内),表示整数序列。

输出格式

共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。

数据范围

1≤n≤105

输入样例:

5

1 2 2 3 5

输出样例:

3

算法思路

for (int i = 0; i < n; ++ i) a[i] = in.nextInt();

for (int i = 0, j = 0; i < n; ++ i)

{

s[a[i]] ++; // 统计每个数字出现的次数

while(s[a[i]] > 1) // 如果现在出现的这个数字重复了 然后那么【j,i】这一段的所有子序列的连续长度都要减一

{

s[a[j]] --; // 这里要注意是j一直是不大于i的

j ++;

}

res = Math.max(res, i - j + 1);

}

首先是统计每一个数字的出现的次数,定义一个s数组用于记录每一个a[i]的出现次数,然后在通过一个循环进行判断,如果当前这个s[a[i]]>1,代表的是当前这个数字已经重复了,然后对于[i, j]这一段的所有的子序列的连续长度都需要减一。然后让j ++,这一步就是缩短区间的长度,s[a[j]]–代表的就是,当前已经出现重复了,然后需要减一次,然后j++,缩短区间长度。

最后的结果是,每次的循环区间[j, i]的最长长度。

C++

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N], s[N];
int n, res;
int main()
{
    cin >> n;
    for (int i = 0; i < n; ++ i) cin >> a[i];
    for (int i = 0, j = 0; i < n; ++ i)
    {
        s[a[i]] ++; // 记录下a[i]出现的次数
        while(s[a[i]] > 1)   // 一点碰见两个重复的元素后
        {  
            s[a[j]] --;  // 这里要主要的一点是这个算法是没有回溯的
                         // 不要被for循环里面的条件误导以为会回溯、
                         // 现在遇到两个相同的元素了
                         // !!! 现在是这个算法最厉害的地方 
                         // 这个j代表的是 j可以到达最左的地方 所以在j左边的
                         // 元素的个数就需要都-- 这点很妙
                         // 每次求的是 j到i之间的符合条件的最大值
            j ++;        // 然后j++
        }
        res = max(res, i - j + 1);  // 这个res的含义是 在i这个位置、
        // 可以达到的符合题目条件的最大长度
    }
    cout << res;
    return 0;
}

Java

import java.io.*;
import java.util.*;
/*这个题的本质就是双指针算法的题目*/
public class Main
{
    public static void main(String[] args) throws IOException{
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int [] a = new int [n + 10];
        int [] s = new int [n + 10];
        int res = 0;
        for (int i = 0; i < n; ++ i) a[i] = in.nextInt();
        for (int i = 0, j = 0; i < n; ++ i)
        {
            s[a[i]] ++;   // 统计每个数字出现的次数
            while(s[a[i]] > 1)    // 如果现在出现的这个数字重复了 然后那么【j,i】这一段的所有子序列的连续长度都要减一
            {
                s[a[j]] --;       // 这里要注意是j一直是不大于i的
                j ++;
            }
            res = Math.max(res, i - j + 1);
        }
        System.out.println(res);
    }
}

如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历等内容,让大家更好学习编程,我的抖音,B站也叫极客李华。大家喜欢也可以关注一下

相关文章
|
1月前
|
人工智能 前端开发 Java
Java 转 AI 不用慌!3 周求职打卡表,帮你按天推进、高效拿 offer
三周(21天)AI应用工程师转型打卡计划,涵盖Python基础、Prompt工程、实战项目与面试准备,每日明确任务目标,助力系统学习与进度追踪。
282 7
html2canvas 空白
html2canvas 空白
377 59
|
机器学习/深度学习 算法 安全
隐私计算训练营第三讲-详解隐私计算的架构和技术要点
SecretFlow 是一个隐私保护的统一框架,用于数据分析和机器学习,支持MPC、HE、TEE等隐私计算技术。它提供设备抽象、计算图表示和基于图的ML/DL能力,适应数据水平、垂直和混合分割场景。产品层包括SecretPad(快速体验核心能力)和SecretNote(开发工具)。算法层涉及PSI、PIR、数据分析和联邦学习(水平、垂直、混合)。此外,SecretFlow还有YACL密码库和Kusica任务调度框架,Kusica提供轻量化部署、跨域通信和统一API接口。
548 0
|
存储 编解码 UED
网站图片JPG、PNG、GIF哪个好,该选择谁
网站图片JPG、PNG、GIF哪个好,该选择谁
613 0
|
11月前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
912 4
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
266 11
|
JavaScript 前端开发
Vue开发必备:$nextTick方法的理解与实战场景
Vue开发必备:$nextTick方法的理解与实战场景
823 1
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
253 0
|
存储 分布式数据库
hbase-region个数
hbase-region数量 单个regionserver配置region个数的两种方案: 根据官方推荐配置(硬盘容量);根据内存配置 一:官方推荐配置(硬盘容量): 官方文档给出的推荐: regionserver上的region个数范围在20~200;每个region的大小在10G~30G之间,比较符合实际。
3295 0