231. 2的幂

    2^3=8 得  8是2的幂

    判断一个整数是不是2的幂,可根据二进制来分析。2的幂如2,4,8,等有一个特点:

    二进制数首位为1,其他位为0,如2为10,4为100

    2&(2-1)=0   4&(4-1)=0     即得出结论如果一个数n为2的幂,则n(n-1)=0

258 各位相加的过程为3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

    有如下关系:num = a * 10000 + b * 1000 + c * 100 + d * 10 + e

    即:num = (a + b + c + d + e) + (a * 9999 + b * 999 + c * 99 + d * 9)

    因为 a * 9999 + b * 999 + c * 99 + d * 9 一定可以被9整除,因此num模除9的结果与 a + b + c + d + e 模除9的结果是一样的。

    对数字 a + b + c + d + e 反复执行同类操作,最后的结果就是一个 1-9 的数字加上一串数字,最左边的数字是 1-9 之间的,右侧的数字永远都是可以被9整除的。

    return 1 + (num-1) % 9;

371.两整数之和 不使用+.-符号

    思路:使用异或运算,可以计算出两个数中仅有1的位置相加   a^b

       使用与运算,可以知道两个数都为1的位置,需要进位。a&b

       将以上两个结果相加,就是想要的结果。但是仍然不能使用+,则循环执行上面两部,直到b为0,则不需要相加,退出。

       while(b!=0){
                  c = a^b;
                  b = (a&b)<<1;
                  a = c;
             }
            return a;

342.4的幂

    先判断n是不是2的幂,因为4的幂一定是2的幂  n&(n-1)==0

    因为如果是4的幂,则二进制1后面的0为偶数个,也就是1一定在奇数上。通过n与.0X55555555(....1010101)进行&操作,保留奇数位,判断是否改变。(num&0x55555555)==num

    最后结果 return (num&0x55555555)==num && (num&0x55555555)==num

326.3的幂

    要求n是不是3的幂,则log3(n)==0即可。 logm(n) = log10(n)/log10(m);

    double result = log10(n)/log10(3);

    return (result==int(result))?true:false;

453. 最小移动次数使数组元素相等

    题:给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。

     例子: 输入:[1,2,3]     输出: 3

    解释:   只需要3次移动(注意每次移动会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]    

    思路:逆向思考,每次移动让剩余的n-1个数加1,相当于每次移动让选定的那个数减1, 所以最少移动次数其实就是所有元素减去最小元素的和

         代码:public int minMoves(int[] nums) {

         int min = nums[0];
         int sum = nums[0];
          for(int i=1;i<nums.length;i++){
            sum +=nums[i];
            if(nums[i]<min){
              min = nums[i];
            }
          }
         return sum-min*nums.length;
      }

448. 找到所有数组中消失的数字

    题:给定一个范围在  1 ≤ a[i] ≤ nn = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。

      找到所有在 [1, n] 范围之间没有出现在数组中的数字。    

    例:输入:[4,3,2,7,8,2,3,1]    输出:[5,6]

思路:将数字中的数字nums[i]对应的索引中的数(比如:第一个数nums[0]是4,则对用的4的索引的数nums[4-1]=7)变为负数,即nums[4-1]=-7。

       数组遍历完一遍之后,变为 [-4,-3,-2,-7,8,2,-3,-1],对用的index为5,6。即未找到的数为5,6

367. 有效的完全平方数

    例:输入16,输出True   输入14,输出False

    思路:1,首先想到的是暴力法或者二分查找等方法,从1~n中找一个数m,不断判断m*m==n?

         2,通过列举所有的完全平方数,1,4,9,16,25,36,49,64,81,100…等等,发现完全平方数的差都为奇数,即1,3,5,7,9,11,13,15…等等~所以可以判断完全平方数应该是N个奇数的和。

    核心代码:for(int i = 1; num > 0; i += 2){
                    num -= i;
               }
               return num == 0;

leetcode有意思的题目总结的更多相关文章

  1. leetcode top 100 题目汇总

    首先表达我对leetcode网站的感谢,与高校的OJ系统相比,leetcode上面的题目更贴近工作的需要,而且支持的语言广泛.对于一些比较困难的题目,可以从讨论区中学习别人的思路,这一点很方便. 经过 ...

  2. leetcode - 位运算题目汇总(下)

    接上文leetcode - 位运算题目汇总(上),继续来切leetcode中Bit Manipulation下的题目. Bitwise AND of Numbers Range 给出一个范围,[m, ...

  3. leetcode tree相关题目总结

    leetcode tree相关题目小结 所使用的方法不外乎递归,DFS,BFS. 1. 题100 Same Tree Given two binary trees, write a function ...

  4. [LeetCode] 二叉树相关题目(不完全)

    最近在做LeetCode上面有关二叉树的题目,这篇博客仅用来记录这些题目的代码. 二叉树的题目,一般都是利用递归来解决的,因此这一类题目对理解递归很有帮助. 1.Symmetric Tree(http ...

  5. [LeetCode] 动态规划入门题目

    最近接触了动态规划这个厉害的方法,还在慢慢地试着去了解这种思想,因此就在LeetCode上面找了几道比较简单的题目练了练手. 首先,动态规划是什么呢?很多人认为把它称作一种"算法" ...

  6. 关于LeetCode上链表题目的一些trick

    最近在刷leetcode上关于链表的一些高频题,在写代码的过程中总结了链表的一些解题技巧和常见题型. 结点的删除 指定链表中的某个结点,将其从链表中删除. 由于在链表中删除某个结点需要找到该结点的前一 ...

  7. LeetCode - 排列相关题目

    1.获取全排列 https://leetcode.com/problems/permutations/submissions/ 按字典序输出: 这里用的是vector<int>,不是引用. ...

  8. LeetCode中二叉树题目总结

    本文仅为博主个人总结,水平有限,欢迎大神指出不妥处. 关于二叉树的相关概念可以参见二叉树的百度百科,或binary tree Wiki. 二叉树结点类的常见定义为: /* Definition for ...

  9. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

随机推荐

  1. git reset --soft --hard 区别

    [转]git reset 之 soft mixed hard选项的区别 (2014-09-09 16:54:06) 转载▼ 标签: git 分类: Linux 译注:为了避免丢失本地的修改以及orig ...

  2. JSTL 引入

    首先要明白jstl有如下版本:  jstl1.0的引入方式为: <taglib uri="http://java.sun.com/jstl/core" prefix=&quo ...

  3. 微信小程序中使用阿里字体图标

    在微信小程序中使用阿里字体图标 ,不通过转换成base64的方式实现. 为了美化微信小程序,可以适当的使用一些小图标,这样体验也更友好些,于是决定使用常用的字体图标. 下载图标 首先在阿里字体图标查找 ...

  4. CodeForces 877E Danil and a Part-time Job(dfs序+线段树)

    Danil decided to earn some money, so he had found a part-time job. The interview have went well, so ...

  5. VC6.0 如何显示代码行号

    VC6.0是一款比较经典.稳定的功能强大的IDE,目前也有很多人在使用.但美中不足的是它不能像其他IDE那样显示行号.这里需要用到一个插件VC6LineNumberAddin, 下载地址:http:/ ...

  6. linux help

    linux提供了极为详细的帮助工具及文档,一定要养成查找帮助文档的习惯,可以大大减少需要记住的东西,并提高效率. 几乎所有命令都可以使用-h或--help参数获取使用方法,参数信息等. man man ...

  7. VS2010下安装OpenCV2.4.3

    本文记录Windows 7 X86 SP1操作系统环境下,安装与配置OpenCV2.4.3的详细步骤.前置需求:已安装有VS2010. 下载并安装OpenCV 从http://www.opencv.o ...

  8. Nexys4 DDR MIG控制器引脚文件

    目前网上只有ucf文件,vivado不兼容ucf格式 使用c++字符串转换的xdc格式代码 set_property -dict { PACKAGE_PIN R7 IOSTANDARD SSTL18_ ...

  9. Win8共享wifi热点设置

    Win8共享wifi热点如何设置?大家都知道win7系统可以实现wifi热点共享,那么win8应该也能实现wifi热点共享,那么如何设置win8不需要任何软件只需要对电脑进行设置就可以共享无线上网. ...

  10. centos6和7的防火墙开关

    CentOS6.5查看防火墙的状态: 1 [linuxidc@localhost ~]$service iptable status 显示结果: 1 2 3 4 5 [linuxidc@localho ...