自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

原创 C语言指针加一的解释

(最近读Cprimerplus,做一些笔记)直接看代码:short a[4];double b[4];short * p1 = a;double * p2 = b;printf("%p %p\n", p1, p1+1);printf("%p %p\n", p2, p2+1);输出是:000000000061FE08 000000000061FE0A0000000...

2019-06-09 10:35:48 2702

原创 数组与指针初始化字符串的区别

(最近读C primer plus,做一点笔记)正文C语言中字符串数组初始化有两种方式:数组或者指针char s1[] = "Hello world";char * s2 = "Hello world";这里的s1和s2都是指向字符串的指针(也是第一个元素的地址),被引用的字符串常量决定了分配给字符串的存储空间大小。两种方式效果相似,但不完全相同。1.在数组形式中,"He...

2019-06-07 23:57:41 422

原创 [排序]O(logN)空间复杂度排序(不修改原数组)

主要用选择排序的方法,每次选择最小值输出,通过计最小值出现的次数来解决数组中重复值的问题。时间复杂度比较高,来换取比较低的空间复杂度(没有申请别的空间,空间复杂度是O(1)?),并且不修改原数组,直接输出。public void sort(int [] nums){ int count = 0, min = nums[0], min_cnt = 0, pre = -1; ...

2019-05-11 00:15:44 236

原创 [c++] 快速幂算法

面试遇到的实现Pow函数的问题。double Power(double base, int exponent) { long long exp = (long long)abs(exponent); double result = 1, b = base; while(exp != 0){ if(exp & 1 == 1)result *= b...

2019-03-13 11:33:40 208

原创 Java socket简单聊天demo

实现效果:服务器等待客户端的连接,然后开始聊天。(理想的效果应该是服务器做echo,客户端和客户端聊)。注意事项:内部类是动态的,main函数是静态的,不能直接在main中new一个内部类,需要实例化main所在的类。服务器:package wanghm;import java.io.*;import java.net.*;import java.util.Scanne...

2019-03-04 15:30:59 403

原创 Java3D环境配置(eclipse、sdk安装、user library建立)

转的人家的,很好用:https://blog.csdn.net/zhongwen7710/article/details/27819847

2019-01-15 11:43:47 493

原创 Valid BFS(判断树的BFS是否正确)

题目The BFS algorithm is defined as follows.Consider an undirected graph with vertices numbered from 1 to n. Initialize q as a new queue containing only vertex 1, mark the vertex 1 as used. Extract...

2019-01-06 00:52:48 398 1

原创 免费馅饼(DP新思路,从下往上填二维数组)

题目都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经...

2019-01-04 23:12:46 215

原创 n个数中取k个使得乘积最大(c++实现)

题目:给定N个整数A1, A2, ... AN。请你从中选出K个数,使其乘积最大。  请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以1000000009的余数。  注意,如果X<0, 我们定义X除以1000000009的余数是负(-X)除以1000000009的余数。即:0-((0-x) % 1000000009)【输入格式】第一行包含两个整数N和K。  以下N行每行一个整...

2018-04-03 22:56:46 2953

原创 c++ 关于链表和链表实现栈

#include #include using namespace std;struct Node{ int num; Node * next; Node(int a){ this->num = a; this->next = NULL; }};//用数组初始化链表 Node * init(int * nums, int size){ Node * root

2018-03-20 21:48:09 452 3

原创 2018.2.9 LayoutInflater详解

转载人家的博客 cnblogs

2018-02-09 12:05:08 141

原创 2018.2.7 添加v7:27.+依赖库:Error:Failed to resolve: com.android.support:appcompat-v7:27.+

第三章的recyclerViewTest项目要使用RecylerView这个控件,要先在项目的build.gradle中添加相应的依赖库才行。如下:compile 'com.android.support:recyclerview-v7:26.+'(或其它版本v7:XXX)不知道为什么,gradle会报错,而且之前可以运行的项目也有了bug:临时解决办法:修改a

2018-02-07 20:50:39 8339

原创 2018.2.1 Android Studio 2.2新建项目的bug

照着书上创建的Helloworld项目,但是无法运行,信息如下:Error:A problem occurred configuring project ':app'.> Could not resolve all dependencies for configuration ':app:_debugApkCopy'.   > Could not find any versio

2018-02-01 01:35:31 385

原创 47. Permutations II

这道题是上一题的进阶,这次数组中可能有重复的数,导致排列的结果会有重复。那么怎么解决重复的问题呢?仔细想一想,重复是因为:要排列N个数,每次迭代排一个,总共N次迭代。如果在某一个位置上,我选了数X(X1),而X不只有一个,后面某个位置我选了另一个X(X2),这是情况1。如果我在第一次的位置上选了X2,在后面的那个位置上选X1,就跟情况1重复了。真正的原因是我们在同一个位置上,选了两

2017-09-09 13:09:52 162

原创 46. Permutations (list)

求一组不重复数的所有排列,用回溯法来遍历,不过这种回溯不需要回头。大概思路就是用一个递归函数,每次选择一个之前没选过的数加入到当前list中,最后如果选完了所有的数,加入到结果中。算法并不难,主要是语法上遇到一些问题,比如关于list的使用。总结:1. list > 这种二维的list,声明的时候还是和一维一样results = new ArrayList2.将一个list

2017-09-08 10:47:12 237

原创 513. Find Bottom Left Tree Value (vector & queue)

这道题要求二叉树最下边一层的最左边的节点,是一道比较简单的题。主要当作给Java练习了。首先是第一个版本:主要思想就是从根节点开始,逐步求下一层的节点,并替换到nodes中。如果发现下一层的节点(用temp来临时存储)是空的,就说明到了最后一层。results来标记每一层最左边的节点,最后就是结果。import java.util.*;class Solution {

2017-09-05 00:36:12 248

原创 100. Same Tree

判断两个二叉树是否相同class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q == null)return true; if(p == null || q == null)return false; if(p.

2017-09-02 14:29:15 150

原创 JAVA实现五种排序算法

用JAVA实现冒泡排序、选择排序、插入排序、快速排序和归并排序。封装在sort类中。class Sort{ /* 辅助函数 */ //Java没有引用,利用数组来完成值的交换 void swap(int a[], int i, int j) { int c = a[i]; a[i] = a[j]; a[j] = c; } //输出数组 void print(int a

2017-08-22 00:49:44 324

原创 aslist 和 toArray 的探究

aslist 和 toArray 用来完成Array和List的转换,用法有一些需要注意的。1.aslistArray都过调用aslist函数转换成list,但要注意,数组中元素的类型不可以是基本类型。如下列代码会报错。int a [] = {6, 2, 1, 3};List list1 = Arrays.asList(a);应该改为Integer a [] = {6

2017-07-28 11:20:35 236

原创 28. Implement strStr()

刚开始学Java,用String类提供的函数练练手。这道题要求子串第一次出现的位置,参考介绍String类的那篇博客,其实用 indexOf()函数就可以了。public class Solution { public int strStr(String haystack, String needle) { return haystack.indexOf(needl

2017-07-21 15:54:04 176

转载 JAVA的String类 (转)

String类         1、String对象的初始化由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:                            String s = “abc”;                            s = “Java语言”;        

2017-07-19 23:57:55 226

原创 JAVA栈的简单实现

package wanghm;class Stack{ int [] nums = new int[1]; int count; int capacity; Stack() { nums[0] = 0; count = 0; capacity = 1; } private void addCapacity() { int [] cur = new int[2

2017-07-17 23:38:46 174

原创 640. Solve the Equation

class Solution {public: string solveEquation(string equation) { int coe = 0, num = 0, i; int flag = 1, tt = 1; int cur = 0; for(i = 0; i < equation.size(); i++)

2017-07-16 11:28:00 213

转载 算法概论第八章课后习题8.3

这一题不太懂,参考网上的答案才做出来的。。。补充一下SAT问题的概念:SAT问题是指是否存在一组对所有布尔变量的赋值(TRUE或FALSE),使得整个合取范式取指为真。根据书本8.2章的定义:称一个搜索问题是NP-完全的,是指其它所有搜索问题都可以归约到它。从定义可知,证明一个问题是NP-完全问题有两步,第一步是证明该问题是一个NP问题,第二步是证明其它所有搜索

2017-07-14 11:45:18 282

原创 98. Validate Binary Search Tree

判断是否是BST,需要注意的是你不能只判断root的左儿子小于根节点,根节点小于右儿子,而是需要保证右子树所有的点都要大于根节点,左子树所有的点都小于根节点。所以可以做中序遍历,然后判断遍历所得的数组,是否是递增的。class Solution {public: vector n; bool isValidBST(TreeNode* root) { n.clear(

2017-06-25 20:56:46 155

原创 94. Binary Tree Inorder Traversal 中序遍历

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */clas

2017-06-25 18:46:16 135

原创 210. Course Schedule II Medium

这道题要求拓扑排序,返回合法的序列,用不停删除入度为0的点的方法做。注意,stack来存储需要处理的入度为0的点,vector sorted存储结果。class Solution {public: vector findOrder(int numCourses, vector >& prerequisites) { int degree[numCourses] = {0};

2017-06-18 13:53:35 159

原创 207. Course Schedule Medium

先修课的安排问题,要判断能不能修完所给的课程,只要看图中有没有环。思路参考上一篇图的文章。AC代码如下。这是用递归判断每一个点开始做DFS是否有环,实际上性能稍差,因为有重复判断的情况,可以加一个数组存储递归的结果,免去重复递归的情况。class Solution {public: bool canFinish(int numCourses, vector >& prereq

2017-06-18 13:48:40 175

原创 判断有向图是否有环

在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图(Directed Acyclic Graph,DAG). 对于一个n个节点的有向图(节点编号从0到n-1),请判断其是否为有向无环图. 图的节点数和边数均不多于100000. 请为下面的Solution类实现解决上述问题的isDAG函数,函数参数中n为图的节点数,edges是边集,edges[i]表示第i条边

2017-06-17 23:09:20 688

原创 611. Valid Triangle Number

这道题跟之前做过的 3Sum 很相似(先排序)。O(n^3)的做法肯定超时,应该先固定一个值,然后用two pointers遍历,这样达到O(n^2)的复杂度。不过这里遇到的问题是,如果你固定最小的值,当右边的left和right构成的三角行,此时不合法,应该怎么处理?这时既可以左移right,又可以右移left,但这两种情况都要考虑,因为这种操作都可能使三角形合法。这样就很难处理。答案中有简

2017-06-11 23:06:11 135

原创 617. Merge Two Binary Trees Easy

这题要求合并两个二叉树,相同位置的节点数值相加,如果有不存在的情况,采用存在的那个子树。主要思想:采用递归,两个子树同时遍历,从某一根节点开始,先考虑根。我们直接在第一个子树上修改。如果第二个子树为空,什么都不做。如果第一个为空,第二个不空,直接采用第二个子树。如果都不空,把根处的值相加,然后递归的处理左子树和右子树。细节:递归的函数需要指针加引用class Solut

2017-06-11 11:31:44 127

原创 64. Minimum Path Sum Medium

求到达右下角的路径,使得路径上数的和最小。比较简单。每一个位置你选择从上面来更小还是左边来更小就好。class Solution {public: int minPathSum(vector>& grid) { int m = grid.size(), n = grid[0].size(); int d[m][n]; for (int

2017-06-09 16:51:18 185

原创 63. Unique Paths II Medium

接上一题Unique Paths,这里增加了有障碍的情况。其实也很好理解。对于数组中不是边界的情况,原本d[i][j]等于来自上方和左边两个的和,如果上面是障碍,则从上面来的路径数为0,左边类似。不同的是,边界中原本路径数为1,如果边界中有障碍,障碍后面的都为0。需要注意的是,存在起点有障碍和终点有障碍的情况。class Solution {public: int uniquePat

2017-06-09 16:33:23 122

原创 62. Unique Paths Medium

要求从左上角走到右下角的不同的路径数。主要思想:d[i][j]表示走到表格中(i, j)的路径数,下标从0开始。则有d[i][j] = d[i - 1][j] + d[i][j - 1]。class Solution {public: int uniquePaths(int m, int n) { int d[m][n]; for(int i =

2017-06-03 17:55:29 143

原创 374. Guess Number Higher or Lower Easy

这道题是二分查找的使用。需要注意的是,求mid不可以用(right + left)/ 2,因为可能会越界,超过int的最大值,应该用(right - left)/ 2 + left。// Forward declaration of guess API.// @param num, your guess// @return -1 if my number is lower, 1 if my

2017-06-03 16:32:15 153

原创 494. Target Sum Medium

这道题按如下推导,把它转化成求是否存在子集的和为特定值。跟416. Partition Equal Subset Sum一样的做法。这里给出一维数组的简化版。这题的坑在于,要判断数组的和是否大于s,如果小于s,直接返回0,样例中有s=1000000000的情况,很坑爹sum(P) - sum(N) = targetsum(P) + sum(N) + sum(P) -

2017-06-01 20:09:42 165

原创 416. Partition Equal Subset Sum Medium

这道题要求把一组数分成相等的两部分,实际上是求数组中是否有子集等于特定值(这里特定值为所有数和的一半)。那么考虑子问题,数组中是否有子集等于target。我们用动态规划。主要思想:对于数组中的每个数,我们有取或不取两种选择,实际上是背包问题。设d[i][j]表示前i个数和为j的方案数,所以有状态转移方程:d[i][j] = d[i - 1][j] + d[i - 1][j

2017-06-01 17:46:15 281

原创 494. Target Sum Medium

先给出一个递归的解法。主要思想:一组数,每个数会有 + 和 - 两种选择,那我们可以利用递归来遍历求解所有的情况,n个数,就有2^n种情况,实际上是一个二叉树,每个节点有两种选择。实现起来很简单,但是效率比较差,毕竟有些情况明显不可取,还是要遍历。class Solution {public: int count; int findTargetSumWays(vector& num

2017-05-31 21:54:22 126

原创 516. Longest Palindromic Subsequence Medium

这道题是求最长回文子序列,跟最长回文子串相似。用dp[ i ][ j ]表示s从 i 到 j 之间,它的最长回文子序列的长度。最终结果就是dp[ 0 ] [ s.size() - 1 ]。状态转移方程是:如果s[i] == s[j],那么dp[ i ][ j ] = dp[ i + 1 ][ j - 1 ] + 2。 否则 dp[ i ][ j ] = max(dp[ i + 1

2017-05-31 19:49:09 146

原创 523. Continuous Subarray Sum Medium

这道题虽然在动态规划的分类里,但没有用到动态规划。本质是数学题。这里用到了取余的知识。从头开始记录sum的值,如果在一个位置,这里的和模k取余的值在前面某个数的相同,则这两个数之间的和是k的倍数。比较麻烦的是需要考虑特殊情况。比如k是负数时,我们可以直接取绝对值,因为在模的概念下正负是一样的。如果k是0,就不能取余,直接用sum的值记录。还需要注意的是,开头的set中需要先

2017-05-30 21:57:35 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除