- 博客(40)
- 收藏
- 关注
原创 461. 汉明距离
取2的模,比较,不同加一,然后都右移一位 public int hammingDistance(int x, int y) { int result=0; while(x!=0||y!=0){ if((x%2)!=(y%2)){ result++; } x&...
2018-05-30 12:23:09 221
原创 191. 位1的个数
思路1,除2取余数,是1 的话就加1,但是效率不够。 public int hammingWeight(int n) { int result=0; while(n!=0){ if(n%2==1){ result++;} } return result; ...
2018-05-30 11:41:59 232
原创 13. 罗马数字转整数
思路1:当后面有个大的字符时候,前面这一段都是负,用一个标记来记录这一段的正负,一段一段的相加。 public int romanToInt(String s) { int result=0; int resultPart=0; int flag=1; HashMap<Character,Integer> mp=new Hash...
2018-05-30 11:05:06 276
原创 412. Fizz Buzz
循环输出就好,没有什么特别 public List<String> fizzBuzz(int n) { List<String> ls = new ArrayList<String>(); for(int i=1;i<=n;i++){ if(i%3==0&&i%5==0){ ...
2018-05-28 16:17:59 107
原创 278. 第一个错误的版本
二分法查找:但是有一个问题,就是low/2可能不变(比如一直是1),所以改成(low+1)/2用low/2+upp/2是因为可能low+upp大于了int的限制(测试case的原因) public int firstBadVersion(int n) { int lower=0; int upper=n; int cur=0; ...
2018-05-28 16:11:16 373
原创 88. 合并两个有序数组
思路一:先合并成一个数组,再排序,性能很低,属于无脑输出。 public void merge(int[] nums1, int m, int[] nums2, int n) { for(int i=m;i<m+n;i++){ nums1[i]=nums2[i-m]; }Arrays.sort(nums1...
2018-05-28 15:43:06 199
原创 112. 路径总和
思路,递归,扫描到叶子,过程中累加值。如果到叶子的时候满足,返回true,其他情况都是false/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x)...
2018-05-25 18:59:50 263
转载 自动装箱的问题,注意
重要结论:整型的包装类存在常量池,一次性把从-128到127之间的所有数都初始化了.当你使用这些数的时候不是创建新对象而是直接从这个常量池里面取值.所以当你赋值100的时候是取的常量池里的100,因此两个对象内存地址一样.而赋值200的时候两个对象分别new对象,因此内存地址不同.4.2 自动装箱和拆箱基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是...
2018-05-25 17:59:34 285
原创 102. 二叉树的层次遍历
层序遍历二叉树,并且还要分层输出。Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For example:Given binary tree [3,9,20,null,null,15,7], 3 / \...
2018-05-25 17:27:22 207
原创 101. 对称二叉树
1,递归条件是,两个叶子的值相当,左叶子的左叶子值等于右叶子的右叶子,左叶子的右叶子等于右叶子,空节点自然对称/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode...
2018-05-25 13:21:50 121
原创 104. 二叉树的最大深度
这个最好的就是递归了:maxDepth函数返回的就是当前这个节点的状态,没有叶子,深度就是一,有叶子,继续用这个函数查看叶子的状态;/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * ...
2018-05-25 12:41:43 106
原创 141. 环形链表
判断是否有环的问题,一方面,不仅他本身是一个环,还有可能有子环。所以要用快慢指针,让块指针先进入环,那么快慢指针迟早会在环中相遇。/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * ...
2018-05-25 12:02:19 201
原创 L19删除链表的倒数第N个节点
思路是这样:两个指针,都从头开始,指针A先移动n步,指针B 再开始移动,当A移动到了最后一个节点(next==null),此时B指针正好指的是倒数第n个的前一个。特殊情况:1.链表只有头指针且n=1,说明删除头指针2.倒数第N个正好是头指针(此时A移动n步之后,==null),那直接返回第二个节点作为头。/** * Definition for singly-linked list. * pu...
2018-05-25 10:06:30 96
原创 38. Count and says 38. 报数
思路:每次,针对上一次的字符串,找到第一处不同的地方,记录次数和当前值,然后加入string builder,class Solution { public String countAndSay(int n) { int count=1; StringBuilder result = new StringBuilder(); String c...
2018-05-24 20:06:16 132
原创 242. 有效的字母异位词
转换成字符数组,然后排序,如果是异位词,此时两个数组就相同了。class Solution { public boolean isAnagram(String s, String t) { if(s.length()!=t.length()){ return false; } char[] ss=s.toCharArr...
2018-05-24 17:37:13 156
原创 7.反转整数
思路就是,x按照10取模,每次*10,加上新的x%10(x先/10)。class Solution { public int reverse(int x) { long result=0; while(true){ result=result*10+x%10; x=x/10; if(re...
2018-05-24 17:21:51 153
原创 28. 实现strStr()
提供一个不太好的思路,开始我试图用异或来计算出总的needle的结果,然后这个值和目标字符串异或,如果等于0,说明相同。但是这样不行,异或相当于一个加和结果,但是过程可能有很多组合。所以,最终还是老老实实的,如果发现第一位相等的,class Solution { public int strStr(String haystack, String needle) { if(need...
2018-05-24 17:01:30 454
原创 125. 验证回文串
思路1:先处理字符串,只剩数字和字母,然后将字母全处理为小写,之后开始头尾相比较,有不同就return false,一直找不到出来以后,返回trueclass Solution { public boolean isPalindrome(String s) { String reg="[^a-zA-Z0-9]"; s=s.replaceAll(reg,""...
2018-05-24 14:40:14 302
原创 387. 字符串中的第一个唯一字符
思路1:转换为字符数组,找到每一个字符,然后逐个扫描,这里有几种情况:1.如果处理当前这个index之外还有相等的,说明不是2.如果index是最后一个了,还没有找到除了本身之外的相等的,说明就是 public int firstUniqChar(String s) { if(s.length()==1){ return 0; } cha...
2018-05-24 11:23:54 542
原创 344. 反转字符串
思路1:转换成char数组,然后做数组的反转,class Solution { public String reverseString(String s) { char[] ch=s.toCharArray(); for(int i=0;i<ch.length/2;i++){ char temp=ch[i]; ...
2018-05-24 09:54:35 128
原创 L36有效的数独
思路:分别验证行,列,块,下面是我的代码,每次做一件事情,所以我用了三次独立的for,这样效率不高。于是改了一个思路public static boolean isValidSudoku(char[][] board) { boolean flag=true; for(int i=0;i<board[0].length;i++){ fl...
2018-05-24 09:43:21 110
原创 36. 有效的数独
思路,将行,列,块分开写成数组,检查是否有重复检查重复的规则是利用set的不重复,如果arraylist和set的size不同,说明有重复class Solution { public boolean isValidSudoku(char[][] board) { boolean flag=true; for(int i=0;i<board[0].le...
2018-05-24 01:37:21 300
原创 283.移动零
一个思路1:发现一个0,互相交换,把0移动到最后,然后把这个数组当成新数组,再来一次,所以是三重循环,时间效率很差class Solution { public void moveZeroes(int[] nums) { int flag=0; while(flag<nums.length){ for(int i=0;i<...
2018-05-24 00:25:07 249
原创 L350 两个数组的交集 ii leetcode
1. 一个错误的思路:用小的那个数组,逐个扫描大的数组,如果存在,就加入新Arraylist。但是,这个算法有个很严重的问题,没有考虑次数比如:{3,1,2}{1,1}这样输出的是{1,1},但是结果是{1},所以,这个不行:class Solution { public int[] intersect(int[] nums1, int[] nums2) { int len...
2018-05-23 23:23:26 190
原创 217. 存在重复元素
主要是性能问题,所以那种两次循环逐个扫描的方式是不行的。这个算思路1, public static boolean containsDuplicate(int[] nums) { int num=0; int n = nums.length; for(int i=0;i<n-1;i++){ num=nums[i];...
2018-05-23 21:03:31 106
原创 122. 买卖股票的最佳时机 II
这个题实际理解下来,意思是,已经知道i天内股票的价格,所以当然是只要有正的差价就卖。贪心算法的应用class Solution { public int maxProfit(int[] prices) { int profit=0; for(int i=1;i<prices.length;i++){ if(prices[i]&g...
2018-05-23 17:30:54 270
原创 48. 旋转图像
两步,第一步,斜边对折,注意下标的范围,j=i+1i,j->j,i第二步,水平对折;i,j->i,len-1-jclass Solution { public void rotate(int[][] matrix) { int len=matrix.length; for(int i=0;i<len;i++){ fo...
2018-05-23 16:37:03 119
原创 1. 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路1:每个数去查找一下后面的数,是否符合,时间复杂度肯定是O(N^2),比较复杂class Soluti...
2018-05-23 14:56:18 189
原创 66. 加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。思路:原本想先转成数...
2018-05-23 14:17:49 210
转载 异或的小应用(转载)
转载自:https://blog.csdn.net/hulamua/article/details/52411446虚心向大家学习1.用作交换,比如,要交换a ,ba^=b;b^=a;a^=b;分析下:第一步之后,a=a^b第二步,b=b^a=b^a^b=a;第三步:a=a^b=a^b^a=b2.一个整形数组,存1到n的所有整数,但缺省一个值,找出此值。先求1到n的异或,再和数组中所有数异或,...
2018-05-23 12:52:57 452
原创 L136,只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 41.思路1:找到一个数字之后,扫描其余的,如果有重复,就pass,时间复杂度高,如果重复数字是最后一个,就是n^2class So...
2018-05-23 12:18:28 127
原创 LeetCode189. 旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = ...
2018-05-23 09:34:11 216
原创 26 删除排序数组中的重复项
思路很简单,一个index,一个i,index移动的前提是有不一样的数字,i是遍历。只需要把后面的和当前index不相同的值,发现一个就放到index下一位,(注意是排好序的数组)class Solution { public int removeDuplicates(int[] nums) { int index=0; for(int i =0;i<...
2018-05-22 23:42:20 186
原创 21. 合并两个有序链表
单链表:l1->next->next->next.....->null两种思路:1.非递归: public static ListNode mergeTwoLists_2(ListNode l1, ListNode l2) { if(l1==null){ return l2; } if(l2==null){ return l1; }...
2018-05-22 22:32:27 2455
原创 20. 有效的括号
import java.util.Arrays;class Solution { public boolean isValid(String s) { char[] chs=s.toCharArray(); char[] stack=new char[s.length()]; char r=' '; String cou...
2018-05-22 21:18:36 274
原创 LeetCode 14最长公共前缀
基本思路就是:选择第一个作为标准,从第一个字符开始,如果同样位置的都有,就加入输出的字符串,最外层循环是最小的字符串长度,内层循环是,循环验证各个String,class Solution { public String longestCommonPrefix(String[] strs) { int len=strs.length; if (strs.le...
2018-05-22 19:53:00 127
原创 LeetCode9回文问题
两种思路,一种是转成数组(比如字符数组),然后对比两头是否相等。我是这种思路class Solution { public boolean isPalindrome(int x) { String s = x+""; char[] cs=s.toCharArray(); int j=cs.length-1; boolean f...
2018-05-22 19:16:26 92
原创 8. 字符串转整数 (atoi) 题目说明
开始刷LeetCode题,这个是第八题。有这么几个问题需要注意:1.怎么判断超出范围:一开始我是用的取出整个完整整数字符串之后用Long存,如果比最大Int大/小,就输出最大/小值,但是这样不好,如果比Long大呢?所以,后来开始用计算的,用一个long,当计算出比极值大或者小时候,就返回极值了。2.charAt函数,确实是可以取一个char 值为 ‘ ’ (有空格),而不能用char=‘’(没有...
2018-05-22 18:33:59 119
原创 ubutun安装python3.6.5以及安装pip,flask的过程
搞了一上午,下面是这个过程,自己写一写,整理一下1. 安装python 3.6.51.1我直接在官网下载的最新版本3.6.5https://www.python.org下载后创建一个安装路径 mkdir /usr/local/python3,注意,其实我觉得usr不应该理解为usr的缩写,因为所有的程序都会安装在这里面,user更应该对应home里面的user解压tar -zvxf Python-...
2018-05-08 13:58:57 1583
原创 JAVA 实现罗马数字转整数
第一篇CSDN 博客,记录一下;哈哈哈!问题是这样,罗马数字转整数,规则在此不赘述。算法的关键在于:1. 先把字符转成整数,存成一个数组。2.然后计算这个正数应该+还是-,算法是这样,对于一个整数(对应相应的罗马字符),如果后面有整数大于他,他已经是负号,反之为正好。(罗马数字的一个规则)代码如下:package SimpleStart;class Solution { public sta...
2018-04-12 15:10:02 1166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人