![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题
不远
这个作者很懒,什么都没留下…
展开
-
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 · 98 阅读 · 0 评论 -
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 · 108 阅读 · 0 评论 -
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 · 108 阅读 · 0 评论 -
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 · 192 阅读 · 0 评论 -
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 · 250 阅读 · 0 评论 -
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 · 301 阅读 · 0 评论 -
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 · 111 阅读 · 0 评论 -
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 · 129 阅读 · 0 评论 -
387. 字符串中的第一个唯一字符
思路1:转换为字符数组,找到每一个字符,然后逐个扫描,这里有几种情况:1.如果处理当前这个index之外还有相等的,说明不是2.如果index是最后一个了,还没有找到除了本身之外的相等的,说明就是 public int firstUniqChar(String s) { if(s.length()==1){ return 0; } cha...原创 2018-05-24 11:23:54 · 543 阅读 · 0 评论 -
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 · 304 阅读 · 0 评论 -
28. 实现strStr()
提供一个不太好的思路,开始我试图用异或来计算出总的needle的结果,然后这个值和目标字符串异或,如果等于0,说明相同。但是这样不行,异或相当于一个加和结果,但是过程可能有很多组合。所以,最终还是老老实实的,如果发现第一位相等的,class Solution { public int strStr(String haystack, String needle) { if(need...原创 2018-05-24 17:01:30 · 458 阅读 · 0 评论 -
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 · 154 阅读 · 0 评论 -
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 · 159 阅读 · 0 评论 -
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 · 133 阅读 · 0 评论 -
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 · 280 阅读 · 0 评论 -
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 · 233 阅读 · 0 评论 -
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 · 374 阅读 · 0 评论 -
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 · 200 阅读 · 0 评论 -
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 · 271 阅读 · 0 评论 -
141. 环形链表
判断是否有环的问题,一方面,不仅他本身是一个环,还有可能有子环。所以要用快慢指针,让块指针先进入环,那么快慢指针迟早会在环中相遇。/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * ...原创 2018-05-25 12:02:19 · 203 阅读 · 0 评论 -
104. 二叉树的最大深度
这个最好的就是递归了:maxDepth函数返回的就是当前这个节点的状态,没有叶子,深度就是一,有叶子,继续用这个函数查看叶子的状态;/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * ...原创 2018-05-25 12:41:43 · 107 阅读 · 0 评论 -
101. 对称二叉树
1,递归条件是,两个叶子的值相当,左叶子的左叶子值等于右叶子的右叶子,左叶子的右叶子等于右叶子,空节点自然对称/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode...原创 2018-05-25 13:21:50 · 124 阅读 · 0 评论 -
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 · 208 阅读 · 0 评论 -
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 · 264 阅读 · 0 评论 -
LeetCode 14最长公共前缀
基本思路就是:选择第一个作为标准,从第一个字符开始,如果同样位置的都有,就加入输出的字符串,最外层循环是最小的字符串长度,内层循环是,循环验证各个String,class Solution { public String longestCommonPrefix(String[] strs) { int len=strs.length; if (strs.le...原创 2018-05-22 19:53:00 · 128 阅读 · 0 评论 -
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 · 277 阅读 · 0 评论 -
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 · 2456 阅读 · 0 评论 -
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 · 187 阅读 · 0 评论 -
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 · 217 阅读 · 0 评论 -
L136,只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 41.思路1:找到一个数字之后,扫描其余的,如果有重复,就pass,时间复杂度高,如果重复数字是最后一个,就是n^2class So...原创 2018-05-23 12:18:28 · 128 阅读 · 0 评论 -
异或的小应用(转载)
转载自: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 · 453 阅读 · 0 评论 -
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 · 211 阅读 · 0 评论 -
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 · 190 阅读 · 0 评论 -
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 · 120 阅读 · 0 评论 -
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 · 223 阅读 · 0 评论