算法
lukeyewu
这个作者很懒,什么都没留下…
展开
-
《算法第四版》学习:动态连通性
问题描述:给定了一组原始数据对,每个数据对<p, q>表示点p和点q相连。输入新的数据对<x,y>, 判断x,y是否已经在原始数据对中相连,如果不是,则输出x,y。 这个问题有很多的变形,比如A认识B,A认识C,那么A是C的间接好友,如果有很多的这种人物关系当做原始数据集,再让判断新输入的两个人是否是间接好友,则就可以用这里的动态连接性。 最慢的实现方法: quick_...原创 2019-05-16 21:18:35 · 206 阅读 · 0 评论 -
《算法第四版》学习:求输入字符串所代表的算术表达式的值
Dijkstra方法 创建了两个栈,一个用来存放运算符 ops,一个存放操作数 vals,遇到左括号跳过,遇到右括号将vals栈顶的两个元素执行ops栈顶的操作。 package com.chap1.algorithm; import java.util.Stack; import edu.princeton.cs.algs4.StdIn; public class DijkstraEvalua...原创 2019-05-08 21:59:31 · 474 阅读 · 0 评论 -
7种排序算法汇总
排序算法 1. 冒泡排序 平均时间复杂度O(n2)O(n2)O(n^2) ( 最好O(n)O(n)O(n),最差O(n2)O(n2)O(n^2) ) 空间复杂度O(1)O(1)O(1) 稳定排序 代码如下 void BubbleSort(vector&amp;amp;lt;int&amp;amp;gt;&amp;amp;amp; vec) { if (vec.size原创 2018-09-13 20:17:04 · 977 阅读 · 0 评论 -
Top K 问题的几种解法
1. 先排序后取K个数。 时间复杂度O(nlgn). vector<int> FindSmallestKNum(vector<int> &vec, int k) { if (vec.size() < k) return vector<int>(); sort(vec.begin(), vec.end()); return vect...原创 2018-08-22 17:16:50 · 1025 阅读 · 0 评论 -
C++带特殊符号的标准输入读取方法
近期秋招,做了不少的笔试,发现在使用C++语言按照题目要求读取数据时,由于操作不熟练,导致浪费了很多的时间。痛定思痛,决定总结一下该如何读取数据,以便下次参照使用。 要求:读入M行整数,行内相邻数据间用英文逗号“,” 隔开。例如 代码如下: #include <iostream> #include <sstream> #include <vector...原创 2018-08-14 22:46:48 · 6182 阅读 · 0 评论 -
求无序数组中最大的K个数 或 第K大的数
1、方法一:要求无序数组中没有重复元素,同时允许更改数组内的内容。主要思想是利用快速排序Partition函数依次进行前K个元素的排序,平均时间复杂度O(n)。#include <iostream> #include <string> #include <stack> #include <fstream> #include <ss...原创 2018-03-16 20:09:13 · 2688 阅读 · 0 评论 -
二分查找,快速排序,归并排序,堆排序
1. 二分查找的递归版本。int BinarySearchRecur(vector<int> &v1, int searchNum, int sIdx, int eIdx) { int ret = -1; int midIdx = sIdx + ( (eIdx - sIdx) >> 1 ); if (sIdx <= eIdx) // 一定要加上,不...原创 2018-03-25 22:00:43 · 691 阅读 · 0 评论 -
《算法第四版》学习:统计一个随机字符串数组中,重复的字符串的个数,以及重复的字符串
获取长为k的随机字符串组成的数组,数组长度为N public static String[] getKLengthStrings(int N, int k) { if(N<=0) return null; String[] strings = new String[N]; char[] cs = new char[k]; for(int ii=0; ii<...原创 2019-05-13 15:15:46 · 1152 阅读 · 0 评论