算法设计
jingxianli0922
生活不易,且行且珍惜。工作不易,且做且学习!
展开
-
第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入"jingwanlisingsjx",则输出'w'。 最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路的时间复杂度是O(n2)。 更高效的方法是利用少量的空间原创 2015-12-28 13:56:15 · 348 阅读 · 0 评论 -
二叉树的遍历实现(递归和非递归)
二叉树的遍历(前序、中序和后序),递归和非递归的实现。前序和中序实现基本类似,后序稍微复杂一点,需要判断当前节点的右子树是否为空或者已经访问过,代码如下: //前序遍历:递归 void preorder(TreeNode *root, vector &path) { if(root != NULL) { path.push_back(root->val);原创 2016-08-11 23:32:28 · 349 阅读 · 0 评论 -
leetcode.10---Regular Expression Matching
'.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype should be: bool isMatch(c原创 2016-08-10 15:17:01 · 536 阅读 · 0 评论 -
判断一个整数是否为回文数
题目要求只能用O(1)的空间,所以不能考虑把它转化为字符串然后reverse比较的方法。 在提示中也提到了,如果考虑reverse number的方法,可能造成溢出。 每次,取出数的最高位和最低位比较,这里设置一个base为10^n,用来取出数的最高位,每次循环除以100,因为每次数会消去2位。 class Solution { public: bool isPalindro原创 2016-08-09 14:25:45 · 2449 阅读 · 0 评论 -
每天一题 leetcode-8 String to Integer (atoi)
每天一道算法题,坚持! 注意点: 1.字符串前面有空格的情况( ' 897') 2.符号位 3.溢出 代码如下: class Solution { public: int myAtoi(string str) { int minus = 1; long long result = 0; if(str.length() == 0原创 2016-08-08 16:06:30 · 235 阅读 · 0 评论 -
Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 代码如下: class Solution { public: ListNode* mergeTwoL原创 2016-08-16 22:35:04 · 251 阅读 · 0 评论 -
leetcode 7 --- Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 题目比较简单,需注意一下几点: 1.x为负数 2.溢出 代码如下: class Solution { public: int reverse(int x) { b原创 2016-08-04 15:18:23 · 337 阅读 · 0 评论 -
经典排序算法(OC实现版)
排序算法是每个程序猿都必须掌握的算法。通过思想的转化,排序算法可能用在很多实际应用中。如统计数组的逆序对(归并算法),数组中出现次数超过一半的数字(快速排序),最小的k个数(堆排序)。算法的思路不细讲了,网上的文章很多。直接上代码: 头文件如下: #import @interface Sort : NSObject //快速排序 -(void)quickSortWithArray:(NS原创 2016-07-08 10:45:02 · 1969 阅读 · 1 评论 -
64. Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. 利用动态规划 解法一:时间复杂度和空间赋值为O(m*n) class Solution原创 2016-07-27 19:14:34 · 327 阅读 · 0 评论 -
二分查找算法(OC版--非递归实现)
闲来无事,歇歇二分查找算法 // // ViewController.m // BinarySearch // // Created by bcc_cae on 16/3/25. // Copyright © 2016年 bcc_cae. All rights reserved. // #import "ViewController.h" @interface ViewControl原创 2016-03-25 17:29:04 · 2005 阅读 · 1 评论 -
Longest Substring Without Repeating Characters
Longest Substring Without Repeating Characters (来自LeetCode) Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeatin原创 2016-03-25 09:23:13 · 275 阅读 · 0 评论 -
Add Two Numbers(OC版)
题目要求: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as原创 2016-03-31 23:05:45 · 325 阅读 · 0 评论 -
连续子数组的最大和
题目:输入一个整型数组,数组里面有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为{1,-2,3,10,-4,7,2,5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。 最直观的方法,即枚举出数组的所有子数组并求出它们的和。一个长度为n的数组,总共有n(n+1)/2个子数组。计算出所有所有原创 2015-12-23 15:19:49 · 503 阅读 · 0 评论 -
从第一个字符串中删除第二个字符串中出现的所有字符
最近学习有所懈怠,没有去年年底那股冲劲。从今天开始我需要重新振作精神,为接下来的面试做好充分的准备。2015年是收获之年,收获了爱情,收获了自己装修的家,收获了爱情的结晶。接下来的2016年,希望能找一份寸心的工作,同时也希望老妈身体健康。 2016年的第一篇博文,虽简单,但不易。原创 2016-01-06 19:26:40 · 1831 阅读 · 0 评论 -
A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
思路1:排序法 对集合A和集合B进行排序(升序,用快排,平均复杂度O(N*logN)),设置两个指针p和q,同时指向集合A和集合B的最小值,不相等的话移动*p和*q中较小值的指针,相等的话同时移动指针p和q,并且记下相等的数字,为交集的元素之一,依次操作,直到其中一个集合没有元素可比较为止。 优点:操作简单,容易实现。 缺点:使用的排序算法不当,会耗费大量的时间,比如转载 2015-12-19 20:20:00 · 1389 阅读 · 0 评论 -
找数组中第k个最小数
一、面试问题描述 给定一个若干个学生的分数数组,数组中的分数是无序的,在该数组中找出其第K个最小的数,例如对于分数数组arr,arr={89,67,69,60,88,83,75,56,96},则其第3个最小的数为67。 二、解题思路 算法跟快排的思路相似,首先在数组中选取第一个数x=arr[0]为划分的基准,将比x小的数,放到x的前面。将比x大的数,放到x的后面。如果此时x的位置刚好为k,则原创 2015-12-15 15:43:24 · 948 阅读 · 0 评论 -
最小的k个数
一、问题描述 输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、10、8、12、20这8个数,则最小的4个数字是1、4、5、6。 二、解题思路 解法1.最简单的思路莫过于把输入的n个整数排序,排序之后位于最前面的k个数就是最小的k个数。时间复杂度O(nlogn)。这个方法我就不在这里复述了。 解法2.利用上一篇博客http://blog.csdn.net/ja原创 2015-12-15 16:44:01 · 371 阅读 · 0 评论 -
Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the correct order, "()" and "()[]{}" are all va原创 2016-08-13 18:31:25 · 229 阅读 · 0 评论