- 博客(48)
- 收藏
- 关注
原创 Java程序经编译后会产生什么
编译以后会生成 .class文件,也就是字节码文件:byte codejava程序在编译(javac .java文件名 指令)后会产生字节码文件,也就是.class文件。根据虚拟机所在系统的不同将字节码文件转变为不同的可执行文件,这也是java程序可跨平台的根据。...
2020-12-04 23:14:44
5910
5
原创 java - LeetCode 287. 寻找重复数(全面解析,思路清晰)(二分查找)
LeetCode 287. 寻找重复数b站视频,一分钟画图解析。链接: https://b23.tv/JOhtcK.思路:整个数组只有一个重复数,其余都是一个数。我们就从这些数的中位数开始找。遍历整个数组找出小于或大于中位数的个数,如果个数大于中位数,说明有重复的数字。继续二分查找。解析:设置两个变量,记录整个数组最小值和最大值。再设置一个计数变量。开始循环,条件:最小值小于最大值。二分查找,算出中位数,找中位数。①遍历整个数组找小于中位的数,并计数;②再将个数与中位数比较,如果个数比
2020-11-30 17:05:12
1405
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
275
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
382
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
981
1
原创 c语言 - 文件操作(打开和关闭 、顺序读写)(小白干货)
1. 什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。1.1以下讨论的是数据文件在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示
2020-11-27 01:17:22
2578
1
原创 c语言 - 动态内存函数(基础知识介绍)
动态内存函数的介绍malloc和freeC语言提供了一个动态内存开辟的函数:void * calloc (size_t num, size_t size);这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数 size 为0,malloc的行为
2020-11-26 00:13:24
230
原创 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
962
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
220
原创 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
223
原创 java - LeetCode 53.最大子序和(代码简洁,简单易懂,小白入手)(数组)
LeetCode 53.最大子序和贪心算法思路:将当前值与之前最大子序和比较;如果当前值比之前所算的子序列和要大,那我们就丢弃之前的子序列和,将当前值作为一个新的子序列头开始继续寻找最大子序和。方法:先设置一个变量val,比较当前值与之前最大子序和,取其中最大值。再设置一个变量max,储存整个数组中计算的最大子序和。class Solution { public int maxSubArray(int[] nums) { int val = nums[0];
2020-11-23 23:54:12
203
原创 c语言 - 结构体(进阶)(全篇干货,小白首选)
结构体结构体的声明结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的声明:struct tag{ member-list;}variable-list;//变量例如描述一个学生:struct Stu{ char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号};//分号不能丢匿名结构体//匿名结构体类型struct{ int a; ch
2020-11-23 01:01:45
619
原创 java - LeetCode 11.盛最多水的容器(简单思路,简洁代码)(数组)
LeetCode 11.盛最多水的容器解析:1 . 设置两个指针变量,在数组最左和最右。设置一个最大容积变量。2 .先判断当前的容积与最大容积大小,再进行指针更新。① 只要左指针小于有指针,就一直循环查找。容器容积公式:底×高。高:左和右中最小的值。底:右-左。算出当前容积,与之前最大容积相比较,求出最大容积。② 如果左值大于右值,就让小的右值更新向前移动;如果左值小于右值,就让小的左值更新向后移动;如果相等,两个都移动。3 .返回最大容积。class Solution { p
2020-11-22 17:17:05
203
原创 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
188
原创 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
268
原创 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
225
原创 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
352
原创 c语言 - 总结篇 - 字符串函数(小白总结)
字符串函数语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。本章重点重点介绍处理字符和字符串的库函数的使用和注意事项求字符串长度strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数介绍strncpystrncatstrncmp字符串查找strstrstrtok错误信息报告strerror函数介绍str
2020-11-17 01:03:20
244
1
原创 c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(小白入手)
杨氏矩阵题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的。请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);思路:首先按题目创建一个每行从左到右递增,从上到下是递增的矩阵。因为时间复杂度小于O(N),所以不能用两个for循环嵌套。用一个循环。那我们就从第0行的最后一位元素开始找, 将要查找值与它比较;查找值大我们就去下一行找(i++),因为这个值已经是本行最大值了;查找值小我们就往这行前面找(j - -),因为当前值是本行最大值。找到返
2020-11-16 01:30:32
954
原创 c语言 - 字符串左旋,可以左旋字符串中的k个字符(思路清晰,代码简洁)(小白入手)
字符串左旋题目:实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDA,ABCD左旋两个字符得到CDAB。思路:创建一个函数,实现遍历一次数组,让第一个元素移到最后一位,后面全部的元素都向前左移一位。因为需要左旋多个字符,那我们就要将这个循环实现多次。所以在这个循环外面套一个循环实现进行 k 次,即左旋 k 个字符。解析:key为左旋的字符数;一个for循环数组,次数为key,相当于进行key次:后一位元素赋值到前一位。这个for里再嵌套一个for循环遍历
2020-11-16 00:38:02
328
原创 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
268
原创 c语言 -使用库函数,qsort排序各种类型的数据(回调函数)(升序和降序)
使用库函数,qsort排序各种类型的数据回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。qsort函数C语言编译器函数库自带的排序函数。qsort 的函数原型是是base所指数组进行排序。qsort函数包含在C 标准库 - <stdlib.h>中。void q
2020-11-15 21:00:32
1493
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
4161
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
3838
1
原创 c语言 - 深度剖析数据在内存中的存储(全篇干货)
深度剖析数据在内存中的存储数据类型char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数类型的意义:他们所占存储空间的大小。使用这个类型开辟内存空间的大小(大小决定了使用范围)。(存)如何看待内存空间的视角。(取)类型的基本归类:整形家族:charunsigned
2020-11-11 00:56:58
359
原创 c语言 - 打印菱形(小白入手,思路简单,正确打印!!)(看这一篇就够了!)
题:打印菱形思路:菱形分为上半部分三角形和下半部分倒三角形两部分,中间空出的地方为空格。空格个数:第一行符号在正中间,所以空格个数为(n-1)/2。后面每一行都比上一行多了两个字符,即空格数量每一行-2,得第 i 行空格个数:(n-1)/2 - 2(i-1)。字符数:前半部分递增,后半部分递减,所以分前后两部分输出。第一行中间一个字符,之后每一行前半部分相对于上一行多了两个字符,所以第 i 行前半部分字符个数为2i-1。后半部分字符,比前半部分少1,故为2i-2。在这里插入代码片.
2020-11-10 02:02:06
1743
原创 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
988
原创 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
1418
原创 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
5417
原创 c语言 - 调整奇数偶数顺序,使奇数位于偶数前面(全解析)(两种方法)
调整奇数偶数顺序题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。解析:创建数组,取数组长度num。将数组和长度传入Switch函数。函数中,创建新的数组arr2;第一次遍历找出数组中奇数,传入arr2;第二次遍历找出数组中的偶数,传入arr2;第三次遍历输出arr2。代码1:#include<stdio.h>#pragma warning(disable:4996) #include&
2020-11-09 20:37:51
1964
3
原创 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
2420
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
1027
原创 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
2979
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
672
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
440
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
159
原创 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
1729
原创 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
169
原创 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
596
原创 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
520
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅