如何查找字符串数组的最后一个非空索引
查询固定大小字符串数组最后一个有效元素索引的方法
通用实现思路
- 从数组尾部开始倒序遍历,匹配到第一个不是默认空值的元素时,对应的下标就是目标索引。3万长度的数组遍历耗时极低,完全满足普通场景的性能要求。
- 如果你填充数组是严格按从前往后的顺序,不会出现中间位置留空的情况,可以直接在填充逻辑里新增一个计数器,每成功填充一个元素就将计数器+1,最终最后一个有效索引就是
计数器值 - 1,查询效率为O(1)。
常见语言代码示例
Python
假设未填充位置默认值为空字符串:
# 初始化长度为30000的数组 str_arr = [''] * 30000 # 模拟填充内容 str_arr[0] = "first" str_arr[12689] = "last_valid" # 倒序查找 last_idx = None for i in range(len(str_arr)-1, -1, -1): if str_arr[i] != '': last_idx = i break print(last_idx) # 输出结果为12689
如果数组默认值为None,将判断条件改为if str_arr[i] is not None即可。
Java
Java中String类型数组初始化的默认值为null:
public class Test { public static void main(String[] args) { String[] strArr = new String[30000]; // 模拟填充 strArr[8972] = "last_valid"; Integer lastIdx = null; for (int i = strArr.length - 1; i >= 0; i--) { if (strArr[i] != null) { lastIdx = i; break; } } System.out.println(lastIdx); // 输出结果为8972 } }
C++
C++ string数组初始化默认值为空字符串:
#include <iostream> #include <string> using namespace std; int main() { string strArr[30000]; // 模拟填充 strArr[24561] = "last_valid"; int lastIdx = -1; for (int i = 29999; i >= 0; i--) { if (!strArr[i].empty()) { lastIdx = i; break; } } cout << lastIdx << endl; // 输出结果为24561 return 0; }
注意事项
需要先确认你的数组未填充位置的默认值,调整对应的判断条件即可,比如如果默认占位符是字符串"null",就把判断逻辑改为匹配非"null"的元素。
内容的提问来源于stack exchange,提问作者Sune
相关产品推荐
相关产品推荐

