新的一周继续加油!
Posted struggleforit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新的一周继续加油!相关的知识,希望对你有一定的参考价值。
(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 }
注意map.get 和map.put的使用
(2)414. Third Maximum Number
代码如下:
1 public class Solution { 2 public int thirdMax(int[] nums) { 3 int max, mid, min, count, t; 4 max = mid = min =Integer.MIN_VALUE; 5 count = 0; 6 t = 0; 7 for (int i = 0; i < nums.length; i++) { 8 if (nums[i] == Integer.MIN_VALUE) { 9 t = 1; 10 } 11 if (nums[i] > max) { 12 min = mid; 13 mid = max; 14 max = nums[i]; 15 count++; 16 } else if (nums[i] > mid && nums[i] < max) { 17 min = mid; 18 mid = nums[i]; 19 count++; 20 } else if (nums[i] > min && nums[i] < mid) { 21 min = nums[i]; 22 count++; 23 } 24 } 25 if (count < 2 || (count == 2 && t == 0)) { 26 return max; 27 } else { 28 return min; 29 } 30 } 31 }
解题思路:
注意[1,-2147483648,2]和[1,2]这两种情况下,max都是2,second都是1,third都是-2147483648。但是前者应该输出-2147483648,后者应该输出2。所以需要t标志位来确定数组中是否出现-2147483648。count用于计数寻找到前三大数字中的几个。如果小于2直接输出最大值;如果等于2 且数组中没有出现-2147483648,输出最大值;其余情况输出最小值。
(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 }
解题思路:
先将k转换成[0, n-1]内的数。先对[0, k]位置的数字进行反转,再对剩下的部分进行翻转,最后对整个数组进行翻转。
若先对整个数组进行翻转,再对[0, k-1]位置的数字进行反转,最后对剩下的部分进行翻转,就会时间超限!!!【原因未知】
以上是关于新的一周继续加油!的主要内容,如果未能解决你的问题,请参考以下文章