代码随想录算法训练营番外 刷题日记0301 || 29、两数相除,31、下一个排列

本文主要是介绍代码随想录算法训练营番外 刷题日记0301 || 29、两数相除,31、下一个排列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

29、两数相除

思路:不断相减就是求解的最直接方法,我这样计算时间复杂度有点高

// 时间复杂度O(count*divisor)
// 空间复杂度O(1)class Solution {int res = 0;public int divide(int dividend, int divisor) {// dividend 是被除数if(dividend == 0)   return 0;if(divisor == 1)    return dividend;if(divisor == -1){if(dividend == Integer.MAX_VALUE)return -dividend;else if(dividend == Integer.MIN_VALUE)return Integer.MAX_VALUE;   // 怕的是特殊情况Integer.MIN_VALUE 除以 -1,那么就超过结果的范围了}// 不断相减就是求解的最直接方法int count = 0;long bc = (long)dividend;long c = (long)divisor;if(bc<0 && c<0){while(bc - c <= 0){bc -= c;count++;}return count;}else if(bc<0 && c>0){while(bc + c <= 0){bc += c;count++;}return -count;}else if(bc>0 && c<0){while(bc + c >= 0){bc += c;count++;}return -count;}else{while(bc - c >= 0){bc -= c;count++;}return count;}}
}

 31、下一个排列

// 时间复杂度[ O(nlogn),O(n^2) ) 
// 空间复杂度O(1)class Solution {public void nextPermutation(int[] nums) {/* 总体思路分成4步1、从后向前遍历,找到第一次出现递增的两个数,i-1与i是递增的2、其次找[i,nums.length-1]位置中最接近且比nums[i]大的元素,并与nums[i]交换3、交换完成后,对于[i,nums.length-1]进行递增的排序4、输出答案*/// 分割点就是出现序列变化的地方,因为需要一个更大的序列,所以分割点的位置就是让大的元素向前移动一位的关键位置int split = -1;int n = nums.length;for(int i=n-1; i>0; i--){if(nums[i-1] < nums[i]){// 找到了一次递减的地方// i-1位置就是分割点int j = i;  int min = i;              while(j<n){// 出现了第一个小于的,说明可以碰到仅次于分割点位置的较大元素了,则交换if(nums[j] > nums[i-1] && nums[j] < nums[min]){min = j;}j++;}int temp = nums[min];nums[min] = nums[i-1];nums[i-1] = temp;split = i-1;break;}}// 如果整个数组都是递减的,那么整个数组重新排序就可以,split为-1quickSort(nums, split+1, n-1);}public int[] quickSort(int[] a, int i, int j) {//   doQuickSort(a, n, 0, n - 1);doQuickSort(a, j - i + 1, i, j);return a;}// 快速排序public void doQuickSort(int[] a, int n, int start, int end) {if (n > 1) {int current = a[end];int minLen = 0;// 小于区间的长度int i = start;for (; i < end; i++) {if (a[i] < current) {//发现比当前数小的数,扩充小于区间int temp = a[start + minLen];a[start + minLen] = a[i];a[i] = temp;minLen++;}}a[end] = a[start + minLen];a[start + minLen] = current;//当前位置已经确定,排左右序列doQuickSort(a, minLen, start, start + minLen - 1);doQuickSort(a, n - minLen - 1, start + minLen + 1, end);}}
}

这篇关于代码随想录算法训练营番外 刷题日记0301 || 29、两数相除,31、下一个排列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765441

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave