⚡每日肥学⚡——算法&面试题3️⃣

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⚡每日肥学⚡——算法&面试题3️⃣相关的知识,希望对你有一定的参考价值。

导读

小伙伴们新的学期又要开始了,您是否已经做好了冲刺的准备了呢?如果您想在这个学期收获的比别人更多我建议给肥肥点个关注。我们一起来增长知识,无论你是考研还是找工作或者是要加薪。这里都是一个不错的选择。让我们红尘作伴,一起肥学!!!

📛算法题

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须 原地 修改,只允许使用额外常数空间。

示例 1:

输入:nums = [1,2,3]
输出:[1,3,2]
示例 2:

输入:nums = [3,2,1]
输出:[1,2,3]
示例 3:

输入:nums = [1,1,5]
输出:[1,5,1]
示例 4:

输入:nums = [1]
输出:[1]
 
提示:

1 <= nums.length <= 100
0 <= nums[i] <= 100

一点点思路

我觉得这种题肯定是要用到遍历的,关于遍历的题我们也做过好几道了有滑动窗口,中心扩散法。。。你会发现这些方法其实都会用到双指针。所以我们得出结论这种题我们最最最普遍的方法就是构造双指针,至于指针怎么移动就看你的解题技巧了。

源码和解析

class Solution {
    public void nextPermutation(int[] nums) {
    //倒着遍历所以i是num的长度-2
        int i = nums.length - 2;
        //找到比前一个比后一个小的数组下标比如数组[2,3,9,7,6]这个循环结束时i指向3
        while (i >= 0 && nums[i] >= nums[i + 1]) {
            i--;
        }
        if (i >= 0) {
            int j = nums.length - 1;
            //还是[2,3,9,7,6]这个例子i指向3以后找比三大的数这个时候就时6
            while (j >= 0 && nums[i] >= nums[j]) {
                j--;
            }
            //然后交换3和6的位置
            swap(nums, i, j);
        }
        //这个函数的主要作用就是将6后面的数(当然这里没有数我们假设有但是肯定时比6小的就假设为
        //2,1两个吧[2,3,9,7,6,2,1])2,1倒叙排列变成最小的1,2
        reverse(nums, i + 1);
    }

    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

    public void reverse(int[] nums, int start) {
        int left = start, right = nums.length - 1;
        while (left < right) {
            swap(nums, left, right);
            left++;
            right--;
        }
    }
}


📛面试题

Java遍历Map集合有哪几种方式?各自效率怎么样?

方式:

entrySetkey+valuekeyvalue

效率:

1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高

2)当数据量大的时候,采用entrySet遍历key+value的效率要高于keySet

3)当我们只需要取得value值时,采用value来遍历效率更高

特别介绍

📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个面试和考研的算法练习我们一起加油上岸之路

以上是关于⚡每日肥学⚡——算法&面试题3️⃣的主要内容,如果未能解决你的问题,请参考以下文章

⚡每日算法&面试题⚡一起肥学1️⃣1️⃣(面试linux命令)

⚡每日算法&面试题⚡一起肥学6️⃣

⚡每日算法&面试题⚡一起肥学1️⃣0️⃣( 含 HashMap& TreeMap)

⚡每日算法&面试题⚡一起肥学7️⃣

⚡每日算法&面试题⚡一起肥学5️⃣

⚡每日肥学⚡——算法&面试题2️⃣