楼主: love1point
跳转到指定楼层
上一主题 下一主题
收起左侧

Leetcode 刷题记录!!!不信自己今年找不到工作!!!

 
🔗
 楼主| love1point 2015-5-31 17:35:22 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-16 10:08 编辑

Length of last word: https://leetcode.com/problems/length-of-last-word/
idea: 这题题目理解起来不是很难,记住用 if (flag) 来判断比较方便。

  1. public class Solution {
  2.     public int lengthOfLastWord(String s) {
  3.         int result = 0;
  4.         boolean flag = false;
  5.         for(int i = s.length()-1; i >= 0; i--)
  6.         {   
  7.             char c = s.charAt(i);
  8.             
  9.             if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
  10.             {
  11.                 flag = true;
  12.                 result++;
  13.             }
  14.             else
  15.             {
  16.                 if(flag)
  17.                 {
  18.                     return result;
  19.                 }
  20.             }
  21.         }
  22.         return result;
  23.     }
  24. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 18:12:27 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-16 10:12 编辑

Pow(x, n):  https://leetcode.com/problems/powx-n/
idea: 用二分法来做。 陷阱就是 整数 / 整数 还是整数

  1. public class Solution {
  2.     public double myPow(double x, int n) {
  3.           if(n == 0)
  4.         {
  5.             return 1.0;
  6.         }
  7.         double half = myPow(x, n/2);
  8.       
  9.         if(n % 2 == 0)
  10.         {
  11.             return half * half;
  12.         }
  13.         else if(n > 0)
  14.         {
  15.             return half * half * x;
  16.         }
  17.         else
  18.         {
  19.             return half * half / x;
  20.         }
  21.     }
  22. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 18:40:49 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-22 14:53 编辑

Major element: https://leetcode.com/problems/majority-element/
idea: 这应该是lc最短的代码了吧。后面还有其他做法,用hashmap
  1. public class Solution {
  2.     public int majorityElement(int[] nums) {
  3.         Arrays.sort(nums);
  4.         return nums[nums.length/2];
  5.     }
  6. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 18:55:00 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-16 10:17 编辑

Merge sorted array:  https://leetcode.com/problems/merge-sorted-array/
idea: 思路很简单。但要记得从后面比较起,大的赋过去。

  1. public class Solution {
  2.     public void merge(int[] nums1, int m, int[] nums2, int n) {
  3.         while(m > 0 && n > 0)
  4.         {
  5.             if(nums1[m-1] > nums2[n-1])
  6.             {
  7.                 nums1[m+n-1] = nums1[m-1];
  8.                 m--;
  9.             }
  10.             else
  11.             {
  12.                 nums1[m+n-1] = nums2[n-1];
  13.                 n--;
  14.             }
  15.         }
  16.         while(n > 0)
  17.         {
  18.             nums1[m+n-1] = nums2[n-1];
  19.             n--;
  20.         }
  21.     }
  22. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 20:09:14 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-24 23:04 编辑

Find peak element:  https://leetcode.com/problems/find-peak-element/
idea: 6.24.2015改成自己的代码风格重新写了一遍。思路很简单,就是按照题目定义来写代码,比较相邻的数字. 第一个if是根据[1] 这个test case 加上的。注意单独判断第一个数字和最后一个数字。中间的数字之间用for循环进行判断。



  1. public class Solution {
  2.     public int findPeakElement(int[] nums) {
  3.         if(nums.length == 1)
  4.         {
  5.             return 0;
  6.         }
  7.         if(nums[0] > nums[1])
  8.         {
  9.             return 0;
  10.         }
  11.         for(int i = 1; i < nums.length - 1; i++)
  12.         {
  13.             if(nums[i] > nums[i-1] && nums[i] > nums[i+1])
  14.             {
  15.                 return i;
  16.             }
  17.         }
  18.         if(nums[nums.length - 1] > nums[nums.length - 2])
  19.         {
  20.             return nums.length - 1;
  21.         }
  22.         return 0;
  23.     }
  24. }
复制代码

回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 20:38:41 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-25 10:44 编辑

Path sum:  https://leetcode.com/problems/path-sum/
idea: 不难,理解后再记住。这些if 也不是一下子就能写出来,很多都会是有些test case过不去才写出这些if的。递归一定要有出口,前面两个if就是出口。一般树的题目可以递归做

  1. public class Solution {
  2.     public boolean hasPathSum(TreeNode root, int sum) {
  3.         if(root == null)
  4.         {
  5.             return false;
  6.         }
  7.         
  8.         
  9.         if(root.left == null && root.right == null && root.val == sum)
  10.         {
  11.             return true;
  12.         }
  13.         else
  14.         {
  15.             return hasPathSum(root.left, sum-root.val) || hasPathSum(root.right, sum-root.val);
  16.         }
  17.     }
  18. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 20:38:49 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-16 09:18 编辑

重复了,已删
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 20:53:20 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-16 10:27 编辑

Maximum subarray: https://leetcode.com/problems/maximum-subarray/
idea:  这题按照如下代码走一边程序,不少题目需要用到如下套路

  1. public class Solution {
  2.     public int maxSubArray(int[] nums) {
  3.         int local = nums[0];
  4.         int max = nums[0];
  5.         
  6.         for(int i = 1; i < nums.length; i++)
  7.         {
  8.             local = Math.max(local + nums,nums);
  9.             max = Math.max(local,max);
  10.         }
  11.         return max;
  12.     }
  13. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 21:25:12 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-26 16:55 编辑

Jump game:  https://leetcode.com/problems/jump-game/
idea: 找的了更好解法,已更新,可用贪心算法跟着例子过一遍代码,代码也容易记忆下来

  1. public class Solution {
  2.     public boolean canJump(int[] nums) {
  3.         int max = nums[0];
  4.         for(int i = 1; i < nums.length; i++)
  5.         {
  6.             if(i <= max && i + nums[i] >= max)
  7.             {
  8.                 max = i + nums[i];
  9.             }
  10.         }
  11.         return max >= nums.length - 1;
  12.     }
  13. }
复制代码


回复

使用道具 举报

🔗
 楼主| love1point 2015-5-31 21:45:44 | 只看该作者
全局:
本帖最后由 love1point 于 2015-6-16 10:31 编辑

Rotate image:  https://leetcode.com/problems/rotate-image/
idea: 在纸上画一画,打些草稿,找到规律,重点在这行 copy[j][m-1-i] = matrix[j];

  1. public class Solution {
  2.     public void rotate(int[][] matrix) {
  3.         int m = matrix.length;
  4.         int[][] copy = new int[m][m];
  5.         for(int i = 0; i < m; i++)
  6.         {
  7.             for(int j = 0; j < m; j++)
  8.             {
  9.                 copy[j][m-1-i] = matrix[j];
  10.             }
  11.         }
  12.         
  13.         for(int i = 0; i < m; i++)
  14.         {
  15.             for(int j = 0; j < m; j++)
  16.             {
  17.                 matrix[j] = copy[j];
  18.             }
  19.         }
  20.         
  21.     }
  22. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表