首页 > 代码库 > 新的一周继续加油!

新的一周继续加油!

(1)Two Sum

技术分享

解题思路:

使用hashmap,将(目标和-当前元素值,当前元素位置)存入,当遇到(目标和-当前元素值)的值时,取出i即可。

技术分享
 1 public class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         HashMap<Integer,Integer> map = new HashMap<>();
 4         for (int i = 0; i < nums.length; i++) {
 5             if (map.get(nums[i]) != null) {
 6                 int[] result = {map.get(nums[i]), i};
 7                 return result;
 8             }
 9             map.put(target - nums[i], i);
10         }
11         int[] result= {};
12         return result;
13     }
14 }
View Code

注意map.get 和map.put的使用

(2)414. Third Maximum Number

(3)Rotate Array

技术分享

代码如下:

技术分享
 1 public class Solution {
 2     private void reverse(int[] nums, int start, int end) {
 3         while (start < end) {
 4             int temp = nums[start];
 5             nums[start] = nums[end];
 6             nums[end] = temp;
 7             start++;
 8             end--;
 9         }
10     }
11     public void rotate(int[] nums, int k) {
12         if (nums.length == 0) {
13             return;
14         }
15         k = k % nums.length;
16         //Time Limit Exceeded
17     //reverse(nums, 0, nums.length - 1);
18         //reverse(nums, 0, k - 1);
19         //reverse(nums, k, nums.length - 1);
20     //Accepted
21     reverse(nums, 0, nums.length - k - 1);
22         reverse(nums, nums.length - k, nums.length - 1);
23         reverse(nums, 0, nums.length - 1);
24     }
25 }
View Code

解题思路:

先将k转换成[0, n-1]内的数。先对[0, k]位置的数字进行反转,再对剩下的部分进行翻转,最后对整个数组进行翻转。 

若先对整个数组进行翻转,再对[0, k-1]位置的数字进行反转,最后对剩下的部分进行翻转,就会时间超限!!!【原因未知】 

新的一周继续加油!