⚡每日肥学⚡——算法&面试题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集合有哪几种方式?各自效率怎么样?
方式:
entrySet
,key+value
,key
,value
效率:
1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高
2)当数据量大的时候,采用entrySet遍历key+value的效率要高于keySet
3)当我们只需要取得value值时,采用value来遍历效率更高
特别介绍
📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏
📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
📣这是个面试和考研的算法练习我们一起加油上岸之路
以上是关于⚡每日肥学⚡——算法&面试题3️⃣的主要内容,如果未能解决你的问题,请参考以下文章
⚡每日算法&面试题⚡一起肥学1️⃣1️⃣(面试linux命令)