文章目录
- 概念
- 特点
- 属性
- 完整的清单
- 显示
- 添加到主屏幕
- 算法
- 描述
- 方案一
- 方案二
概念
Web App Manifest(应用程序清单) 是一个 JSON 格式的文件,用于提供 Web 应用的相关元数据(应用程序的名称、图标、颜色主题、屏幕方向等)。可以让网站安装到设备的主屏幕,不需要用户通过应用商店下载。
特点
沉浸式体验:通过定义详细的manifest,PWA可以在用户的设备上获得与原生应用相似的体验,包括添加到主屏、全屏运行、自定义启动画面等。
跨平台一致性:Web App Manifest标准确保了在不同平台和设备上的表现一致性,尽管某些特性可能因浏览器而异。
SEO和可发现性:manifest中的信息也对搜索引擎友好,有助于提高应用的可发现性和索引质量。
渐进式增强:即使在不完全支持PWA特性的浏览器中,manifest的存在也不会影响基础网页的功能,体现了渐进式增强的原则。
属性
name
和 short_name
:分别为应用程序的全名和短名,用于在启动屏、应用列表等位置显示。
description
:简短描述你的应用程序,有助于搜索引擎优化和辅助技术。
start_url
:用户首次打开PWA时加载的URL。
display
:指定应用程序的显示模式,standalone意味着它看起来像一个独立的应用,没有浏览器UI。
background_color
:应用程序加载时的背景颜色,影响加载过程中的视觉连续性。
theme_color
:影响状态栏、地址栏的颜色(在某些平台上)。
icons
:定义不同尺寸的应用图标,用于启动屏、应用列表等。确保包含至少一个192x192和一个512x512像素的图标,满足大多数设备和用途的需求。
orientation
:可选属性,指定应用程序的首选屏幕方向,如portrait表示竖屏。
完整的清单
{"name": "My Web Application","short_name": "My App","icons": [{"src": "img/icon2.png","sizes": "192x192","type": "image/png"}],"screenshots": [{"src": "img/image.png","form_factor": "wide","type": "image/png","sizes": "2560x1516"},{"src": "img/image.png","type": "image/png","sizes": "2560x1516"}],"start_url": "index.html","display": "standalone","background_color": "#5ad74f","theme_color": "#fbc31f","description": "A simple web application","related_applications": [],"categories": ["tools", "productivity"]
}
显示
在浏览器Application选项中可以找到网络应用清单。我们定义的一些应用属性都可以看到
添加到主屏幕
运行页面时,地址栏会显示这个按钮,点击弹出提示安装应用
选择安装你就可以在桌面上得到一个自己定义的一个应用程序
算法
描述
给定一个数组,找到两个总和为特定值的索引。
例如给定数组 [1, 2, 3, -2, 5, 7],给定总和 7,则返回索引 [1, 4]。
若有多组符合情况则输出索引对中小索引最小的一组。
方案一
暴力枚举法
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}int target = scanner.nextInt();for (int i = 0; i < n - 1; i++) {for (int j = i + 1; j < n; j++) {if (nums[i] + nums[j] == target) {System.out.println(i + " " + j);return;}}}}
}
方案二
哈希数组
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();int[] arr=new int[n+1];int[] hash=new int[205];//存放元素的位置for(int i=0;i<n;i++){arr[i]=scan.nextInt();hash[arr[i]+100]=i;//比如-20对应hash[80]}int k=scan.nextInt();for(int i=0;i<n;i++) {if(hash[k-arr[i]+100]!=0) {//相应的元素存在System.out.println(i+" "+hash[k-arr[i]+100]);return;}}scan.close();}
}
使用 for 循环依次读取 n 个整数,并将它们存储到 arr 数组中。
对于每个读取的整数 arr[i],将其加上 100 作为 hash 数组的索引,将 i(即该整数在 arr 数组中的位置)存储在 hash[arr[i] + 100] 中。这样做的目的是为了处理负数,因为数组的索引不能为负数,通过加上 100 可以将范围在 -100 到 100 之间的整数映射到 0 到 200 的索引范围。
使用 for 循环遍历 arr 数组中的每个元素。
对于每个元素 arr[i],计算 k - arr[i],这是与 arr[i] 相加等于 k 的另一个数。
将 k - arr[i] 加上 100 作为 hash 数组的索引,检查 hash[k - arr[i] + 100] 是否不为 0。如果不为 0,说明找到了满足条件的另一个数,并且 hash[k - arr[i] + 100] 存储了该数在 arr 数组中的位置。
输出这两个数在 arr 数组中的索引,并使用 return 语句结束程序。