Summary Ranges(两个指针)

本文提供了一种使用双指针策略解决SummaryRanges问题的有效方法。通过遍历数组并利用两个指针start和end来确定连续范围,该算法能够简洁地生成所有连续整数范围的概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Summary Ranges

  Total Accepted: 511   Total Submissions: 2271

Given a sorted integer array without duplicates, return the summary of its ranges.

For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"].

[思路]

两个指针 start, end.  如果nums[end+1] = nums[end]+1, 就移动end指针, 否则, 插入字符串nums[start]->nums[end]. 

[CODE]

[java]  view plain  copy
  1. public class Solution {  
  2.     // [0,1,2,4,5,7], return ["0->2","4->5","7"].   
  3.     public List<String> summaryRanges(int[] nums) {  
  4.         List<String> res = new ArrayList<>();  
  5.         if(nums==null || nums.length<1return  res;  
  6.           
  7.         int s=0, e=0;  
  8.         while(e<nums.length) {  
  9.             if(e+1<nums.length && nums[e+1]==nums[e]+1) {  
  10.                 e++;  
  11.             } else {  
  12.                 if(s==e) {  
  13.                     res.add(Integer.toString(nums[s]));  
  14.                 } else {  
  15.                     String str = nums[s] + "->" + nums[e];  
  16.                     res.add(str);  
  17.                 }  
  18.                 ++e;  
  19.                 s = e;  
  20.             }  
  21.         }  
  22.         return res;  
  23.     }  
  24. }  
<think>好的,我需要回答用户关于HTML中`<details>`标签内是否可以包含多个`<summary>`的问题。首先,我得回忆一下HTML规范的相关内容。记得在HTML标准中,每个`<details>`元素只能有一个`<summary>`作为第一个子元素。如果放置多个`<summary>`,多余的会被浏览器忽略,只有第一个有效。 接下来,我需要验证这个知识点是否正确。查阅MDN文档,确认确实如此。规范指出,虽然可以在`<details>`里写多个`<summary>`,但只有第一个会被渲染,其他的会被视为普通元素,不会影响折叠行为。这可能导致结构混乱,所以不建议这样做。 然后,考虑如何用例子说明。比如,正确的用法是一个`<summary>`后跟其他内容。如果添加多个,展示时第二个`<summary>`会以普通文本显示,无法作为切换按钮。同时,需要提醒用户依赖多个`<summary>`可能导致兼容性问题,不同浏览器处理方式可能不同。 最后,总结关键点:每个`<details>`应仅包含一个`<summary>`,多余的无效,并强调遵循标准的重要性以确保一致性和可访问性。同时,提供替代方案,比如在`<summary>`内部使用其他HTML元素来实现复杂结构。</think><details> <summary>HTML中<code><details></code>标签的基本用法</summary> HTML的`<details>`元素用于创建可折叠的内容区块,其标准结构如下: ```html <details> <summary>点击展开</summary> <p>这里是隐藏的内容...</p> </details> ``` 其中: 1. `<summary>` 是**必须**的第一个子元素 2. 只能存在**一个有效**的`<summary>` 3. 默认显示`▸`箭头指示器(可通过CSS自定义) </details> <details> <summary>多个<code><summary></code>的实验结果</summary> 虽然HTML规范允许以下写法: ```html <details> <summary>标题1</summary> <summary>标题2</summary> <p>内容</p> </details> ``` 但实际表现效果为: 1. **仅第一个**`<summary>`会被识别为切换控件 2. 第二个`<summary>`会显示为普通文本 3. 点击第二个标题**不会触发**折叠状态变化 $$ \text{有效元素数量} = \begin{cases} 1 & \text{当存在多个}\texttt{<summary>}\text{时} \\ 0 & \text{当没有}\texttt{<summary>}\text{时(浏览器自动生成)} \end{cases} $$ </details> <details> <summary>实现多标题效果的替代方案</summary> 若需要多个控制点,可通过以下方法实现: **方案1:嵌套结构** ```html <details> <summary>主标题 <details> <summary>子标题</summary> <p>嵌套内容</p> </details> </summary> <p>主内容</p> </details> ``` **方案2:CSS伪元素增强** ```css details summary::after { content: " ▶"; color: #666; } details[open] summary::after { content: " ▼"; } ``` **方案3:JavaScript辅助** ```javascript document.querySelectorAll('.custom-summary').forEach(item => { item.addEventListener('click', () => { const details = item.closest('details'); details.open = !details.open; }); }); ``` </details> <details> <summary>浏览器兼容性注意事项</summary> 1. **现代浏览器**(Chrome 12+、Firefox 49+、Safari 6+)均支持标准行为 2. **旧版Edge**(18以下)需要`polyfill` 3. **屏幕阅读器**可能重复读取多个`<summary>` 4. 推荐使用WAI-ARIA增强可访问性: ```html <details role="group"> <summary aria-expanded="false">标题</summary> </details> ``` </details> 通过标准实现可以确保: $$ \text{可访问性} \propto \frac{1}{\text{非标准元素数量}} $$ 建议始终遵循HTML规范以获得最佳兼容性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值