题
Maggie's secret
我在拼命
展开
-
java - LeetCode 287. 寻找重复数(全面解析,思路清晰)(二分查找)
LeetCode 287. 寻找重复数b站视频,一分钟画图解析。链接: https://b23.tv/JOhtcK.思路:整个数组只有一个重复数,其余都是一个数。我们就从这些数的中位数开始找。遍历整个数组找出小于或大于中位数的个数,如果个数大于中位数,说明有重复的数字。继续二分查找。解析:设置两个变量,记录整个数组最小值和最大值。再设置一个计数变量。开始循环,条件:最小值小于最大值。二分查找,算出中位数,找中位数。①遍历整个数组找小于中位的数,并计数;②再将个数与中位数比较,如果个数比原创 2020-11-30 17:05:12 · 1284 阅读 · 11 评论 -
java - LeetCode 167. 两数之和 II - 输入有序数组(Easy,思路解析)(二分查找)
LeetCode 167. 两数之和 II - 输入有序数组条件:1.返回的下标值(index1 和 index2)不是从零开始的,是从1开始的。解析:1.设置一个新数组,用来保存最终结果。2.设置两个指针,指向最左和最右。3.开始循环,条件:左小于等于右。将左右相加,值是否等于目标值,如果等于就将两个值赋给新设的数组。值比目标值小,我们让左指针左移,是左右相加值变大;值比目标值大,让右指针向左移,使左右相加值变小。class Solution { public int[] tw原创 2020-11-30 15:38:48 · 191 阅读 · 7 评论 -
java - LeetCode 33.搜索旋转排序数组(5分钟讲解,简单易懂)(二分查找)
二分查找正常解法class Solution { public int search(int[] nums, int target) { for(int i = 0; i < nums.length; i++){ if(nums[i] == target) return i; } return -1; }}原创 2020-11-30 01:40:31 · 298 阅读 · 3 评论 -
java - LeetCode 50.Pow(x, n) 计算x的n次幂函数(三种解法)(详细讲解,小白入手)
LeetCode 50.Pow(x, n)计算x的n次幂函数。-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1] 。 解析:负数的边界 -2^31 , 直接转正数会越界。正数边界2^31 − 1,负数转正2^31,越界。所以将n的类型int转为类型long。次幂n是负数,首先要转正,将1/x,再-n转正。如果次幂是单数,我们先保留下x,将次幂n-1,再在最终结果res乘x。因为二分查找每次减半(i/2),所以原创 2020-11-28 01:10:46 · 843 阅读 · 1 评论 -
c语言 - 找单身狗问题(简单思路)
找单身狗问题一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。void Bobsort(int* a, int n)//冒泡排序{ int j = 0; int i = 0; for (i = 0; i < n; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a原创 2020-11-25 23:57:34 · 750 阅读 · 1 评论 -
java - LeetCode121.买卖股票的最佳时机(简单代码,简单思路)(数组)
LeetCode121.买卖股票的最佳时机思路:设置入手最小值和卖出后最高利润变量。遍历整个数组,现值小于最小值,就将它设为最小值;计算最小值与当前股价之间的利润,算出最大值。class Solution { public int maxProfit(int[] prices) { int maxProfit = 0; int min = prices[0]; for(int i = 1; i < prices.length;原创 2020-11-24 02:26:15 · 131 阅读 · 0 评论 -
java - LeetCode 15.三数之和(思路简单,小白入手)(数组)
LeetCode 15.三数之和思路:将这个数组设置为一个嵌套集合,list集合里面存放list类型数据,里面的list集合存放Integer类型数据。将这个数组进行排序。整个数组遍历查找。我们设置三个指针,i、left、right;一个固定指针 i 从第一个开始走;左指针从它的后一位 i+1 开始,右指针从最后一个元素开始,让左右指针移动查找。三数之和sum等于0,将这三个数添加到集合里,接着左右指针继续移动。如果sum小于0,左指针右移,找大一点的数;如果sum大于0,右指针左移,找小原创 2020-11-24 01:12:57 · 170 阅读 · 0 评论 -
java - LeetCode 53.最大子序和(代码简洁,简单易懂,小白入手)(数组)
LeetCode 53.最大子序和贪心算法思路:将当前值与之前最大子序和比较;如果当前值比之前所算的子序列和要大,那我们就丢弃之前的子序列和,将当前值作为一个新的子序列头开始继续寻找最大子序和。方法:先设置一个变量val,比较当前值与之前最大子序和,取其中最大值。再设置一个变量max,储存整个数组中计算的最大子序和。class Solution { public int maxSubArray(int[] nums) { int val = nums[0];原创 2020-11-23 23:54:12 · 122 阅读 · 0 评论 -
java - LeetCode 11.盛最多水的容器(简单思路,简洁代码)(数组)
LeetCode 11.盛最多水的容器解析:1 . 设置两个指针变量,在数组最左和最右。设置一个最大容积变量。2 .先判断当前的容积与最大容积大小,再进行指针更新。① 只要左指针小于有指针,就一直循环查找。容器容积公式:底×高。高:左和右中最小的值。底:右-左。算出当前容积,与之前最大容积相比较,求出最大容积。② 如果左值大于右值,就让小的右值更新向前移动;如果左值小于右值,就让小的左值更新向后移动;如果相等,两个都移动。3 .返回最大容积。class Solution { p原创 2020-11-22 17:17:05 · 120 阅读 · 0 评论 -
java - LeetCode 3.最长无重复字符串(哈希集)(字符串)
哈希集class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); Set<Character> set = new HashSet<>(); int max = 0; int left = 0; int rigth = 0; char[] ss = s.toCharArr原创 2020-11-19 17:25:57 · 113 阅读 · 0 评论 -
Java - LeetCode 1.两数之和(哈希表、暴力解法)(小白入手,全解析)(数组)
哈希表(速度快)class Solution { public int[] twoSum(int[] nums, int target) { int n = nums.length; int [] res = new int [2]; if(n == 0) return res; HashMap<Integer,Integer> map = new HashMap<>();原创 2020-11-19 01:34:32 · 202 阅读 · 0 评论 -
Java - LeetCode 20.有效的括号(代码简洁,思路易懂,小白入手)(字符串)
leetcode 20. 有效的括号规律:先出现的后匹配。栈:先进后出。匹配的过程就是出栈的过程。下面给出两种方法:1、最简单算法。(建议使用)2、利用哈希配对简单代码:(用时1ms)class Solution { public boolean isValid(String s) { //创建一个栈。 Stack<Character> stack = new Stack<Character>(); //遍历,取出这个字原创 2020-11-18 22:57:59 · 141 阅读 · 0 评论 -
Java - LeetCode 5.最长回文字子串(中心扩散、动态规划)(字符串)
最长回文子串中心扩散思想:遍历整个字符串数组,每个字符都尝试向两边扩散,看两边字符是否相等,相等则继续向两边扩散;不相等则查看下一个字符。substring(a,b),包括a,不包括b。前闭后开区间,所以最终走到a前面,b后面,取值时(a+1,b),这样才能取到b值。将class Solution { //记录前后两个下标的数组rang int [] rang = new int[2]; public String longestPalindrome(String s) {原创 2020-11-17 23:50:48 · 264 阅读 · 0 评论 -
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(小白入手)
杨氏矩阵题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的。请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);思路:首先按题目创建一个每行从左到右递增,从上到下是递增的矩阵。因为时间复杂度小于O(N),所以不能用两个for循环嵌套。用一个循环。那我们就从第0行的最后一位元素开始找, 将要查找值与它比较;查找值大我们就去下一行找(i++),因为这个值已经是本行最大值了;查找值小我们就往这行前面找(j - -),因为当前值是本行最大值。找到返原创 2020-11-16 01:30:32 · 832 阅读 · 0 评论 -
c语言 - 字符串左旋,可以左旋字符串中的k个字符(思路清晰,代码简洁)(小白入手)
字符串左旋题目:实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDA,ABCD左旋两个字符得到CDAB。思路:创建一个函数,实现遍历一次数组,让第一个元素移到最后一位,后面全部的元素都向前左移一位。因为需要左旋多个字符,那我们就要将这个循环实现多次。所以在这个循环外面套一个循环实现进行 k 次,即左旋 k 个字符。解析:key为左旋的字符数;一个for循环数组,次数为key,相当于进行key次:后一位元素赋值到前一位。这个for里再嵌套一个for循环遍历原创 2020-11-16 00:38:02 · 263 阅读 · 0 评论 -
c语言 - 模仿qsort的功能实现一个通用的冒泡排序
模仿qsort的功能实现一个通用的冒泡排序#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <windows.h>int CompInt(const void *_xp, const void *_yp){ int *xp = (int*)_xp;//qsort是无类型函数,需要进行强转。 int *yp = (int*)_yp; if (*xp > *原创 2020-11-15 21:53:03 · 206 阅读 · 0 评论 -
c语言 -使用库函数,qsort排序各种类型的数据(回调函数)(升序和降序)
使用库函数,qsort排序各种类型的数据回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。qsort函数C语言编译器函数库自带的排序函数。qsort 的函数原型是是base所指数组进行排序。qsort函数包含在C 标准库 - <stdlib.h>中。void q原创 2020-11-15 21:00:32 · 1359 阅读 · 1 评论 -
c语言 - 回文数(小白首选,简洁易懂)
回文数题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例 :输入: 12321输出: true解析:(整数反转的延伸)负数不可以,因为有负号。-12321不等于12321- 。temp记录每次的个位数,sum保存每次回文的结果值,temp2保存x值,用于最后与sum作比较,是否回文后与原值相等。此函数为bool函数,返回值为 1 或 0 。不考虑溢出情况bool isPalindrome(int x){ if(x<0)原创 2020-11-11 11:30:13 · 4005 阅读 · 2 评论 -
c语言 - 整数反转(清晰思路,简洁代码)
题目:j将一个 32 位的有符号整数,要将这个整数中每一位数字进行反转。假设我们的环境只能存储得下 32 位的有符号整数,第1位为符号位和后32位,其数值范围为 [−2^31 , 2^31 − 1]。根据这个假设,如果反转后整数溢出那么就返回 0。例:输入: 12345输出: 54321解析:第1位为符号位和后32位,其数值范围为 [−2^31 , 2^31 − 1],即[ −2147483648 ~ 2147483647 ]。超过这个范围就溢出,所以我们要判断,如果前8位相等原创 2020-11-11 11:04:29 · 3530 阅读 · 1 评论 -
c语言 - 打印菱形(小白入手,思路简单,正确打印!!)(看这一篇就够了!)
题:打印菱形思路:菱形分为上半部分三角形和下半部分倒三角形两部分,中间空出的地方为空格。空格个数:第一行符号在正中间,所以空格个数为(n-1)/2。后面每一行都比上一行多了两个字符,即空格数量每一行-2,得第 i 行空格个数:(n-1)/2 - 2(i-1)。字符数:前半部分递增,后半部分递减,所以分前后两部分输出。第一行中间一个字符,之后每一行前半部分相对于上一行多了两个字符,所以第 i 行前半部分字符个数为2i-1。后半部分字符,比前半部分少1,故为2i-2。在这里插入代码片.原创 2020-11-10 02:02:06 · 1654 阅读 · 0 评论 -
c语言 - 计算器求和(思路解析)求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和
计算求和题目:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222思路解析:取两个值,一个数字n,一个位数m。传入参数,创建一个总和sum,一个辅助变量x。for循环次数为位数m次。x每次*10+n, sum 每次加上上次的sum.代码:#include<stdio.h>#pragma warning(disable:4996) #include<Windows.h>void Sum原创 2020-11-10 00:41:31 · 878 阅读 · 0 评论 -
c语言 -字符串逆序(全解析)(递归和非递归)
字符串逆序题目:写一个函数,可以逆序一个字符串的内容。解析:我们可以将字符串两边的字符逐个交换。设置两个指针,分别指向字符串的头部和尾部,然后交换两个指针所指的字符,并向中间移动指针,当左边大于右边时结束交换。例:字符串"abcdef",逆序的过程分别是交换字符a和f,交换字符b和e,交换字符c和d。递归代码:#include<stdio.h>#pragma warning(disable:4996) #include<Windows.h>void Reve原创 2020-11-09 22:25:01 · 1293 阅读 · 0 评论 -
c语言 - 使用指针打印数组内容(详细解析)
使用指针打印数组内容题目:写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。解析:创建一个指针变量*p指向数组arr。遍历数组,以指针解引用输出每一位。*p = arr[0];而 *(p+1)= arr[1]。+1等于加int步长4。代码:#include<stdio.h>#pragma warning(disable:4996) #include<Windows.h>int main(){ int arr[] =原创 2020-11-09 21:21:56 · 5202 阅读 · 0 评论 -
c语言 - 调整奇数偶数顺序,使奇数位于偶数前面(全解析)(两种方法)
调整奇数偶数顺序题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。解析:创建数组,取数组长度num。将数组和长度传入Switch函数。函数中,创建新的数组arr2;第一次遍历找出数组中奇数,传入arr2;第二次遍历找出数组中的偶数,传入arr2;第三次遍历输出arr2。代码1:#include<stdio.h>#pragma warning(disable:4996) #include&原创 2020-11-09 20:37:51 · 1716 阅读 · 2 评论 -
c语言 - 杨辉三角(全解析,简洁易懂)- 等腰和不等腰
打印杨辉三角(不等腰)(等腰)在屏幕上打印杨辉三角。11 11 2 11 3 3 1规律:1.每一行,第一列和最后一列都是1。2.每一行,列数,和当前行号相同。3.第 i 行 第 j 列元素的内容,等于 i -1 行 j -1 列 + i -1行 j 列。不等腰:#include<stdio.h>#pragma warning(disable:4996) #include<Windows.h>int main(){ int n; printf("原创 2020-11-09 01:30:07 · 2292 阅读 · 1 评论 -
c语言 - 《猜凶手》问题(全面解析)
猜凶手问题题目:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。解析:凶手从A开始for循环寻找符合条件的。条件为四人中有三人是真话。当一人说的话为真则结果为 1 ,四人有三人说真话所以判断结果最终相加为 3 。for循环逐一排除,最终输出结果。代码:#include<stdio.原创 2020-11-09 00:33:19 · 870 阅读 · 0 评论 -
c语言 - 《猜名次》问题(全解析)
猜名次问题题目:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。解析:用for循环来猜每一个人的名次,共五人。每人只有一半话是对的,所以A要么(B == 2) 是真为 1 ,要么 (A == 3) 为真是1,所以式子为(B == 2) + (A == 3) == 1。五个人的说的话都是半错原创 2020-11-08 23:56:50 · 2714 阅读 · 6 评论 -
c语言 - 喝汽水问题(简单代码,非递归)
喝汽水问题喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水。给20元,可以喝多少瓶汽水?#include <stdio.h>int pop(int num){ int total = 20; int bottles = 20; while (bottles>1){ total += bottles / 2; bottles = bottles / 2 + bottles % 2; } return total;}int main(){ int tota原创 2020-11-04 21:35:36 · 556 阅读 · 2 评论 -
c语言 - 交换两个变量(不创建临时变量)两种方法
交换两个变量(不创建临时变量)方法一(无溢出)#include<stdio.h>int main(){ int a ,b; scanf("%d %d", a, b); a = a^b; b = a^b; a = a^b; printf("a=%d,b=%d\n", a, b); return 0;}方法二(可能溢出)int main(){ int a ,b; scanf("%d %d", a, b); a = a + b; b = a原创 2020-11-02 01:16:10 · 364 阅读 · 1 评论 -
c语言 - 求一个整数储存在内存中的二进制中1的个数 / 求两个数二进制中不同位的个数
写一个函数返回参数二进制中 1 的个数。本身与本身-1进行按位与&。循环进行,直到本数最终为0结束。int main(){ int num = 15; int i = 0; int count = 0; while (num) { count++; num = num&(num - 1); } printf("二进制序列的中1的个数为%d个\n", count); return 0;}...原创 2020-11-02 01:06:40 · 106 阅读 · 0 评论 -
c语言 - 数组操作(实现函数init()初始化数组,实现print()打印数组,实现reverse()函数完成逆置)
数组操作创建一个整形数组,完成对数组的操作实现函数init() 初始化数组实现print() 打印数组的每个元素实现reverse() 函数完成数组元素的逆置。自己设计以上函数的参数,返回值。#include<stdio.h>#pragma warning(disable:4996)#include<Windows.h>#include <string.h>int init(int arr[]){ for (int i = 0; i <原创 2020-11-02 00:47:00 · 1652 阅读 · 0 评论 -
c语言 - 冒泡排序(普通版)和(优化版)
冒泡排序普通版int main(){ int arr[] = { 3, 5, 2, 8, 6, 9, 0, 4, 1, 7 }; int temp = 0; for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - i; j++) { if (arr[j]>arr[j + 1]) { temp原创 2020-11-02 00:25:26 · 111 阅读 · 0 评论 -
c语言 - 递归实现n的k次方 (简洁代码)
递归实现n的k次方#include<stdio.h>#pragma warning(disable:4996)#include<Windows.h>#include<stdlib.h>int power(int n, int k){ k--; if (k == 0) return n; else return n*power(n, k);}int main(){ int n = 0; int k = 0; scanf("%d%d原创 2020-11-01 23:31:09 · 507 阅读 · 0 评论 -
c语言 - 1到100里共输出多少个数字9(小白首选,手把手教你读语句)
1到100里共输出多少个数字9步骤:设参数 i ,用for循环遍历1-100。设参数count,数字9每增加一个就+1。for里嵌套两个if语句。当 i 对10取余为9时,count+1;当 i 整除10为9时,count+1。最后输出count值。代码:#include<stdio.h>#pragma warning (disable:4996)#include<windows.h>int main(){ int i ; int count = 0原创 2020-10-22 16:45:11 · 434 阅读 · 0 评论 -
c语言 - 打印100-200之间的素数(小白首选,手把手教你读语句)
打印100-200之间的素数素数,就是只能被1和自身整除的数。步骤:我们要设参数 i 遍历100-200,将他们的值放入函数IsPrime中。① 创建IsPrime函数,设参数 j 来判断它是否能被整除。② j 从2开始循环增加,j<i 时结束循环。③ 如果 i 能被 j 整除,那么返回值为0,循环结束;如果 j 一直循环一直没返回0,循环结束,返回值为1。返回1值到main函数,判定IsPrime(i)是否等于1,“是”则输出这个 i 值。代码:#include<std原创 2020-10-22 16:23:54 · 242 阅读 · 0 评论 -
c语言-求10个整数中的最大值
输入10个整数,求其中最大值我们先将是个整数赋值到一个arr[10]的数组中去,再让最大值等于第一个元素,后循环后面的元素与第一个元素进行比较,最大值的赋值到max里,最终输出max。#include<stdio.h>#pragma warning (disable:4996)int main(){ int arr[10]; int max = 0; int i; printf("输入10个数:\n"); for (i = 0; i < 10; i++) { s原创 2020-10-21 23:43:08 · 2305 阅读 · 0 评论 -
c语言-整型数组中查找具体某个数-二分查找法(折半查找算法)
二分查找法题目:编写在一个整型有序数组中查找具体的某个数。要求:找到了就打印数字下标,找不到则输出“找不到“”。解:原创 2020-10-21 21:59:14 · 879 阅读 · 0 评论 -
c语言-在屏幕上输出9*9乘法口诀表
在屏幕上输出9*9乘法口诀表设置i,j变量控制行和列的循环输出,在循环条件中设置换行条件,当i==j时换行。打印时“\t“使每列对齐打印。原创 2020-10-21 22:36:40 · 1810 阅读 · 0 评论 -
c语言-求最大公约数,辗转相除法,代码简洁。
学习写了很多种求最大公因数的代码,还是看MOOC翁恺老师的代码最简洁。辗转相除法:又称欧几里得算法,用于计算两个非负整数的最大公约数。以除数和余数反复做除法运算,当余数为0时,取当前式子除数为最大公约数。定理:两个整数的最大公约数,等于其中较小的数和两数相除余数的最大公约数。计算公式:gcd(a,b) = gcd(b,a mod b)方法如图:...原创 2020-10-20 23:51:06 · 736 阅读 · 1 评论