当前位置: 首页 > news >正文

《LeetCode Hot100》 Day01

Day01

  1. 轮转数组

思路:

(1) 使用O(1) 空间复杂度解决,就需要原地解决,不能创建新的数组。

(2) 先整体反转数组,再反转前k个数,再反转剩下的数。即可完整本题。

(3) 所以需要定义一个方法实现反转这个功能,该方法接受三个参数:数组,起始索引,终止索引。

完整代码如下:

class Solution {
​public void rotate(int[] nums, int k) {
​
•    int n = nums.length;
​
•    k %= n; // 轮转 k 次等于轮转 k%n 次
​
•    reverse(nums, 0, n - 1);
​
•    reverse(nums, 0, k - 1);
​
•    reverse(nums, k, n - 1);
​}
​private void reverse(int[] nums, int i, int j) {
​
•    while (i < j) {
​
•      int temp = nums[i];
​
•      nums[i++] = nums[j];
​
•      nums[j--] = temp;
​
•    }
​}
​
}

  1. 在排序数组中查找元素的第一个和最后一个位置

思路:

(1) 从前往后依次遍历,找到目标值在数组中第一次出现的位置,终止此次循环。

(2) 从后往前遍历,找到目标值在数组中最后一次出现的位置,终止此次循环。

代码:

 class Solution {
​
•    public int[] searchRange(int[] nums, int target) {
​
•      int start = -1;
​
•      int end = -1;
​
•      int length = nums.length;
​
•      // 查找开始位置
​
•      for (int i = 0; i < length; i++) {
​
•        if (nums[i] == target) {
​
•          start = i;
​
•          break; // 找到第一个位置后可以结束
​
•        }
​
•      }
​
•      // 查找结束位置
​
•      for (int i = length - 1; i >= 0; i--) {
​
•        if (nums[i] == target) {
​
•          end = i;
​
•          break; // 找到最后一个位置后可以结束
​
•        }
​
•      }
​
•      return new int[] {start, end};
​
•    }
​}

  1. 字符串解码

思路:

(1) 从前往后遍历字符串,如果当前字符是字母,则直接添加到res字符串中。

(2) 如果当前字符是'[',则将当前res存储到特定栈中,并将multi也存储到对应的特定栈中。并重置res和multi。

(3) 如果当前字符是']',则将栈中的res和multi都取出来,其中res重复multi次,添加到一个temp字符串中。

(4) 如果当前字符是数字,则将multi的值*10再加上当前的数字,乘以10的目的是为了当数字为多位数时,确保正确拼接为一个正确的数字。

代码:

class Solution {
​public String decodeString(String s) {
​
•    StringBuilder res = new StringBuilder();  // 存储当前解码的结果
​
•    int multi = 0;               // 当前重复次数
​
•    LinkedList<Integer> stack_multi = new LinkedList<>();  // 存储之前的重复次数
​
•    LinkedList<String> stack_res = new LinkedList<>();    // 存储之前的解码结果
​
•    // 遍历每个字符
​
•    for(Character c : s.toCharArray()) {
​
•      if(c == '[') {
​
•        // 遇到 '[' 时,先保存当前的重复次数和解码结果
​
•        stack_multi.addLast(multi);  // 保存当前的重复次数
​
•        stack_res.addLast(res.toString());  // 保存当前解码结果
​
•        multi = 0;  // 重置重复次数
​
•        res = new StringBuilder();  // 重置解码结果
​
•      }
​
•      else if(c == ']') {
​
•        // 遇到 ']' 时,进行解码操作
​
•        StringBuilder temp = new StringBuilder();
​
•        int cur_multi = stack_multi.removeLast();  // 获取并移除之前保存的重复次数
​
•        for(int i = 0; i < cur_multi; i++) {
​
•          temp.append(res);  // 将当前结果重复指定次数
​
•        }
​
•        res = new StringBuilder(stack_res.removeLast() + temp);  // 拼接之前的解码结果和重复部分
​
•      }
​
•      else if(c >= '0' && c <= '9') {
​
•        // 如果是数字,将其转换为数字并更新重复次数
​
•        multi = multi * 10 + Integer.parseInt(c + "");
​
•      }
​
•      else {
​
•        // 如果是字母,直接添加到当前的解码结果中
​
•        res.append(c);
​
•      }
​
•    }
​
•    return res.toString();  // 返回最终解码的字符串
​}
​
}
http://www.lryc.cn/news/534426.html

相关文章:

  • vue动态table 动态表头数据+动态列表数据
  • 1.3 GPT vs BERT 终极选择指南:从架构差异到企业级落地策略
  • python-leetcode 23.回文链表
  • 食品饮料生产瓶颈?富唯智能协作机器人来 “破壁”
  • Golang GORM系列:GORM CRUM操作实战
  • C++ labmbd表达式
  • 《大规模动画优化(一):GPU 顶点动画的生成》
  • 【前端】几种常见的跨域解决方案
  • 如何在WinForms应用程序中读取和写入App.config文件
  • 【分布式理论7】分布式调用之:服务间的(RPC)远程调用
  • 人工智能应用-智能驾驶精确的目标检测和更高级的路径规划
  • dynamic_cast和static_cast和const_cast
  • DEEPSEEK与GPT等AI技术在机床数据采集与数字化转型中的应用与影响
  • 高速存储文章目录
  • 车载测试工具 --- CANoe VH6501 进行Not Acknowledge (NAck) 测试
  • 【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面
  • Linux运维——用户管理
  • mac下dify+deepseek部署,实现私人知识库
  • Linux中设置开机运行指令
  • IDEA中列举的是否是SpringBoot的依赖项的全部?在哪里能查到所有依赖项,如何开发自己的依赖项让别人使用
  • Ollama命令使用指南
  • LIMO:上海交大的工作 “少即是多” LLM 推理
  • Android studio怎么创建assets目录
  • 常见的前端框架和库有哪些
  • 【批量获取图片信息】批量获取图片尺寸、海拔、分辨率、GPS经纬度、面积、位深度、等图片属性里的详细信息,提取出来后导出表格,基于WPF的详细解决方案
  • 数据结构与算法(test3)
  • 基于Python的人工智能驱动基因组变异算法:设计与应用(下)
  • C++ 顺序表
  • Mac(m1)本地部署deepseek-R1模型
  • Docker 部署 redis | 国内阿里镜像