- 翼灵例会分享
- 最大子列和问题
- (在线处理)
- 二分查找( 时间复杂度log(n) )
- 例题:
- 字符串去重并按ASCII码值顺序输出
- 浏览器插件
- 笔记工具
例如有一个数组:
[4,-3,5,-2,-1,-1,2,6,-2]
对于该数组,其最大子列和为11(从第一个元素到第七个元素)。
int MaxSubseqSum( int A[], int N )
{
int ThisSum, MaxSum;
int i;
ThisSum = MaxSum = 0;
for( i = 0; i < N; ++i )
{
ThisSum += A[i]; //向右累加
if( ThisSum > MaxSum )
MaxSum = ThisSum; //发现更大和则更新当前结果
else if( ThisSum < 0 ) //若当前子列和为负
ThisSum = 0; //则不可能使后面的部分和增大,抛弃之
}
return MaxSum;
}
二分查找( 时间复杂度log(n) )
例题:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
提示:
- 你可以假设
nums
中的所有元素是不重复的。 n
将在[1, 10000]
之间。nums
的每个元素都将在[-9999, 9999]
之间。
int search(int *nums,int numsSize,int target)
{
int left = 0,right = numsSize-1,mid = 0;
while( left <= right )
{
mid = left + ( right - left )/2; //防止数据溢出
if( nums[mid] == target )
{
return mid;
}else if( nums[mid] <target )
{
left = mid + 1;
}else{
right = mid - 1;
}
}
return -1;
}
二分查找适用范围:
(1)该数组数据量大;
(2)该数组已排序;
(3)一般要求找到的是一个值或一个位置
字符串去重并按ASCII码值顺序输出/*利用哈希表思想,把字符串放到一个int数组里,数组下标对应字符的ASCII码值*/
#include
#include
int main()
{
int res[128]={0}; //共有128个ASCII码值
char str[1000];
gets(str);
int i = 0,j = 0;
for( i = 0;i < strlen(str);++i )
{
res[str[i]]++; //字符的ASCII码对应的res下标处值加1
}
while( j < 128 )
{
if( res[j] != 0 )
{
printf("%c",j);
}
++j;
}
return 0;
}
浏览器插件
- uBlock Origin(一款高效的网络请求过滤工具,拦截广告,让你的页面简洁舒适)
- ColorZilla(一款取色插件,浏览网站时,发现网站上的一些背景图片颜色很好看时,可以用其取色,同时其还可以配色,直接将配色代码拷贝,然后粘贴到网站代码中)
- iTab(一个让你不受广告干扰的个性化卡片起始页插件,好看好用的自定义式新标签页扩展)
Typora(一款轻量级Markdown编辑器,支持Markdown语法的文本编辑,笔记简洁美观)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)