第一个只出现一次的字符,josephus环,最大子数组和

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXINT 0x7fffffff
#define MININT 0X80000000
//字符串中第一个只出现一次的字符
char firstSingle(char *str)
{
	int a[255];
	memset(a, 0, 255 * sizeof(int));
	char *p = str;
	while (*p != ‘\0‘){
		++a[*p];
		++p;
	}
	p = str;
	while (*p != ‘\0‘){
		if (a[*p] == 1) return *p;
		++p;
	}
	return ‘\0‘;
}
//josephus问题 f(n,m)=(f(n-1,m)+m)%n,迭代求解最后一个数的原始数
int joseph(int n, int m)
{
	int fn = 0;
	for (int i = 2; i <= n; ++i)
		fn = (fn + m) % i;
	return fn;
}

//最大子数组和
int maxSubArraySum(int *a, int n, int &b, int &e)
{
	int p, sum, maxSum;
	p = sum = 0;
	maxSum = MININT;
	for (int i = 0; i < n; ++i){
		if (sum < 0){
			sum = a[i];
			p = i;
		}
		else sum += a[i];
		if (sum > maxSum){
			maxSum = sum;
			b = p;
			e = i;
		}
	}
	return maxSum;
}
int main()
{
	char str[] = "abaccdeff";
	printf("%c\n", firstSingle(str));
	printf("%d\n", joseph(5, 3));
	int a[] = { 13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7 };
	int len, b, e;
	len = maxSubArraySum(a, 16, b, e);
	printf("the maxSubArray is :\n");
	for (int i = b; i <= e; ++i)
		printf("%d\t", a[i]);
	printf("\nthe maxSubArraySum is : %d\n", len);
}

  

时间: 2024-10-19 15:39:34

第一个只出现一次的字符,josephus环,最大子数组和的相关文章

在字符串中,寻找第一个只出现一次的字符

在字符串中,寻找第一个只出现一次的字符,如str="abddggdbacdd", 结果是c 三种方法: 1. 使用字符字典数组,每个元素是一个结构体,第一个字段记录字符出现的次数,第二个字段记录该字符在字符串中第一次出现的位置, 先遍历一遍字符串,对字符字典数组赋值,然后遍历一遍字符字典数组,找到第一个字段为1,且位置最小的字符即为需要寻找的字符.如下: struct node{ int num; //出现次数 int index; //首次出现的位置 }; char str[1000

求字符串中第一个只出现一次的字符

问题描述:给定一个字符串,假设字符串中只包含字母和数字,求出这个字符串中第一个只出现一次的字符. 分析:这个题目想要做出来还是比较简单的,关键是如何用高效的方法求解.这里我提供两种方法: 解法一:蛮力法.具体思想为,从第一位开始,拿每一位和后面的每一位进行比较,如果没有出现,则直接输出这个字符. 如果出现,则从第二位开始,再和后面的每一位进行比较,依次类推. 算法的时间复杂度为O(n^2). 解法二:哈希法.采用两次扫描即可实现.需要提前构建一个哈希表,把字符当成key值,把出现的次数当成val

35 - 找出字符串中第一个只出现一次的字符

在一个字符串中找到第一个只出现一次的字符. 如输入"abaccdeff",输出'b' 解析: 使用一个数组,记录每个字符出现的次数,最后遍历计数数组,第一个个数为 1 的即为结果. 由于字符char,只有8 bit, 只有255种可能,因此只需声明一个255大小的数组. 遍历一次字符串,遍历2次计数数组:时间复杂度O(n) 空间占用255*int = 512 Byte,是一个固定大小:空间复杂度O(1) 当需要统计某个或某些字符是否出现或出现在字符串中的次数时,可以通过数组实现一个简易

【c语言】第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符

// 第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符. // 如输入"abaccdeff",则输出'b'. #include <stdio.h> #include <string.h> char find_one(char *str) { int a[256]; int len = strlen(str); int i = 0; memset(a, 0, sizeof(a)); for (i = 0; i<len; i++) { a[st

找出字符串中第一个只出现一次的字符

find the first unique character in  a string and you can just traverse this string only one time. if there is no such character, just return '#' and '#' will not appear in the string, else return the character you find. for example: "aAbBABac",

编程算法 - 第一个只出现一次的字符 代码(C)

第一个只出现一次的字符 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 在字符串中找出第一个只出现一次的字符. 字符是char类型, 所以匹配256种可能, 采用hash表, 计算出现的次数, 再找到第一次出现的字符. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #i

第一个只出现一次的字符

在字符串中找出第一个只出现一次的字符.如输入:"aabcdc",则输出b . 思路:我们可以把数组当做一个简单的哈希表来用,把每个字母的ASCII码值作为在数组中的位置(下标),数组中存储的是该字符出现的次数.这样我们就创建了一个以字符ASCII码为健值的哈希表. 具体代码如下: 1 char FirstNotRepeatingChar(char* pstr) 2 { 3 if (pstr == NULL) 4 { 5 return '\0'; 6 } 7 const int Hash

经典算法学习——第一个只出现一次的字符

这同样是剑指Offer中的很经典的一道面试题.题目描述为:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.  一开始大家就会想到最简单的方法就是每访问到一个字符的时候,与后面的每一个字符去进行比较,若没有发现相同的元素,那么该元素就是第一个只出现一次的字符.这样的复杂度为O(n^2).   显然这样的效率不高. 这道题的大方向就是一题查找算法,常见的查找算法为顺序查找,二分查找,哈希查找.比较适合这道题的是哈希查找.首先我们可以建立一个256长度的数组

时间空间效率的平衡:第一个只出现一次的字符位置

在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置 import java.util.LinkedHashMap; public class Solution { public int FirstNotRepeatingChar(String str) { LinkedHashMap<Character, Integer> map = new LinkedHashMap<Character, Integer>

第一个只出现一次的字符位置

题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 1 class Solution { 2 public: 3 int FirstNotRepeatingChar(string str) { 4 int len = str.length(); 5 if (len == 0) 6 { 7 return -1; 8 } 9 map<char,int> mm; 10 for (int i =