hwod机考练习

OpenCV 算法梳理分析 本文系统梳理了OpenCV的核心算法体系,从模块架构到具体函数实现。OpenCV采用分层设计,包含基础I/O、图像处理、特征检测、视频分析和智能算法五大层次,所有模块基于统一的Mat数据结构。重点分析了imgproc模块的8类图像处理算法(滤波、形态学、阈值化等),features2d模块的特征检测与匹配流程(SIFT/ORB等算法对比),以及objdetect、video、calib3d等模块的核心功能。针对不同场景提供了算法选型建议,如高斯噪声推荐GaussianBlur,特征匹配推荐ORB+Flann 阅读详情

不一定正确,都是自己凭感觉写的辣鸡代码

Day 1

题目详情 - 求字符串中所有整数的最小和 - Hydro

评测结果两个运行时错误,别的用例都过了,看不到用例详情不知道哪里写错了,先不管了就这样吧

估计是因为没用BigInteger,题目没说数字范围

public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    getResult(scanner.nextLine());
  }

  static void getResult(String s) {
    // int res = 0;
    BigInteger res = new BigInteger("0");
    char[] chars = s.toCharArray();
    int i = 0;
    while (i < chars.length) {
      char c = chars[i];
      if (isNum(c)) {
        int j = i;
        for (; j < chars.length && isNum(chars[j]); j++) {
          // res += Integer.parseInt(String.valueOf(chars[j]));
          // 用BigInteger!!
          res = res.add(new BigInteger(String.valueOf(chars[j])));
        }
        i = j;
        continue;
      }
      if (c == '-') {
        int j = i + 1;
        if (j > chars.length - 1) break;
        for (; j < chars.length && isNum(chars[j]); j++) {}
        if (j > i + 1) {
          String subString = s.substring(i + 1, j);
          // int numberToDecrease = Integer.parseInt(subString);
          // res -= numberToDecrease;
          // 用BigInteger!!
          res = res.subtract(new BigInteger(subString));
          i = j;
        } else i++;
        continue;
      }
      i++;
    }
    System.out.println(res);
  }

  static boolean isNum(char c) {
    return c >= '0' && c <= '9';
  }
}

Day 2

题目详情 - 求满足条件的最长子串的长度 - Hydro

public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    getResult(scanner.nextLine());
  }

  static void getResult(String input) {
    char[] chars = input.toCharArray();
    int length = 0;
    for (int i = 0; i < chars.length; i++) {
      char c = chars[i];
      if (isNum(c)) {
        int letterCount = 0;
        int j = i;
        for (; j < chars.length; j++) {
          if (!isNum(chars[j])) letterCount++;
          if (letterCount > 1) break;
        }
        if (j > i) {
          if (letterCount > 0) length = Math.max(length, j - i);
          else if (i > 0 && !isNum(chars[i - 1])) length = Math.max(length, j - i + 1);
        }
      }
    }
    System.out.println(length == 0 ? -1 : length);
  }

  static boolean isNum(char c) {
    return c >= '0' && c <= '9';
  }
}

Day 3

题目详情 - 字符串分割(二) - Hydro

其实可以滑动窗口,自己只想到了暴力解

public class Main {
  static final int CHAR_OFFSET = 'a' - 'A';

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int k = scanner.nextInt();
    String input = scanner.next();
    scanner.close();

    String[] split = input.split("-");
    StringBuilder sb = new StringBuilder();
    StringBuilder head = new StringBuilder(split[0]);
    for (int i = 1; i < split.length; i++) {
      sb.append(split[i]);
    }
    int count = 0;
    for (int i = 0, j = 0; i < sb.length(); i++) {
      count++;
      if (count == k) {
        transform(sb, j, i + 1);
        if (i < sb.length() - 1) sb.insert(++i, '-');
        j = i;
        count = 0;
      } else if (i == sb.length() - 1) {
        transform(sb, j, i + 1);
      }
    }
    if (sb.length() > 0) head.append('-').append(sb);
    System.out.println(head);
  }

  static void transform(StringBuilder sb, int start, int end) {
    int upperCount = 0, lowerCount = 0;
    ArrayList<Integer> upperIndices = new ArrayList<>();
    ArrayList<Integer> lowerIndices = new ArrayList<>();
    for (int i = start; i < end; i++) {
      char c = sb.charAt(i);
      if (c >= 'A' && c <= 'Z') { // uppercase
         upperCount++;
         upperIndices.add(i);
      }
      if (c >= 'a' && c <= 'z') { // lowercase
        lowerCount++;
        lowerIndices.add(i);
      }
    }
    if (upperCount > lowerCount) {
      lowerIndices.forEach(i -> sb.setCharAt(i, (char) (sb.charAt(i) - CHAR_OFFSET)));
    }
    if (upperCount < lowerCount) {
      upperIndices.forEach(i -> sb.setCharAt(i, (char) (sb.charAt(i) + CHAR_OFFSET)));
    }
  }
}

题目详情 - 玩牌高手 - Hydro

动态规划

public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    getResult(scanner.nextLine());
    scanner.close();
  }

  static void getResult(String input) {
    String[] nums = input.split(",");
    int[] max = new int[nums.length];
    max[0] = Math.max(Integer.valueOf(nums[0]), 0);
    for (int i = 1; i < nums.length; i++) {
      max[i] = Math.max(max[i - 1] + Integer.valueOf(nums[i]), i <= 2 ? 0 : max[i - 3]);
    }
    System.out.println(max[max.length - 1]);
  }
}

题目详情 - 欢乐的周末 - Hydro

public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int height = scanner.nextInt();
    int width = scanner.nextInt();
    // 填充矩阵
    int[][] matrix = new int[height][width];
    for (int i = 0; i < height; i++) {
      for (int j = 0; j < width; j++) {
        matrix[i][j] = scanner.nextInt();
      }
    }
    scanner.close();
    
    // 用于便捷计算任意一点朝上/下/左/右移动后的坐标
    int[][] offsets = { {0, 1}, {1, 0}, {-1, 0}, {0, -1} };
    // 华为二人所在坐标
    List<Integer> huawei = new ArrayList<>();
    // 馆子坐标
    List<Integer> joints = new ArrayList<>();
    // 并查集,里面放矩阵中各点的坐标的整数表示
    UnionFind unionFind = new UnionFind(width * height);
   
    // 遍历矩阵 
    for (int i = 0; i < matrix.length; i++) {
      for (int j = 0; j < matrix[i].length; j++) {
        int n = matrix[i][j];
        if (n == 1) continue; // 遇到障碍物跳过
        int pos = j + i * width; // 二维坐标转为一个整数,作为存在于并查集中的位置
        if (n == 2) huawei.add(pos);
        if (n == 3) joints.add(pos);
        // 对于矩阵中任意一点,检查它与它上下左右各点的连通性
        for (int[] offset : offsets) {
          int newI = i + offset[0];
          int newJ = j + offset[1];
          if (newI >= 0 && newJ >=0 && newI < matrix.length && newJ < matrix[newI].length) {
            // 若上/下/左/右点的坐标合法,且与原点连通(值不为1),就在并查集中将其与原点融合
            if (matrix[newI][newJ] != 1) {
              int newPos = newJ + newI * width;
              unionFind.union(newPos, pos);
            }
          }
        }
      }
    }

    // 华为两人若不连通说明吃不到一块去,return
    if (!unionFind.isSameRoot(huawei.get(0), huawei.get(1))) {
      System.out.println(0);
      return;
    }

    int sum = 0;

    // 遍历馆子,如果馆子跟华为其中一人联通说明能吃饭,加一
    for (int pos : joints) {
      if (unionFind.isSameRoot(pos, huawei.get(0))) sum++;
    }

    System.out.println(sum);
  }

  static final class UnionFind {
    int[] arr;
    public UnionFind(int length) {
      arr = new int[length];
      for (int i = 0; i < length; i++) arr[i] = i;
    }

    public int findRoot(int e) {
      int root = arr[e];
      if (arr[root] != root) {
        arr[root] = findRoot(root);
        return arr[root];
      }
      return root;
    }

    public void union(int a, int b) {
      int rootA = findRoot(a);
      int rootB = findRoot(b);
      if (rootA != rootB) arr[rootA] = rootB;
    }

    public boolean isSameRoot(int a, int b) {
      return findRoot(a) == findRoot(b);
    }
  }
}

Day 4

题目详情 - 转盘寿司 - Hydro

public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  String line = scanner.nextLine();
  scanner.close();
  // 栈,存储{ 下标, 数值 }
  Deque<int[]> stack = new LinkedList<>();
  String[] split = line.split(" ");
  int leng = split.length;
  List<Integer> nums = Arrays.stream(split).map(Integer::valueOf).collect(Collectors.toList());
  // map存已经被处理过的数字,键是下标,值是处理后的数值
  Map<Integer, Integer> map = new HashMap<>();
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < leng; j++) {
      int curr = nums.get(j);
      // 若当前值比栈顶值小,栈顶值出栈,并将值与当前值相加,存到map,循环这一过程直到栈顶值大于等于当前值或者栈空
      while (!stack.isEmpty() && curr < stack.peek()[1]) {
        // record: { index, value }
        int[] record = stack.pop();
        map.put(record[0], record[1] + curr);
      }
      // 已经被处理过的数字就不入栈了
      if (!map.containsKey(j)) stack.push(new int[]{ j, curr });
    }
  }
  map.forEach(nums::set);
  System.out.println(nums.stream().map(String::valueOf).collect(Collectors.joining(" ")));
}

2026华为OD机考新系统真题 + 双机位C卷 + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ 2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸! 阅读详情

相关推荐

华为od机考真题-路灯问题

华为od机考真题

VAN 245

华为od机试—2026年4月机考模式改革介绍,新机考系统真题题库&tips

相信很多关注华为od的小伙伴已经知道了华为od机考改革的消息,从2026年04月01日开始,相较于之前的机考模式,产生的比较大的变动!这里把几个关键变化给关心的小伙伴们汇总说明一下。

MISAYAONE的博客 3642

2026华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,JavaScript实现。

MISAYAONE的博客 8万+

从小厂到hw,这些年走过的路

java、hw、力扣、内推

weixin_43946529的博客 1330

华为OD机考-组装最大可靠性设备-DFS(JAVA 2025B卷)

/TODO。

熊大的博客 563

华为OD面经-C++开发岗-已offer

项目问了一下,没问技术问题,其他方面问的稍微多了些,比如去年秋招到现在的状态,发展意向,职业规划这种。华为OD 2025 最新最全机试真题题库及讲解,700+真题,机考原题命中率90%以上,通过率高,A+B+C+D+E卷大全。在网络编程中,使用vector的时候需要注意什么(网络编程涉及到多线程,vector是临界资源,要往锁方向回答)8.4 HR面试,当天就通知面试通过了,但是由于心里没底,就和HR姐姐商量延迟一个星期再技术面试。8.11 HR姐姐说应聘的部门HC无了,于是就换了一个部门。

MISAYAONE的博客 567

中九电子强校考研二战失利,华为OD面试没过转测试岗有必要吗?是否值得重新三战?

​今天给大家分享的是一位粉丝的提问,中九电子强校考研二战失利,华为OD面试没过转测试岗有必要吗?用1年时间冲击稳定岗位,若失败则保底华为OD积累履历。拒绝“考研执念”,用务实策略破局!接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。计算机相关专业就业求职学习路线/offer选择/职业规划建议。)免费投稿 投稿必回。

技术Q君样:202432010的博客 765

华为OD机试-双机位C卷极速上线,真题题库&考试Tips

华为OD机试-双机位C卷极速上线,真题题库&考试Tips

MISAYAONE的博客 1994

leetcode 56合并区间

这道题你可以把它压缩成一个非常好记的思路:先排序,再逐个比较;能合并就扩右边界,不能合并就加入答案。具体来说,先用: 把所有区间按照左端点从小到大排序。排序之后,我们只需要拿“当前区间”和 里最后一个已经合并好的区间比较。如果: 说明前一个区间的右端点比当前区间左端点还小,二者没有重叠: 所以直接: 如果不满足: 那就说明: 两个区间重叠,例如: 此时左端点不用动,只需要把右端点扩大: 所以整道题可以记成: 这道题容易忘的函数/语法 含义:对整个 排序。对于:

qq_63176310的博客 227

小红书 算法一面 十一

例如 **Soft MoE** 采用这种方式,大幅提升负载均衡性,但会增加计算开销。- **熵正则化**:直接最大化门控概率分布的熵,熵越大表示分布越均匀,公式为 $\mathcal{L}_{ent} = -\frac{1}{N}\sum_{i=1}^N\sum_{k=1}^K p_{ik}\log p_{ik}$。- **核心原理**:源自 **GShard** 和 **Switch Transformer**,通过最小化专家选择概率分布的熵,迫使门控网络给每个专家分配相近的 token 数量。

XLYcmy的博客 430

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优化查找效率: 暴力法:双重循环枚举所有数对,时间复杂度O(n²),效率低但易实现。 哈希表优化:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和不足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 250

算法日常・每日刷题--<BFS>4

题目摘要: 给定一个由'X'和'O'组成的矩阵,要求捕获所有被'X'完全包围的'O'区域(即不与边界连通的区域),并将其替换为'X'。解法核心是逆向处理: 标记边界连通区域:遍历矩阵四边,对边界上的'O'进行BFS/DFS,标记所有与之连通的'O'为临时符号(如'.'),表示这些区域未被包围。 批量修改:遍历整个矩阵,将未被标记的'O'(被包围的)改为'X',同时恢复标记的'.'为'O'。 示例: 输入: [['X','X','X','X'], ['X','O','O','X'], ['X','X','O'

2503_92261635的博客 253

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 212

问答大模型技术方案算法实现-RAPTOR树构建算法与BEG集成使用

算法核心特点 递归聚类:逐层对文档块进行聚类,构建层次结构摘要生成:为每个聚类生成摘要,捕获语义信息展开树检索:将所有节点展开,直接进行向量检索层次化检索:从根节点开始,逐层深入检索灵活聚类:支持层次聚类和基于阈值的聚类自适应:根据节点数量动态调整树结构可扩展:支持自定义摘要生成器和检索策略

qq_42773521的博客 190

AI辅助芯片制造:算法与工程化落地

《国产DRAM龙头长鑫科技上市创纪录,AI技术重塑芯片制造新范式》 国产DRAM龙头企业长鑫科技7月27日登陆科创板,创下3.31万亿元市值,成为A股"一哥"。作为大陆唯一实现DRAM大规模量产的IDM企业,长鑫科技标志着国产存储产业的重要突破。随着AI算力需求激增,DRAM市场迎来高速发展期。AI技术正在深度改变芯片制造模式,在工艺仿真、缺陷检测、设备维护等环节发挥关键作用,显著提升良率和效率。长鑫科技高管推荐的新书《AI辅助芯片制造:算法与工程化落地》系统解析了AI赋能半导体制造的实战方案

weixin_43178406的博客 5207

二刷hot100-70.爬楼梯

dp数组初始化:dp[n+1];

2302_78497251的博客 44

S 曲线加减速算法完整详解(C# 原生实现,无第三方库)

S 曲线加减速是工业运动控制核心轨迹规划算法,相比梯形曲线,依靠约束加加速度 Jerk 实现加速度连续变化,有效消除机械冲击与振动。本文完整讲解七段式 S 曲线原理、阶段推演、时间预规划逻辑,剖析短行程自动裁剪等工程难点。提供无第三方依赖原生 C# 完整实现,内置运动状态机,支持正反方向运动,基于解析多项式实时求解位置、速度、加速度,无积分累积误差。代码可直接用于伺服上位机、模组轨迹发生器,亦可精简移植嵌入式平台。同时对比算法优劣与适用场景,适合工控开发、伺服调试、嵌入式运动算法学习者参考。

工业上位机开发工程师,专注C#底层算法与工控仪器开发。从零手写信号滤波、曲线拟合、机器视觉、排序与密码学哈希,纯原生实现零第三方库,附数学推导与可编译源码,可移植STM32/PLC。 935

Tokenization(分词算法):一切大语言模型的地基

本文深入解析了Tokenization(分词算法)这一大语言模型的基础技术。Tokenization将原始文本切分为模型可处理的子词单元并映射为数字ID,是模型理解文本的第一步。

2301_80194949的博客 193
上一篇: 个人浅学jdk21的virtual thread
根本戒不掉滋崩
博客等级 码龄7年 4粉丝 · 3原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值