资讯专栏INFORMATION COLUMN

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

biaoxiaoduan / 725人阅读

导读

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

?算法题

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

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

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

示例 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 <= 1000 <= 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的效率要高于keySet3)当我们只需要取得value值时,采用value来遍历效率更高

特别介绍

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119313.html

相关文章

  • LeetCode刷83-简单-删除有序链表的重复项

    文章目录 ☀️ 前言 ☀️? 作者简介 ?? 一、题目描述 ?? 二、题目解析 ?? 三、代码 ?☁️ 1️⃣. python ☁️❄️ 2️⃣. C# ❄️ ? 结语 ? ☀️ 前言 ☀️ 算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题! ? 作者简介 ? 大家好,我是布小禅,一个尽力让无情的代码变得生动有趣的IT小白,很高兴能偶认识你,关注我...

    henry14 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<