数据结构与算法
金同学是我的光
这个作者很懒,什么都没留下…
展开
-
二分查找的四大变形问题(一)
二分查找的四大变形问题(一) 问题描述 查找第一个值等于给定值的元素,即数组中有重复的元素,直接使用二分查找到的可能不是第一个出现的元素,改写算法使得返回的是第一个出现的待查元素 我的思路 正常使用二分查找,找到待查元素的索引 index,然后比较a[index-1] == a[index],若相等index = index-1,然后接着比较下去,直到 a[index] != a[index-1],若不等则直接返回index. 代码(C++) #include <iostream> using原创 2021-03-29 23:25:59 · 92 阅读 · 0 评论 -
二分查找的递归实现与非递归实现
二分查找的递归实现与非递归实现 非递归实现 算法思路: head,tail,mid均表示数组的下标,每次比较a[mid]与value的大小来更新head,tail的值 若a[mid]=value,return mid; 若a[mid]>value,tail=mid-1;否则head=mid+1 循环的推出条件是head <= tail tips: 为了防止 mid = (head+tail)/2 过程中整数溢出,采用mid = head + (tail-head)/2,先做除法,再加上一个不原创 2021-03-29 22:36:06 · 125 阅读 · 0 评论 -
leetcode 05 最长回文子串——中心扩展法
最长回文子串——中心扩展法 解法思路 首先考虑到从中心向两边扩展的两种情况,一种是对称中心就是某个元素,另一种是对称中心在两个元素之间。所以中心扩展函数的形参列表中有两个指针,分别向前和向后搜索。依次遍历字符串中的每个字符时,分两种情况,第一种是以当前字符为中心,则传入的头尾指针指向的都是当前字符;第二种情况是头指针指向当前字符,尾指针指向当前字符的后一个字符。比较这两种返回的字符串长度,去较长的那一个保留。 所以在设计中心扩展函数的时候就要考虑到这一点,中心扩展函数中有两个指针(head和tail),h原创 2021-03-28 21:33:49 · 139 阅读 · 0 评论 -
最长回文子串(一)暴力法求解
LeetCode 05 最长回文子串(一)暴力法求解 题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s = “cbbd” 输出:“bb” 示例 3: 输入:s = “a” 输出:“a” 示例 4: 输入:s = “ac” 输出:“a” 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成 来源:力扣(LeetCode)原创 2021-03-19 22:42:35 · 407 阅读 · 0 评论