数据结构算法题-数组字符串

1.查找最小的 k 个元素(数组) 题目:输入 n 个整数,输出其中最小的 k 个。
例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4。

k_big.c

2.查找最小的 k 个元素(数组) 题目:输入 n 个整数,输出其中最小的 k 个。

例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4

k_big.c

3.判断一个字符串是否对称

 1 bool CheckStr(const char* str)
 2 {
 3 int Len = strlen(str);
 4 for (int i = 0; i < Len; ++i)
 5 {
 6     if (*(str + i) != (*(str + (Len - i - 1))))
 7     return false;
 8 }
 9 return true;
10 }
11
12 int  SymmetricString( const char *ch)
13 {
14     int len=strlen(ch);
15     int i=0,j=len-1;
16     if(len%2!=0)
17         return 0;
18     for(i=0,j=len-1;i<=len/2;i++,j--)
19     {
20         if(ch[i]!=ch[j])
21             return 0;
22     }
23     return 1;
24 }

CheckStr.c

4. 题目:定义 Fibonacci 数列如下:
   / 0                  n=0
 f(n)= 1             n=1
 \ f(n-1)+f(n-2)  n=2
输入 n,用最快的方法求该数列的第 n 项。

 1 #include <stdio.h>
 2 //递归
 3 int Fibonacci(int n)
 4 {
 5     switch(n)
 6     {
 7     case 0:
 8         return 0;
 9     case 1:
10         return 1;
11     default:
12         return Fibonacci(n - 1) + Fibonacci(n - 2);
13     }
14 }
15
16 //非递归
17 int nonrecursionFibonacci(int n)
18 {
19     int a = 0, b = 1;
20     int i;
21     switch(n)
22     {
23     case 0:
24         return 0;
25     case 1:
26         return 1;
27     default:
28         {
29             for (i = 0; i < n - 1; i++)
30             {
31                 int c = a + b;
32                 a = b;
33                 b = c;
34             }
35             return b;
36         }
37     }
38 }
39
40 int main()
41 {
42     int f = Fibonacci(4);
43     int ff = nonrecursionFibonacci(4);
44     printf("%d,%d",f,ff);
45     return 0;
46 }

Fibonacci.c

时间: 2024-10-24 16:02:50

数据结构算法题-数组字符串的相关文章

算法题——数组内有序对的最大距离

题目:给定一个数组A,对于下标i < j,有A[i] < A[j],求j - i 的最大值. 思路:先正序遍历一次,利用一个辅助数组,记录每个元素的左边子数组中最小值的下标:然后倒序遍历,维持两个指针,初始都指向最后一个元素,通过移动两个指针,找出最大距离. 代码: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int maxDist(int num[], int n) 6 {

面试10大算法题汇总-字符串和数组7

14.实现strStr():搜索一个字符串在另一个字符串中的第一次出现的位置 例: #include <stdio.h> #include <string.h> int main () { char str[] ="This is a simple string"; char * pch; pch = strstr (str,"simple"); cout<<(*pch)<<endl; return 0; } 输出:s

面试10大算法题汇总-字符串和数组1

题目链接: http://blog.csdn.net/xiaoranlr/article/details/43963933 1. 计算逆波兰式 题目要求如下: ["2","1", "+", "3", "*"] -> ((2 + 1) * 3)-> 9 ["4","13", "5", "/", "+"

面试10大算法题汇总-字符串和数组6

11.String转int,即atoi函数实现. 主要考虑以下几种情况: 1.      String为空 2.      String中存在非数字字符,如空白字符,abcd等 3.      String的正负 Code: public class test { public static int atoi(String str) { if (str == null || str.length() < 1) return 0; str = str.trim(); char flag = '+'

面试10大算法题汇总-字符串和数组2

3.分词 给定一个字符串s和一个单词字典,确定s是否可被字典分解为多个单词 如: 给定s="leetcode" dict=["leet","code"] 由于"leetcode"可被分割为"leet code",返回True 最简单的一种方法是遍历dict中的单词,查看其是否在s的起始位置,若在则继续查看s剩下部分,否则返回false import java.util.HashSet; import jav

面试10大算法题汇总-字符串和数组8

17.最长连续序列 给定一个无序数组,求最长连续序列的长度.要求负责度为O(n) 例:数组num:[100, 4, 200,1, 3, 2]的最长连续序列为[1,2,3,4],长度为4 解法一:建立一个bool数组,用于表示该数字是否存在,之后求数组中连续为true的最长值即可.在[100, 4, 200, 1, 3, 2]中,其最小值为1,最大值为200,因此建立长度为iMax-iMin+1(200-1+1) = 200的数组bExist,之后对数组赋值,其中bExist[100 - 1] ,

面试10大算法题汇总-字符串和数组5

7.合并重复区间 给定一组区间,合并其中重复的.例: 给定[1,3],[0,7],[2,6],[8,10],[15,18],其中[1,3]与[0,7]及[2,6]区间有重复,因此将其合并成一个区间:[0,7].最终返回: [0,7],[8,10],[15,18]. 书上的解法用到了Comparator,其大致思路如下: 1.      创建一个间隔类Interval,其成员变量为start和end,分别表示间隔区间的开始和结束. 2.      创建一个Solution类,其包含merge方法,

面试10大算法题汇总-字符串和数组9

20.寻找2D矩阵 给定一个从左到右从上到下递增的m*n矩阵,判断target是否在矩阵中 例: [ [1,  3,  5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] Target=3 返回:true 思路:二分查找 Code: public class test { public static boolean searchMatrix(int[][] matrix, int target) { if (matrix == null || matrix.l

面试10大算法题汇总-字符串和数组3

6.匹配正则表达式 编写函数boolisMatch(String s, String p),完成正则表达式中"."和"*"的功能.例: isMatch("aa","a")return false isMatch("aa","aa")return true isMatch("aaa","aa")return false isMatch("a