代码随想录算法训练营番外 刷题日记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

相关文章

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

Java实现批量化操作Excel文件的示例代码

《Java实现批量化操作Excel文件的示例代码》在操作Excel的场景中,通常会有一些针对Excel的批量操作,这篇文章主要为大家详细介绍了如何使用GcExcel实现批量化操作Excel,感兴趣的可... 目录前言 | 问题背景什么是GcExcel场景1 批量导入Excel文件,并读取特定区域的数据场景2