2024年2月6日
摘要: 我们前文 我写了首诗,把二分搜索变成了默写题 详细介绍了二分搜索的细节问题,探讨了「搜索一个元素」,「搜索左侧边界」,「搜索右侧边界」这三个情况,教你如何写出正确无 bug 的二分搜索算法。 但是前文总结的二分搜索代码框架仅仅局限于「在有序数组中搜索指定元素」这个基本场景,具体的算法问题没有这么直接 阅读全文
posted @ 2024-02-06 16:49 lulixiu 阅读(7) 评论(0) 推荐(0) 编辑
  2024年2月3日
摘要: 本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。而且,我们就是要深入细节,比如不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。 另外再声明一下,对于二分搜索的每一个场景,本文还会探讨多种 阅读全文
posted @ 2024-02-03 19:44 lulixiu 阅读(2) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h> #include <string.h> int main() { int left = 0, right = 0; char s[] = "example"; // 假设有一个字符串 s while (left < right && right < strlen 阅读全文
posted @ 2024-02-03 19:01 lulixiu 阅读(4) 评论(0) 推荐(0) 编辑
  2024年2月2日
摘要: 哈希表实现 #include<stdio.h> #include<stdlib.h> #include<string.h> #define HASHTABLE_CAPACITY 20 // File: array_hash_map.c /* 键值对 int->string */ typedef st 阅读全文
posted @ 2024-02-02 16:58 lulixiu 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 合并两个有序链表 我们的 while 循环每次比较 p1 和 p2 的大小,把较小的节点接到结果链表上,看如下 GIF: 形象地理解,这个算法的逻辑类似于拉拉链,l1, l2 类似于拉链两侧的锯齿,指针 p 就好像拉链的拉索,将两个有序链表合并;或者说这个过程像蛋白酶合成蛋白质,l1, l2 就好比 阅读全文
posted @ 2024-02-02 16:57 lulixiu 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 删除有序数组中的重复项 简单解释一下什么是原地修改: 如果不是原地修改的话,我们直接 new 一个 int[] 数组,把去重之后的元素放进这个新数组中,然后返回这个新数组即可。 但是现在题目让你原地删除,不允许 new 新数组,只能在原数组上操作,然后返回一个长度,这样就可以通过返回的长度和原始数组 阅读全文
posted @ 2024-02-02 16:57 lulixiu 阅读(1) 评论(0) 推荐(0) 编辑
  2024年1月30日
摘要: 哈希表实现 #include<stdio.h> #include<stdlib.h> #include<string.h> #define HASHTABLE_CAPACITY 20 // File: array_hash_map.c /* 键值对 int->string */ typedef st 阅读全文
posted @ 2024-01-30 19:59 lulixiu 阅读(2) 评论(0) 推荐(0) 编辑
  2024年1月28日
摘要: 构造差分数组 int* constructDifferenceArray(int* nums, int length) { int* diff = (int*)malloc(length * sizeof(int)); diff[0] = nums[0]; for (int i = 1; i < l 阅读全文
posted @ 2024-01-28 20:24 lulixiu 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 一维数组中的前缀和 https://leetcode.com/problems/range-sum-query-immutable/description/ 区域和检索 #include <stdio.h> #include <stdlib.h> // 定义 NumArray 结构体 typedef 阅读全文
posted @ 2024-01-28 19:36 lulixiu 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 代码随想录 移除元素。不设置虚拟头节点,分类讨论。 struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode* temp; // 当头结点存在并且头结点的值等于val时 while (head 阅读全文
posted @ 2024-01-28 19:35 lulixiu 阅读(3) 评论(0) 推荐(0) 编辑