就看到题目第一眼想到的是排序,然后看了一下给出的例子,他们应该都是已经排好序的,只需要我们找出连续的区间。
这是修正之后的代码
class Solution { public List<String> summaryRanges(int[] nums) { List<String> list = new ArrayList<>(); int i = 0; int n = nums.length; while (i < n) { int low = i; while (i < n - 1 && nums[i + 1] == nums[i] + 1) { i++; } int high = i; if (low < high) { list.add(nums[low] + "->" + nums[high]); } else { list.add(String.valueOf(nums[low])); } i++; } return list; } }
记一次失败测试,思路感觉是对的,但是内存超出限制,过会检查代码到底哪里占用内存过多;
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String>list=new ArrayList<String>();//使用List集合来纪录
int i=0;//下标
int n=nums.length;//用来界定循环条件
String temp=null;//用来将low和high转换成字符串
int low=0,high=0;//记录范围
while(i<n){
low=i;
while(i<(n-1)&&nums[i+1]==nums[i]+1){
i++;
}high= i;
if(low<high){
temp=String.valueOf(low)+"->"+String.valueOf(high);
list.add(temp);
}list.add(String.valueOf(i));
}return list;
}
}
好好好,gpt,我们的好伙伴,以下是gpt给出我的回答,
该代码的问题在于以下一行:list.add(String.valueOf(i));
。它将当前索引i
添加到list
而不是范围。这导致list
无限增长,消耗了比必要更多的内存,从而导致内存超出限制的错误。
以下是我在写这道题时参考的博客(ps有些知识点忘掉了狗头保命)
如何往List集合中添加元素:Java——List 添加元素的方法_list添加元素-优快云博客
字符串和数字之间的转换:Java数字、字符、字符串互相转换_java字符转数字-优快云博客