查看: 4763| 回复: 29
跳转到指定楼层
上一主题 下一主题
收起左侧

三周刷题记录,和同学们讨论,欢迎大家指正我的代码需要优化的地方

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
我三周后在职跳槽onsite,刚收的通知,好久没刷了,目标是一百题。

上一篇:找小伙伴一起学数据结构
下一篇:有近期准备脸家的面试的,组队刷题吗?
推荐
 楼主| love1point 2017-2-12 04:29:18 | 只看该作者
全局:
8) 409. Longest Palindrome

I tried to use HashMap, but cannot work for all test cases.
Any one can debug it?

  1. import java.util.*;
  2. public class Solution {
  3.     public int longestPalindrome(String s) {
  4.         HashMap<Character, Integer> map = new HashMap<Character, Integer>();
  5.         int result = 0;
  6.         for(int i= 0; i < s.length(); i++)
  7.         {
  8.             if(map.get(s.charAt(i)) == null)
  9.             {
  10.                 map.put(s.charAt(i), 1);
  11.             }
  12.             else
  13.             {
  14.                 map.put(s.charAt(i), map.get(s.charAt(i)) + 1);
  15.             }
  16.         }
  17.         
  18.         Collection<Integer> valuesSet = map.values();
  19.         Iterator<Integer> iter = valuesSet.iterator();
  20.         
  21.         HashSet<Integer> hs = new HashSet<Integer>();
  22.         ArrayList<Integer> array = new ArrayList<Integer>();
  23.         while(iter.hasNext())
  24.         {
  25.             array.add(iter.next());
  26.         }
  27.         for(int i = 0; i < array.size(); i++)
  28.         {
  29.             if(array.get(i) % 2 == 0)
  30.             {
  31.                 result += array.get(i);
  32.             }
  33.         }
  34.         
  35.         for(int i = 0; i < array.size(); i++)
  36.         {
  37.             if(array.get(i) % 2 != 0)
  38.             {
  39.                 return result + array.get(i);
  40.             }
  41.         }
  42.         return result;
  43.     }
  44. }
复制代码



I refer others solution only use HashSet.
Working version:

  1. public class Solution {
  2.     public int longestPalindrome(String s) {
  3.         HashSet<Character> hs = new HashSet<Character>();
  4.         int counter = 0;
  5.         for(int i = 0; i < s.length(); i++)
  6.         {
  7.             if(!hs.contains(s.charAt(i)))
  8.             {
  9.                 hs.add(s.charAt(i));
  10.             }
  11.             else
  12.             {
  13.                 hs.remove(s.charAt(i));
  14.                 counter++;
  15.             }
  16.         }
  17.         if(hs.size() != 0)
  18.         {
  19.             return 2 * counter + 1;
  20.         }
  21.         else
  22.         {
  23.             return 2 * counter;
  24.         }
  25.     }
  26. }
复制代码
回复

使用道具 举报

推荐
 楼主| love1point 2017-2-12 13:04:40 | 只看该作者
全局:
13) 515. Find Largest Element in Each Row

BFS

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. *     int val;
  5. *     TreeNode left;
  6. *     TreeNode right;
  7. *     TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution {
  11.     public int[] findValueMostElement(TreeNode root) {
  12.         if(root == null)
  13.         {
  14.             return new int[0];
  15.         }
  16.         ArrayList<Integer> list = new ArrayList<Integer>();
  17.         Queue<TreeNode> queue = new LinkedList<TreeNode>();
  18.         queue.offer(root);
  19.         while(queue.size() > 0)
  20.         {
  21.             int max = Integer.MIN_VALUE;
  22.             int size = queue.size();
  23.             for(int i = 0; i < size; i++)
  24.             {
  25.                 TreeNode node = queue.poll();
  26.                 max = Math.max(node.val, max);
  27.                 if(node.left != null)
  28.                 {
  29.                     queue.offer(node.left);
  30.                 }
  31.                 if(node.right != null)
  32.                 {
  33.                     queue.offer(node.right);
  34.                 }
  35.             }
  36.             list.add(max);
  37.         }
  38.         int[] result = new int[list.size()];
  39.         for(int i = 0; i < list.size(); i++)
  40.         {
  41.             result[i] = list.get(i);
  42.         }
  43.         return result;
  44.     }
  45. }
复制代码
回复

使用道具 举报

推荐
 楼主| love1point 2017-2-13 01:23:18 | 只看该作者
全局:
14) Boomerangs

I did not think of using HashMap. Refer others solution. I think this one is tricky.

This one should not be easy level.

  1. public class Solution {
  2.     public int numberOfBoomerangs(int[][] points) {
  3.         int result = 0;
  4.         HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
  5.         for(int i = 0; i < points.length; i++)
  6.         {
  7.             for(int j = 0; j < points.length; j++)
  8.             {
  9.                 if( i == j)
  10.                 {
  11.                     continue;
  12.                 }
  13.                 int d = getDistance(points[i], points[j]);
  14.                 if(map.get(d) != null)
  15.                 {
  16.                     map.put(d, map.get(d) + 1);
  17.                 }
  18.                 else
  19.                 {
  20.                     map.put(d, 1);
  21.                 }
  22.             }
  23.                 for(Integer value : map.values())
  24.                 {
  25.                     result += value * (value-1);
  26.                 }
  27.             map.clear();
  28.         }
  29.         return result;
  30.     }
  31.    
  32.     private int getDistance(int[] a, int[] b)
  33.     {
  34.         int dx = a[0] - b[0];
  35.         int dy = a[1] - b[1];
  36.         return dx*dx + dy*dy;
  37.     }
  38. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-11 10:45:35 | 只看该作者
全局:
1 ) 461. Hamming Distance

This problem I stuck is how to transfer int to bits string. I do not think this question will test us any algorithm. Just use build-in method, not very fun. I referred other's solution.

How to transfer into same lengths of bit strings using Integer.toBinaryString()????????
  1. public class Solution {
  2.     public int hammingDistance(int x, int y) {
  3.        return Integer.bitCount( x ^ y);
  4.     }
  5. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-11 11:06:08 | 只看该作者
全局:
2) 476. Number Complement

Mistake: I try to change string in-place. But string is immutable in java !!!!!
Get bit string of int first, then flip string. Then change to int using build-in method.
No fun again, MAKE AMERICA GREAT AGAIN!!!

  1. public class Solution {
  2.     public int findComplement(int num) {
  3.         String s = Integer.toBinaryString(num);
  4.         String result = "";
  5.         for(int i = 0; i < s.length(); i++)
  6.         {
  7.             if(s.charAt(i) == '1')
  8.             {
  9.                 result += '0';
  10.             }
  11.             else
  12.             {
  13.                 result += '1';
  14.             }
  15.         }
  16.         return Integer.parseInt(result, 2);
  17.     }
  18. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-11 11:41:10 | 只看该作者
全局:
3) 412. Fizz Buzz

Easy enough.
just remember that how to transfer int to string

  1. public class Solution {
  2.     public List<String> fizzBuzz(int n) {
  3.         List<String> result = new ArrayList<String>();
  4.         for(int i = 1; i <= n; i++)
  5.         {
  6.             if(i % 3 == 0 && i % 5 == 0)
  7.             {
  8.                 result.add("FizzBuzz");
  9.             }
  10.             else if (i % 3 == 0)
  11.             {
  12.                 result.add("Fizz");
  13.             }
  14.             else if(i % 5 == 0)
  15.             {
  16.                 result.add("Buzz");
  17.             }
  18.             else
  19.             {
  20.                 result.add(Integer.toString(i));
  21.             }
  22.         }
  23.         return result;
  24.     }
  25. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-11 12:17:41 | 只看该作者
全局:
4) 448. Find All Numbers Disappeared in an Array

I cannot figure out how to solve it without using extra space.

  1. public class Solution {
  2.     public List<Integer> findDisappearedNumbers(int[] nums) {
  3.         List<Integer> result = new ArrayList<Integer>();
  4.         HashSet<Integer> hs = new HashSet<Integer>();
  5.         for(Integer i : nums)
  6.         {
  7.             hs.add(i);
  8.         }
  9.         
  10.         for(int i = 1; i <= nums.length; i++)
  11.         {
  12.             if(!hs.contains(i))
  13.             {
  14.                 result.add(i);
  15.             }
  16.         }
  17.         return result;
  18.     }
  19. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-11 13:09:46 | 只看该作者
全局:
5) 455. Assign Cookies

Cannot find out how to do.
Refer other's solution. Using greedy algorithm.

  1. public class Solution {
  2.     public int findContentChildren(int[] g, int[] s) {
  3.         Arrays.sort(g);
  4.         Arrays.sort(s);
  5.         int result = 0;
  6.         for(int i = 0 ; i < s.length && result < g.length; i++)
  7.         {
  8.             if(s[i] >= g[result])
  9.             {
  10.                 result++;
  11.             }
  12.         }
  13.         return result;
  14.     }
  15. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-12 01:09:52 | 只看该作者
全局:
6 ) 383. Ransom Note
Feb. 11, 2017

Just use hashmap to count how many char we have in magazine string, then traverse ransomNote to check if its char is in hashmap, if does, minus one. If we find its value is null or value is 0, just  return false.

  1. public class Solution {
  2.     public boolean canConstruct(String ransomNote, String magazine) {
  3.         if(ransomNote == null && magazine == null)
  4.         {
  5.             return true;
  6.         }
  7.         if(magazine == null)
  8.         {
  9.             return false;
  10.         }
  11.         HashMap<Character, Integer> map = new HashMap<Character, Integer>();
  12.         for(int i = 0; i < magazine.length(); i++)
  13.         {
  14.             if(map.get(magazine.charAt(i)) != null)
  15.             {
  16.                 map.put(magazine.charAt(i), map.get(magazine.charAt(i)) + 1);
  17.             }
  18.             else
  19.             {
  20.                 map.put(magazine.charAt(i), 1);
  21.             }
  22.         }
  23.         
  24.         for(int j = 0; j < ransomNote.length(); j++)
  25.         {
  26.             if(map.get(ransomNote.charAt(j)) == Integer.valueOf(0) || map.get(ransomNote.charAt(j)) == null)
  27.             {
  28.                 return false;
  29.             }
  30.             else
  31.             {
  32.                 map.put(ransomNote.charAt(j), map.get(ransomNote.charAt(j)) - 1);
  33.             }
  34.         }
  35.         return true;
  36.     }
  37. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-12 01:23:07 | 只看该作者
全局:
7) 387. First Unique Character in a String

similar to 6.

  1. public class Solution {
  2.     public int firstUniqChar(String s) {
  3.         HashMap<Character, Integer> map = new HashMap<Character, Integer>();
  4.         for(int i = 0; i < s.length(); i++)
  5.         {
  6.             if(map.get(s.charAt(i)) == null)
  7.             {
  8.                 map.put(s.charAt(i), 1);
  9.             }
  10.             else
  11.             {
  12.                 map.put(s.charAt(i), map.get(s.charAt(i)) + 1);
  13.             }
  14.         }
  15.         
  16.         for(int j = 0 ; j < s.length(); j++)
  17.         {
  18.             if(map.get(s.charAt(j)) == Integer.valueOf(1))
  19.             {
  20.                 return j;
  21.             }
  22.         }
  23.         return -1;
  24.     }
  25. }
复制代码
回复

使用道具 举报

🔗
 楼主| love1point 2017-2-12 05:25:46 | 只看该作者
全局:
9) 401. Binary Watch

I just do not why this question is easy level. I do not know how to do it.
Refer others solution.

Why h * 64 + m?????????

  1. public class Solution {
  2.     public List<String> readBinaryWatch(int num) {
  3.         List<String> result = new ArrayList<String>();
  4.         for(int h = 0; h < 12; h++)
  5.         {
  6.             for(int m = 0; m < 60; m++)
  7.             {
  8.                 if(Integer.bitCount(h * 64 + m) == num)
  9.                 {
  10.                     result.add(String.format("%d:%02d", h, m));
  11.                 }
  12.             }
  13.         }
  14.         return result;
  15.     }
  16. }
复制代码

回复

使用道具 举报

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

本版积分规则

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