自学内容网 自学内容网

9.26号算法题

 数组的遍历

414.第三大的数

 

题解:

class Solution {
    public int thirdMax(int[] nums) {
    TreeSet<Integer>treeSet = new TreeSet<Integer>();
//生成一个TreeSet对象,存储有序唯一整数
    for (int num : nums){//遍历数组
        treeSet.add(num);//将数组中的整数加到TreeSet对象中
        if (treeSet.size()>3){
            treeSet.remove(treeSet.first());
//如果TreeSet对象数量大于3,将最小的数移除
        }
    }
    return treeSet.size() == 3 ? treeSet.first() : treeSet.last();
//如果TreeSet的大小等于3,则返回最小的数也就是第三大的数;如果小于3则返回最大的数
    }
}

 Tips:Java TreeSet集合详解-CSDN博客

628.三个数的最大乘积

 

题解:

class Solution {
    public int maximumProduct(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        return Math.max(nums[0]*nums[1]*nums[2],nums[n-1]*nums[n-2]*nums[n-3]);
    }
}
/*先对数组进行排序
排序后判断如何最大发现有三种可能情况
1.都为正数时或都为负数时,最大的三个数相乘最大
有正有负:(1)乘积最大值为排序数组最后三个数相乘
(2)乘积最大值为排序数组前两个负数与数组最后一个正数相乘
最后总结为:max(排序数组最后三个数相乘,排序数组前两个负数与数组最后一个正数相乘)
*/

 88.合并两个有序数组

题解:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int tail = nums1.length - 1;
        int m1 = m - 1;
        int n1 = n - 1;
        while (n1 >= 0) {
            if (m1 < 0 || nums1[m1] <= nums2[n1]) {
                nums1[tail--] = nums2[n1--];
            } else {
                nums1[tail--] = nums1[m1--];
            }
        }
    }
}


原文地址:https://blog.csdn.net/Junhe4512/article/details/142548373

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!