FireEmissary

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  14 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks

置顶随笔 #

从openclipart.org下了最新的图片包,它们是公共域的可以免费自由使用.
可惜是svg格式,没找到像样的渲染库,就用inkscape批处理它们了.坑爹的是明明指定了--without-gui还弹出窗口问我要嵌入还是链接....
5万多个文件渲染成功了4万多个,我写了个程序把它们合并到2560*2560的png图里,每个图有128*128图标400个,伴随一个.c文件指定了图标实际大小,比如
{114,128}说明该图标114像素宽.
pngtilesize[0]是该图第一个图标,也即在0*0像素开始的那个图标.
pngtilesize[20]是该图第21个图标也即在0*128像素开始的那个图标.以此类推.

百度网盘下载
posted @ 2014-03-16 19:08 FireEmissary 阅读(2496) | 评论 (1)编辑 收藏

     摘要: bind多层嵌套使用带来可读性问题,而且易出错.如果支持C++11建议尽量用lambda而不是bind  阅读全文
posted @ 2013-03-10 09:11 FireEmissary 阅读(7906) | 评论 (11)编辑 收藏

2016年11月15日 #

     摘要: 百行js代码实现一个内联响应式日历jquery插件.只依赖jquery和booststrap  阅读全文
posted @ 2016-11-15 16:33 FireEmissary 阅读(284) | 评论 (0)编辑 收藏

2016年7月24日 #

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.

For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.

Window position                  Max 
--------------- -----
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7

Therefore, return the max sliding window as [3,3,5,5,6,7].

Note: 
You may assume k is always valid, 1 ≤ k ≤ input array's size.

Follow up:
Could you solve it in linear time?

Hint:

  1. How about using a data structure such as deque (double-ended queue)?
  2. The queue size need not be the same as the window’s size.
  3. Remove redundant elements and the queue should store only elements that need to be considered.


大意是用双向队列可以n的线性时间.网友的解法意思是前端移出了滑动窗口的元素要移除

然后新指向的元素和队列尾部元素比较,尾部小的元素也要移除.这样保持队列总是在滑动窗口里从大到小排好.

个人觉得当k比较大而输入元素基本随机时不可能是n复杂度.而应该是(k/2)*n左右


所以我的解法干脆用两个指针:最大值,第二大值来维护.实际运行还比双端队列快一点点.(92ms 击败90%)


vector<int> maxSlidingWindow(vector<int>& nums, int k) {
         
if(nums.size()<2)return nums;
        size_t n
=nums.size(), maxv=0,secondv=~0;
        vector
<int> out;
         
//secondv维持第二大的元素.如果maxv在窗口边界,secondv就是魔术~0代表不存在第二小元素.
         for(size_t i=1;i<k;++i)
            {
                
if(nums[i]>nums[maxv]){
                    maxv
=i;
                    secondv
=~0;
                }
else  if(secondv==~0||nums[i]>nums[secondv]){
                    secondv
=i;
                }
            }
         
out.push_back(nums[maxv]);
         
for(size_t i=k;i<n;++i)
         {
             
if(maxv<=i-k)
                 {
                     
                     
if(secondv==~0){
                         maxv
=i;
                     }
else{
                        maxv
=secondv;
                        secondv
=secondv+1;
                        
//maxv移出滑动窗口时,如果secondv存在,显然要更新它找出新的第二大元素.
                        for(size_t j=secondv+1;j<i;++j)
                            
if(nums[j]>nums[secondv])secondv=j;
                     }
                 }
             
if(nums[i]>nums[maxv]){
                 maxv
=i;
                  secondv
=~0;
             }
else  if(secondv==~0||nums[i]>nums[secondv]){
                    secondv
=i;
                }
                
out.push_back(nums[maxv]);
                
         }
        
return out;
    }



posted @ 2016-07-24 14:54 FireEmissary 阅读(910) | 评论 (0)编辑 收藏

2016年3月27日 #

     摘要: 没用真正的trie树代码简短不少.  阅读全文
posted @ 2016-03-27 20:57 FireEmissary 阅读(1134) | 评论 (0)编辑 收藏

2016年3月26日 #

     摘要: 访问过的元素不能再访问,发现大家的实现都是用个附加结构标记访问过的.就地赋值个'\0'后面再恢复好啦.......  阅读全文
posted @ 2016-03-26 18:41 FireEmissary 阅读(897) | 评论 (0)编辑 收藏

2016年3月17日 #

     摘要: Leetcode 44: Wildcard Matching 的贪心法比递归版效率的证明.  阅读全文
posted @ 2016-03-17 12:48 FireEmissary 阅读(1265) | 评论 (0)编辑 收藏

2014年3月16日 #

从openclipart.org下了最新的图片包,它们是公共域的可以免费自由使用.
可惜是svg格式,没找到像样的渲染库,就用inkscape批处理它们了.坑爹的是明明指定了--without-gui还弹出窗口问我要嵌入还是链接....
5万多个文件渲染成功了4万多个,我写了个程序把它们合并到2560*2560的png图里,每个图有128*128图标400个,伴随一个.c文件指定了图标实际大小,比如
{114,128}说明该图标114像素宽.
pngtilesize[0]是该图第一个图标,也即在0*0像素开始的那个图标.
pngtilesize[20]是该图第21个图标也即在0*128像素开始的那个图标.以此类推.

百度网盘下载
posted @ 2014-03-16 19:08 FireEmissary 阅读(2496) | 评论 (1)编辑 收藏

2013年6月30日 #

也许开发opengl或写ndk程序什么的用得着.转换包括图片文件和.h,.cpp文件(用于嵌入程序使用)还有.txt文件(可用于脚本来处理)
就一个main.cpp文件的程序,用了freetype库和freeimage库,打开codeblocks工程时注意改这些库的路径.
http://www.cppblog.com/Files/FireEmissary/font2img2.zip
posted @ 2013-06-30 16:06 FireEmissary 阅读(3199) | 评论 (1)编辑 收藏

2013年3月10日 #

     摘要: bind多层嵌套使用带来可读性问题,而且易出错.如果支持C++11建议尽量用lambda而不是bind  阅读全文
posted @ 2013-03-10 09:11 FireEmissary 阅读(7906) | 评论 (11)编辑 收藏

2012年9月12日 #

有了lambra和std::function,写和界面有关的代码回调方便多了.为了界面布局生成了大量的窗口,程序和小但也许比较占系统资源.

这程序比较包括了白酒领域相关的酒精度数转换,酒度体积百分比和质量百分比两个数据文件,是我根据网上的word文档转码成txt再观察结构,删掉干扰部分然后

写个数据读取程序转换而成;自己敲成代码可没这么轻松.

有需要的人士可以放心使用我的代码和程序.完全免费(MIT许可)


程序下载.

代码下载.



posted @ 2012-09-12 21:43 FireEmissary 阅读(3214) | 评论 (3)编辑 收藏

2012年6月28日 #

好多开源工程又依赖好多其它工程,起码在windows下用mingw+msys编译起来真烦要一个一个编译好依赖库,然后还得在configure
中配置这些库路径.于是写了个shell脚本如下:
#! /bin/sh

baselib
=`dirname $0`
if [ $baselib = '.' ];then
   baselib
=`pwd`
fi

echo baselib:$baselib

for file in ./*;
 do
  
if test -d $file;then  
          echo into$file
          cd $file 
          
if test -e ./configure;then      
              `.
/configure  --prefix=${baselib}/alllibs`
              `make`
              `make install`               
          fi
          cd ..
  fi
 done

意思就是加入你把依赖库都放在某个目录下的话,脚本进入该目录的所有子目录,找configure文件,找到了就./configure make make install了.configure特意指定安装目录到工作目录的alllibs下.

我试了试GraphicsMagick-1.3.16(下的就是那个zip压缩的带依赖库的版本).哈,成功两个:freetype(ttf目录那个)和jasper(jp2目录那个).其它的不成功,不过错误信息太深奥我不太懂,有改进的也像我一样分享下哈.
posted @ 2012-06-28 18:59 FireEmissary 阅读(2730) | 评论 (1)编辑 收藏

仅列出标题  下一页