新闻详情

新闻详情

首页 / 资讯中心 / 详情

DeepSeek LeetCode 3171. 找到按位或最接近 K 的子数组 C语言实现

发布时间:2026/9/3 18:05:31来源:尧图网络
DeepSeek    LeetCode 3171. 找到按位或最接近 K 的子数组 C语言实现
以下是 LeetCode 3171 的 C 语言实现。C 语言需要手动管理动态数组核心思路与 Java 版本完全一致维护以当前元素结尾的所有不同或值。c#include stdio.h#include stdlib.h#include limits.h// 存储 (orValue, leftIndex)typedef struct {int orValue;int leftIdx;} Pair;int minimumDifference(int* nums, int numsSize, int k) {// prev 存储上一个右端点产生的不同或值Pair* prev (Pair*)malloc(numsSize * sizeof(Pair));int prevSize 0;int ans INT_MAX;for (int i 0; i numsSize; i) {// cur 存储当前右端点产生的不同或值Pair* cur (Pair*)malloc(numsSize * sizeof(Pair));int curSize 0;// 当前元素单独成为一个子数组cur[curSize].orValue nums[i];cur[curSize].leftIdx i;curSize;// 合并之前的或值for (int j 0; j prevSize; j) {int newVal prev[j].orValue | nums[i];// 去重只保留不同的 orValueif (cur[curSize - 1].orValue ! newVal) {cur[curSize].orValue newVal;cur[curSize].leftIdx prev[j].leftIdx;curSize;}}// 更新答案for (int j 0; j curSize; j) {int diff abs(cur[j].orValue - k);if (diff ans) {ans diff;}}// 释放 prev 并更新为 curfree(prev);prev cur;prevSize curSize;}free(prev);return ans;}内存优化版本避免频繁 malloc频繁的 malloc/free 会影响性能。可以预分配两个二维数组交替使用cint minimumDifference(int* nums, int numsSize, int k) {// 每个右端点最多产生 32 种不同或值int 型 31 个有效位int prevVals[32], prevLefts[32];int prevSize 0;int curVals[32], curLefts[32];int ans INT_MAX;for (int i 0; i numsSize; i) {int curSize 0;// 当前元素单独成为子数组curVals[curSize] nums[i];curLefts[curSize] i;curSize;// 合并 prev 中的或值for (int j 0; j prevSize; j) {int newVal prevVals[j] | nums[i];if (curVals[curSize - 1] ! newVal) {curVals[curSize] newVal;curLefts[curSize] prevLefts[j];curSize;}}// 更新答案for (int j 0; j curSize; j) {int diff abs(curVals[j] - k);if (diff ans) ans diff;}// 交换 cur 和 prev为下一轮准备// 方式1直接复制数组prevSize curSize;for (int j 0; j curSize; j) {prevVals[j] curVals[j];prevLefts[j] curLefts[j];}}return ans;}核心要点说明特性 说明时间复杂度 O(n·logU)U max(nums) ≤ 2×10⁹logU ≤ 31空间复杂度 O(logU)使用固定大小 32 的数组去重条件 curVals[curSize-1] ! newVal确保只保留不同的 or 值leftIdx 作用 虽然这里没用于剪枝但保留它可用于其他扩展需求如求最小区间长度示例验证c// 测试代码#include stdio.hint main() {int nums1[] {1, 2, 4};int nums2[] {1, 2, 4};printf(%d\n, minimumDifference(nums1, 3, 3)); // 输出 0printf(%d\n, minimumDifference(nums2, 3, 6)); // 输出 0return 0;}为什么不用滑动窗口按位或 不具有单调性· 子数组 [l, r] 向右扩展时or 值单调不减 ✅· 但向左收缩时or 值不一定减小可能保持不变或减少多个位无法通过双指针维护因此本题的标准解法是枚举每个右端点下的所有不同 or 值利用 or 值种类很少 的性质实现高效求解。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python数据类型全解析:可变对象、类型转换与工程避坑指南 2026/9/4 9:18:22

Python数据类型全解析:可变对象、类型转换与工程避坑指南

之前带团队做 Python 数据清洗小工具时,有个同学对着报错看了一下午,最后发现是 input() 返回的字符串直接参与了数学运算。代码逻辑明明很顺,却在运行时不断抛 TypeError 。后来我把项目里的数据类型梳理了一遍,把隐式转换、…

阅读更多 →
【无标题】【红队实战】当渗透测试遇上 AI 大模型:如何利用 ChatGPT 自动化编写高危漏洞 PoC? 2026/9/4 9:18:22

【无标题】【红队实战】当渗透测试遇上 AI 大模型:如何利用 ChatGPT 自动化编写高危漏洞 PoC?

摘要: 每次爆发高危 0day/1day 漏洞,红队人员都要熬夜分析复现、手撸 PoC。在这个大模型时代,你的工作流是时候升级了。本文将手把手教你如何利用 AI 大模型(以 ChatGPT/DeepSeek 为例),结合本地自动化脚本…

阅读更多 →
低压电容柜温控器接线与调试全流程实战指南 2026/9/4 9:18:22

低压电容柜温控器接线与调试全流程实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
秋叶ComfyUI V9.5整合包:跨平台一键部署AI绘画工作流 2026/9/4 9:18:22

秋叶ComfyUI V9.5整合包:跨平台一键部署AI绘画工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
基于AI代码模型的GitHub PR自动化安全审查实战指南 2026/9/4 9:18:22

基于AI代码模型的GitHub PR自动化安全审查实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Ice 菜单栏管理实操:把塞不下的图标统统收起来 2026/9/4 9:15:20

Ice 菜单栏管理实操:把塞不下的图标统统收起来

Ice 菜单栏管理实操:把塞不下的图标统统收起来 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Ice 是一款面向 macOS 的菜单栏管理工具:把不想看的图标拖进"隐藏区"…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞