数组/字符串
IvyYin
达则兼济天下
展开
-
归并排序算法
归并排序是一种较为常用的排序算法,其时间复杂度最坏情况和平均情况均为nlgn,与快速排序相同,它也是一种基于分治思想的排序算法。 它的基本思路是把数组分成A、B两个组,如果这两组的数据是有序的,那么就可以对这两组数据进行合并,继而完成排序。 那么,最关键的问题就变成了如何使得A、B两组数据有序呢?归并排序的思想就是把A、B两组数据分别再分成两组,依次类推,直到小组数据只有一个的时候...原创 2017-08-02 10:25:00 · 358 阅读 · 0 评论 -
蓄水池问题
题目描述: 给出一个数据流,这个数据流的长度很大或者未知,并且对该数据流中数据只能访问一次。请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等。 或者也可以这么说: 要求从N个元素中随机的抽取k个元素,其中N的大小未知。解题思路: 用到的方法为蓄水池抽样算法(reservoid sampling)。具体的思路是:先初始化一个集合,集合中有k个元素,将此集合作为蓄水池。然后...原创 2018-09-05 20:34:19 · 2535 阅读 · 0 评论 -
不使用新的变量交换两个变量的值
解题思路:加减法异或都很简单,思路很新奇# 加减法def swap(a, b): a = a + b b = a - b a = a - b return a,b# 异或def swap(a, b): a = a ^ b b = a ^ b a = a ^ b return a, b...原创 2018-09-05 20:28:15 · 685 阅读 · 0 评论 -
跳台阶
题目一:n阶台阶,每次只能跳2阶或者3阶,一共有多少种跳法? 分析:第n阶可以是第n-2阶跳2阶;第n阶可以是第n-3阶跳3阶;因此有 f(n) = f(n-2) + f(n-3)int jump(int n){ if(n < 2) return 0; if(n == 2) return 1; if(n == 3)...原创 2018-08-26 00:05:59 · 137 阅读 · 0 评论 -
最长递增子序列的长度(编程之美)
题目描述:编程之美2.16中,求数组最长递增子序列的长度,例如数组为:1,-1,2,-3,4,-5,6,-7,那么最长递增序列是:1,2,4,6,长度是4.可以看出,子序列不一定是连续的解题思路:动态规划问题;使用 i 表示向前遍历的位置,当 i=1时,序列为 1,长度为1;当 i=2时,序列为 1 或者 -1,长度仍为1;当 i=3时, 序列为 1,2或者 -1,2,长...原创 2018-08-26 17:18:55 · 5551 阅读 · 0 评论 -
atoi:char类型转换成int类型
C++中有函数atoi()可以实现char类型与int类型的转换,我们也可以使用char类型减去’0’的方法得到int型数值的某一位,然后根据其所在位置(个、十、百….)求得数据的int型表示。 如有需要,请访问我的Github获取包含测试程序的C++源码。 1、使用atoi()函数实现class Solution{public: int myAtoi(char...原创 2017-08-31 21:25:53 · 8679 阅读 · 0 评论 -
顺时针打印矩阵(剑指offer20题)
顺时针打印矩阵,比如: 1 2 3 4 14 15 16 5 13 20 17 6 12 19 18 7 11 10 9 8 打印结果为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20将问题分解成每次打印一圈,打印 n 圈来解决void printMatrix(vector<vec...原创 2018-04-27 11:35:32 · 156 阅读 · 0 评论 -
两个有序数组求交集
假设两个数组 a 和 b,a 的长度为 m ,b 的长度为 n , m < n, 有以下四种解法:(1)每次从数组 b 中 取一个数,遍历 a 中所有元素进行比较,若相同就保存,这样时间复杂度为O(m*n); (2)由于数组是有序的,每次从数组 b 中 取一个数,对 a 中元素进行二分查找,若相同就保存,时间复杂度为O(nlog(m)); (3)将 a 中的元素 hash 存储(用...原创 2018-04-26 21:21:36 · 7114 阅读 · 3 评论 -
求字符串最长不重复子串的长度
题目描述:给定一个字符串,返回该字符串最长不重复子串的长度解题思路: python实现def lenOfLongestSubstring(self, s): if len(s) == 0: return 0 ret = 0 #返回的长度 dic = {} temp = 0 start = 0 for i in range(l...原创 2018-04-26 19:55:45 · 452 阅读 · 0 评论 -
堆排序
堆分为最大堆和最小堆,最大堆要求根节点不小于它的子节点,最小堆要求根节点不大于它的子节点。 以从大到小排序为例,先要建一个最大堆,那么这个堆的根节点一定是最大的, 让堆的根节点和最后一个元素交换位置,然后把剩余的元素调整为最大堆,以此类推,最后得到有序序列。//调整为最大堆void Adjust(int a[], int i, int n){ int j = 2 * i + 1...原创 2018-04-26 19:46:41 · 127 阅读 · 0 评论 -
字符串的逆序
题目描述:将字符串逆序输出Python实现一:借助于列表的reverse()函数,需要注意的是,该函数没有返回值,只会让列表原地逆序借助于”“.join()函数,实现列表向字符串的转换def strReverse(s): lst = list(s) lst.reverse() ans = "".join(list(lst)) return a...原创 2017-10-12 10:09:51 · 392 阅读 · 0 评论 -
itoa:int型整数转换成字符串
C/C++中有函数itoa()来实现int型与字符串的转换,我们也可以使用整数加‘0’的方法,整数加‘0’会隐式地转换成char类型。如有需要,请访问我的Github获取包含测试程序的C++源码。 1、使用itoa()函数的实现如下:class Solution{public: void my_itoa(int x) { char str[...原创 2017-08-31 20:49:49 · 1179 阅读 · 0 评论 -
插入排序
以下是插入排序的C语言实现,插入排序的思想是:若当前第i和第i-1相邻两个数据无序,则将第i个数据放入临时单元temp;将前面i-1个元素中大于temp的一一向后移动;将temp放入自己的位置#include<stdio.h>void InsertSort(int array[], int n){ int temp; for(int i = 1...原创 2017-09-25 11:47:42 · 164 阅读 · 0 评论 -
快速排序算法
面试中较为常见的算法之一就是快速排序,快速排序在实际排序应用中也是最好的选择,因为它的平均性能非常好,它的期望复杂度为nlgn,另外,它还是一种稳定的排序方法。快速排序利用分治思想,将待排序数组分成左右两个部分,然后对其分别递归调用快速排序算法。 下面通过一个例子介绍快速排序算法的思想,假设要对数组a[10]={6,1,2,7,9,3,4,5,10,8}进行排序,首先要在数组中选择一个数...原创 2017-08-01 22:06:00 · 14105 阅读 · 11 评论 -
选择排序
以下是选择排序的C语言实现,选择排序的思想是:每一趟排序通过n-i次比较,从n-i+1个关键字中选出关键字最小的记录;若这个最小的记录不是第i个记录,那么将它与第i个记录交换。#include<stdio.h>void SelectSort(int array[], int n){ int temp; for(int i = 0; i < n-1; i++) {原创 2017-09-25 11:29:56 · 145 阅读 · 0 评论 -
冒泡排序
void BubbleSort(int array[], int n){ for(int i = 0; i < n - 1; i++) { for(int j = i + 1; j < n; j++) { if(array[j - 1] > array[j]) { int原创 2017-09-24 21:54:46 · 206 阅读 · 0 评论 -
二维数组查找某个数出现的次数
int solution(vector<vector<int>> A, int target){ if(A.size() == 0) return 0; int cols = A[0].size(); int rows = A.size(); int count = 0; int x = 0; int y ...原创 2018-09-14 17:30:33 · 2319 阅读 · 0 评论