zoukankan      html  css  js  c++  java
  • Array Four

    (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

    代码如下:

     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 }
    View Code

    解题思路:

    注意[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 }
    View Code

    解题思路:

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

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

  • 相关阅读:
    网络知识: 物理层PHY 和 网络层MAC
    Android lowmemorykiller
    devres in linux driver
    spinlock in linux kernel
    JavaWeb图片URL中文乱码
    Linux 里的 2>&1含义
    python脚本linux上后台执行
    linux之定时任务
    python中if not x: 和 if x is not None: 和 if not x is None的使用和区别
    私钥和公钥的区别和联系
  • 原文地址:https://www.cnblogs.com/struggleli/p/6133567.html
Copyright © 2011-2022 走看看