- 博客(59)
- 资源 (3)
- 收藏
- 关注
原创 leetcode_Valid Parentheses
很简单的字符串匹配问题,直接用栈就可以实现,为使程序更加高效,当要匹配的字符种类比较多的时候可以考虑用HashMap来保存匹配对
2015-05-21 09:14:07 1460
原创 多线程间的通信问题之交替打印
1.要实现的效果,直接上图:1.具体逻辑很清晰,就是通过多线程来实现直接上代码,lock控制相同的输入或输出线程的同步,resource控制着输入和输出线程的同步class Resource{ private String name; private String sex; private boolean flag; public void setName(String
2015-05-20 11:28:20 855
原创 leetcode_Longest Common Prefix
有两种思路:1.从0向最大的公共前缀长度进行,i=0,即每次从0循环至strs.length,所有的字符都相等,则count++,直至有一个字符不相同为止,循环终止2.假设 longest common prefix 等于字符串数组的最短字符串的长度,从0循环至strs.length,在前面最长公共最大长度的基础上比较相邻两个串的最大公共子串个人感觉还是第一种思路更好,用到的额外存储空间更少,时间也更短
2015-05-20 09:50:22 745
原创 java多线程问题中简单的存取款实现
1.直接上代码:package com.mnmlist.java.grammar;import java.util.Random;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;class Customer { int total; publi
2015-05-19 21:37:36 1392
原创 终止线程的方法
1.用标识符flag来停止。2.用interrupt()方法来停止,但是得用(!Thread.interrupted())判断一下方可以终止线程,起到了flag的作用3.也可以用stop()方法终止线程,但是该方法已经被废弃,虽然可以,但已经不推荐用了。对于冻结的线程仅凭flag标识是不足以终止线程的,主线程结束了,t2 t1直接wait()了,如果线程处于了冻结状态,就无法读取标记,所以就引入了第二种结束线程的方式interrupt(),直接用interrupt()方法终止线程是无效的,但是inter
2015-05-19 21:22:45 927
原创 leetcode_Largest Number
1.将数字转换为字符串2.对字符串数组进行升序排序3.具体的排序规则为将两个字符串以str1+str2和str2+str1的方式拼接起来,然后比较两个拼接后的字符串即可4.将排好序的字符串数组拼接起来即为要求的最大整数字符串ps:刚开始走了好多弯路以比较短的字符串为基准和比较长的字符串循环比较,直至有不同大小的段为止,吃力不讨好,最后也没有算对^-^!
2015-05-19 09:15:32 946
原创 leetcode_Container With Most Water
1.先获取两段的垂线和x轴组成的容器可以容纳的水量tempSum,并使得maxSum=tempSum;2.然后再去除两段较小的垂线段,组成新的容器,获得新的可容纳的水量tempSum,并更新maxSum3.循环直至start==end
2015-05-18 10:15:36 682
原创 leetcode_Minimum Size Subarray Sum
1.找到第一符合条件的长度2.先加上后面的一个元素3.如果减去前面的一个元素后sum小于target,转到23.减去前面的n个元素后符合条件&&减去前面的n+1个元素后不符合条件,获得一个新的长度,跟最小长度相比,小于minLen,更新minLen=newLen4.若果start<end&&end<nums.length,转至2
2015-05-18 10:10:18 614
原创 leetcode_Maximum Product Subarray
0.动态规划问题,和求最大连续和maximum subarray类似,但感觉比求最大连续和复杂的多1.以0为分割元素获得一系列的区间2.对每一个区间求最大值3.具体到每一个区间,顺序查找一遍寻找最大的序列,逆序查找一遍寻找最大的序列,求顺序或逆序查找的最大值4.注意:(tempCount1&1) == 1)可以节省好多时间,用%2==1就不行
2015-05-18 10:03:16 692
原创 leetcode_Copy List with Random Pointer
1.首先根据旧链表的值创建一个新的链表并分别将旧链表和新链表存储到listOld和listNew中。2.然后根据旧链表中index位置的结点的random指针所指向的位置,找出旧链表指针所指向结点在listOld中的index,也即listNew中的newIndex3.把新链表中的index位置的结点指向newIndex位置的结点,问题得解!
2015-05-17 15:35:35 860
原创 leetcode_Rotate Array
当然,一个很简单且容易想到的思路就是直接循环移位k位即可,但每次都要移动n个元素,即总共需要移动k*n个元素和Reverse Words in a String II题目类似,还有一种通过改变固定数目的元素就可以实现移位数组的功能,即先将1~len-k,len-k~len之间的元素逆置,最后将1~len之间的元素逆置,可以实现最后的旋转数组的目的。
2015-05-17 15:18:02 798
原创 leetcode_Search for a Range
1.二分查找,找到value为target的一个元素的位置,找不到返回[-1,-1]2.假设找到位置,且为index,分别向两边拓展即可。
2015-05-17 14:48:26 835
原创 leetcode_Search Insert Position
1.变形的二分查找问题2.最后A[mid]=target,index=mid3.最后A[mid]!=target,又分A[mid]<target和A[mid]>target两种情况,4.if(A[mid]<target),index=mid+1;if(A[mid]>target),index=mid;
2015-05-17 14:42:55 635
原创 leetcode_Count Primes
判断一个数是否为质数有两种方法,一种是判断它能否被2~(int)sqrt(n)+1之间的数整除,能被整除为合数,否则为质数但是,当n非常大的时候这种方法是非常费时间的。另外一种改进的方法是仅用n除以2~(int)sqrt(n)+1之间的所有质数,而2~(int)sqrt(n)+1之间的质数从何而来?先计算出来测试用例需要的小于num的所有质数的num大概为1200就能通过本题的测试用例
2015-05-17 14:29:35 967
原创 leetcode_Reverse Linked List
描述:Reverse a singly linked list.思路:感觉还是非递归方法更简洁明快,创建一个头节点并链接到第一个结点前面,从第二个结点开始依次用前插法插到前面,最后得到倒序的结点。代码:非递归方法:public ListNode reverseList(ListNode head) { if(head==null||head.next==
2015-05-17 14:15:25 526
原创 leetcode_Rotate Image
对于这种题目,就应该在纸上画画写写,由简单到一般,一般是可以发现规律的。当然了,只是有规律,newArr[j][rows-i-1]=matrix[i][j];
2015-05-17 14:09:44 514
原创 leetcode_Remove Element
描述:Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't matter what you leave beyond the new len
2015-05-16 10:37:36 479
原创 leetcode_Remove Duplicates from Sorted Array II
描述:Follow up for "Remove Duplicates":What if duplicates are allowed at most twice?For example,Given sorted array nums = [1,1,1,2,2,3],Your function should return length = 5, with the
2015-05-16 10:27:20 576
原创 leetcode_Remove Duplicates from Sorted Array
描述:Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in p
2015-05-16 10:22:46 498
原创 leetcode_Majority Element
令temp=arr[0],count=1;如果下一个元素跟temp相等,count++;若果不等,count--;若果count==0;temp换做当前元素,count=1;由于majority element出现的次数大于一半长度,所以最后剩下的元素肯定为majority element
2015-05-16 10:11:13 491
原创 leetcode_Merge Sorted Array
思路:1.最省力的一种方式从后面开始比较,较大的一个放到num1的后方,直至其中一个元素比较完2.假设num2种仍然存在没有比较完的元素,依次将num2种的元素放置到num1中
2015-05-16 09:53:37 518
原创 leetcode_Search in Rotated Sorted Array II
本题木的特点是数组初始有序,然后循环移位了。由于是循环移位,所以数组前一半或后一半至少有一半元素是有序的,而找到其中一半有序的元素正式本题的题眼。1.初始start=0,end=len-12.mid=(start+end)/2;如果arr[mid]==target,找到元素3.如果arr[start]<arr[mid],则前半部分有序,如果arr[start]<=target<arr[mid],则target存在的话肯定在前半部分,end=mid-1,如果target>arr[mid],则targe
2015-05-16 09:45:07 726
原创 Search in Rotated Sorted Array
描述:Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).You are given a target value to search. If found in the ar
2015-05-16 09:42:46 494
原创 leetcode_Pascal's Triangle II
描述:Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].思路:就是类似杨辉三角的问题,用两个数组存储相邻的两行然后用第一行来算第二行即可,将计算到第k行的数据存储到list中即可。代码:public
2015-05-16 09:29:31 562
原创 leetcode_Pascal's Triangle
描述:Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]思路:就是类似杨辉三角的问题,用两
2015-05-16 09:26:15 541
原创 leetcode_Valid Number
这道题目还是挺复杂的,复杂的原因是题目并没有给出有效数字的定义,比如说 .1 ,2.1e10.2 ,2e3.2 和2.1e5 有效,但10.1.1非法而这些数字的判断又是很麻烦的
2015-05-16 09:21:12 884
原创 leetcode_Valid Palindrome
描述:Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.For example,"A man, a plan, a canal: Panama" is a palindrome."race a car"
2015-05-16 09:13:13 518
原创 leetcode_Spiral Matrix
描述:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example,Given the following matrix:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9
2015-05-16 09:07:37 500
原创 leetcode_Spiral Matrix II
这题看起来是很复杂,做起来也确实挺复杂的。但是呢,这题并不是非常非常难,只是控制逻辑让人很抓狂罢了。colStart,colEnd,rowStart,rowEnd,num=01.colStart<colEnd 为arr[row][colStart]~arr[row][colEnd-1]赋值num++;2.rowStart<rowEnd 为arr[col][rowStart]~ar[col][rowEnd-1]赋值num++;3.colEnd>colStart 为arr[rowLen-1-row][
2015-05-16 09:03:46 727
原创 leetcode_Unique Paths II
描述:Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as 1 and 0 respectively
2015-05-16 08:51:11 550
原创 leetcode_Unique Paths
描述:A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to r
2015-05-16 08:40:31 474
原创 leetcode_Excel Sheet Column Title
描述:Given a positive integer, return its corresponding column title as appear in an Excel sheet.For example: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB
2015-05-16 08:36:00 645
原创 leetcode_Excel Sheet Column Number
描述:Related to question Excel Sheet Column TitleGiven a column title as appear in an Excel sheet, return its corresponding column number.For example: A -> 1 B -> 2 C -> 3
2015-05-16 08:31:39 475
原创 leetcode_Compare Version Numbers
描述:Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 version2 return -1, otherwise return 0.You may assume that the version strings are non-emp
2015-05-16 08:26:28 518
原创 leetcode_Gas Station
这是一个动态规划的题目,假设能跑完全程,最后邮箱中的油肯定还有剩余,由于是一个环形的路线,所以理论来讲,可以从任何地方开始。所以,可以用两个变量来表示这道题目,sum表示全程的油的剩余,而index来表示从何处开始。1.从任何地方可以开始本次的行程,而sum+=gas[i]-cost[i],若sum<0,说明从index开始是不合适的,换成从i+1开始,直至结尾2.若最后sum>=0,说明路线存在且以index为起点的路线为一个可行的路线。
2015-05-16 08:21:55 853
原创 leetcode_Length of Last Word
1.s==null return 02.s=s.trim(),s.length()==0 return 0;3.从后面开始计算字母的数量,直到遇到空格为止
2015-05-15 14:31:43 592
原创 leetcode_Find Minimum in Rotated Sorted Array
思路:这道题由于要求对数的时间复杂度,所以考虑用二分查找,而二分查找需要数组是有序的。而本文所给的数组是循环移位后的有序数组,所以假设能够确定数字的顺寻就可以应用二分查找,本文的题眼也就在这里。由于所给的数据是循环移位后的有序数组,所以本数组至少有一半的元素是有序的,找出有序的那一般即可应用二分查找。1.首先取mid=(start+end)/2,将arr[start]和arr[mid]比较,如果arr[start]==arr[mid],找到元素2.如果arr[start]<arr[mid],则前半部分
2015-05-15 14:11:07 482
原创 leetcode_Find Minimum in Rotated Sorted Array II
思路:这道题由于要求对数的时间复杂度,所以考虑用二分查找,而二分查找需要数组是有序的。而本文所给的数组是循环移位后的有序数组,所以假设能够确定数字的顺寻就可以应用二分查找,本文的题眼也就在这里。由于所给的数据是循环移位后的有序数组,所以本数组至少有一半的元素是有序的,找出有序的那一般即可应用二分查找。1.首先取mid=(start+end)/2,将arr[start]和arr[mid]比较,如果arr[start]==arr[mid],找到元素2.如果arr[start]<arr[mid],则前半部分
2015-05-15 14:08:49 457
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人